Как мне написать ограничение в Julia с несколькими значениями x, y, z?

#optimization #constraints #julia

#оптимизация #ограничения #джулия

Вопрос:

как мне правильно написать это ограничение в Julia?

 @constraint(adwords, sum(x[i] * priceofhome1[i] for i=1:4)
  sum(y[i] * priceofhome2 for i=1:4)   sum(z[i] * priceofhome3 for i=1:4) <= 12)
 

Я пытаюсь сказать, что сумма всех этих значений должна быть меньше или равна 12.

Я пробовал писать этот код различными способами

 @constraint(adwords, sum(x[i] * priceofhome1[i] for i=1:4)
  sum(y[i] * priceofhome2 for i=1:4)   sum(z[i] * priceofhome3 for i=1:4) <= 12)
 

Я получаю сообщение об ошибке ниже…….

ОШИБКА: операторы <=, >= и == могут использоваться только для указания скалярных ограничений. Если вы пытаетесь добавить векторизованное ограничение, вместо этого используйте поэлементные операторы сравнения точек (.<=, .>= или .==)

Комментарии:

1. Вы пишете priceofhome1[i] , но позже пишете просто priceofhome2 без индексации. Я предполагаю priceofhome2 , что это тоже массив. Это создает sum(y[i] * priceofhome2 for i=1:4) sum(z[i] * priceofhome3 for i=1:4) массивы и, а не скаляры, отсюда и ошибка. Если это так, добавление индексации, sum(y[i] * priceofhome2[i] for i=1:4) sum(z[i] * priceofhome3[i] for i=1:4) , должно исправить эту ошибку. Я не пользователь JuMP, поэтому я не знаю, есть ли какие-либо другие ошибки.

Ответ №1:

Добро пожаловать в StackOverflow!

Как предположил @hckr в своем комментарии, ваша ошибка, вероятно, заключается в том, что priceofhome2 и 3 могут быть массивами. Кроме того, ошибка, которую вам дала Джулия, поддерживает эту идею.

 @constraint(adwords, sum(x[i]*priceofhome1[i]   y[i]*priceofhome2[i]   
            z[i]*priceofhome3[i] for i in 1:4) <= 12)