Сумматор диапазонов в GAMS

Мне нужно выполнить функцию, в которой для всех i внутри моих объектов мне нужно сделать сумму в зависимости от индекса, псевдокод будет выглядеть так:

Объекты

Sets NUM_OBJECTS 7

          i objects / o1*o7 /;

Уравнения

diasCon                 .. if(i<4) 
                           then ((sum from i to i+5 ,value(i)) =g= value(i)*5), 
                           else ((sum i ,value(i)) + (sum from  1 to 5-(8-i) ,value(i)) =g= value(i)*5);

Но я понятия не имею, как это реализовать.


person Alejandro Cordoba    schedule 02.10.2017    source источник


Ответы (1)


Предполагая, что значение (i) является переменной, я думаю, что вы можете это сделать следующим образом

 SET i /o1*o7/;
 ALIAS(i,ii);
 EQUATION EqName1(i), EqName2(i);
 EqName1(i)$(ord(i) lt 4)..      SUM(ii$((ord(ii) ge ord(i)) AND (ord(ii) le (ord(i)+5))),value(ii) =g= 5*value(i)
 EqName2(i)$(ord(i) ge 4)..      SUM(ii,value(ii)) + SUM(ii$(ord(ii) le (ord(i) - 3)),value(ii)) =g= 5*value(i)
person Salva    schedule 03.10.2017