如何在GAMS中编写类似循环的循环?

时间:2016-12-14 04:26:53

标签: math optimization gams-math industrial

我倾向于在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; 怎么写这个循环?

1 个答案:

答案 0 :(得分:1)

您可以使用循环,但可能更好的解决方案是将方程式限制为正确的集合组合。在任何情况下,都可以使用集合的别名和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;

这定义了(p,j)与其自身的所有组合的等式,除了(p,j)==(p,j)。

我希望我已正确理解了请求,但您可以使用Alias和SameAs函数找出所需的确切实现。