我倾向于在 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;这个循环怎么写?
我倾向于在 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;这个循环怎么写?
您可以使用循环,但可能更好的解决方案是将方程限制为正确的集合组合。在任何情况下,都可以使用集合的别名和 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 函数找出您想要的确切实现。