2016-12-14 13 views
0

Я склонен писать некоторые коды в GAMS, которые включают цикл, который исключает некоторые индексы, как я могу написать некоторый цикл, например, с исключением?Как написать цикл как это уравнение в GAMS?

u("p1","j1")*o1("p1","j2") - sum(t,v("p1","j1",t)*I1("p1","j2",t))=l=0; 
u("p1","j1")*o1("p1","j3") - sum(t,v("p1","j1",t)*I1("p1","j3",t))=l=0; 

В этих уравнениях u, o вместе, а также v, I1 вместе имеют разные индексы j; Как написать этот цикл?

+0

Мне непонятно, что вы хотите зациклиться и какие исключения должны быть. Не могли бы вы написать пример того, что вы хотите использовать псевдокод? –

+0

Дорогой Мартин, предположим, что эти уравнения: u ("p1", "j1") * o1 ("p1", "j2") - sum (t, v ("p1", "j1", t) * I1 (" p1" , "J2", т)) = л = 0; Я хочу повторить это уравнение для всех p, j в U, O1 таким образом, что u (p, j)! = O1 (p, j), например, этот цикл не учитывает u (p1, j1) * o1 (p1, j1), но учтите u (p, j) * o1 (o, j), за исключением тех, что u (p, j) = o1 (p, j). – iman

ответ

0

Вы можете использовать цикл, но, вероятно, лучшим решением является ограничение уравнений на правильную комбинацию множеств. В любом случае это можно сделать, используя псевдоним наборов и оператора SameAs.

Alias(p,pp); 
Alias(j,jj); 

E_myEquation(p,j,pp,jj) $(not (SameAs(p,pp) and SameAs(j,jj))).. 
    u(p,j)*o1(pp,jj) - sum(t, v(p,j,t)*I1(pp,jj,t)) =l= 0; 

Это определяет уравнение для всех комбинаций (р, J) с самим собой, для (р, J) == (р, J), за исключением.

Надеюсь, что я правильно понял запрос, но в противном случае вы, вероятно, можете определить точную реализацию, которую хотите, используя функции Alias ​​и SameAs.

+0

Это работает, спасибо – iman

 Смежные вопросы

  • Нет связанных вопросов^_^