我倾向于在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 :(得分: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函数找出所需的确切实现。