Использование функции суммы в GAMS для суммирования по подмножеству переменных - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю с проблемами максимизации в GAMS, где я выберу X=(x_1,x2,...,x_n) так, чтобы f(X)=c_1*x_1+...c_n*x_n было максимизировано.C являются известными скалярами, и я знаю n (10 в моем случае).Я хочу, чтобы мои ограничения были такими, чтобы первые (n-1)=9 x суммировались до одного, а последние - меньше 10. Как мне использовать сумму для этого?

Это то, что я пробовал:

SET C / c1 .... c2 /;
ALIAS(Assets,i)

Parameter Valuesforc(i) 'C values'/
*( here are my values typed in for all the C1)

POSITIVE VARIABLES
    x(i);

EQUATIONS
    Const1 First constraint
    Const1 Second constraint
    Obj    The Object;
* here comes the trouble:
Const1 ..   x(10) =l= 10
Const2 ..   sum((i-1),x(i)) =e= 1

Код не выполняется полностью, но я считаю, что набрана необходимая настройка. Как выполнить суммирование, чтобы найти x_1+x_1 + .... x_(n-1) икак вы относитесь к x_10?

1 Ответ

0 голосов
/ 27 сентября 2018

Попробуйте это:

Const1 ..   x('10') =l= 10;
Const2 ..   sum(i$(ord(i)<card(i)),x(i)) =e= 1;

Редактировать: Вот несколько заметок, объясняющих, что происходит в Const2, особенно в части "$ (ord (i)

Итак, в общем, существует условие о том, что всеэлементы i должны быть включены в сумму, кроме последней.

...