如何在 GAMS 中过滤具有相同索引的元素?
How to filter elements with identical indices in GAMS?
我有一个 GAMS 模型
Set i / 1*6 /;
Alias (i,ip,il) ;
Variables
x(i,ip) ;
我想生成对 x 中所有向量的标量积进行运算的方程,不包括同一向量的乘积。类似于:
scalarProduct(i)..
sum(ip,x(i,ip)x(i,il)) =e= someConstant;
但这并不排除相同向量的乘积。如何添加这个?我能以某种方式用美元声明来做吗?无论如何,该语句中可能存在一些错误,我没有尝试,因为我认为缺少我想要的排除项。
所以我想做的是:
Sets
i / 1*13 /
ii(i,i) diagonal elements / #i:#i /
ij(i,i) all elements / #i.#i /
ij_wo_ii(i,i);
得到没有对角元素的所有组合:
ij_wo_ii(i,j) = ij(i,j) - ii(i,j);
然后我在这样的等式中使用它:
equation(j,k)..
sum(i,x(i,j)*x(i,k)$ij_wo_ii(j,k)) =l= 1;
这类似于正交性,只是矩阵中向量的乘积必须小于某个值且不一定为 0。不知道是否有这个术语。希望它对其他人也有用。
我有一个 GAMS 模型
Set i / 1*6 /;
Alias (i,ip,il) ;
Variables
x(i,ip) ;
我想生成对 x 中所有向量的标量积进行运算的方程,不包括同一向量的乘积。类似于:
scalarProduct(i)..
sum(ip,x(i,ip)x(i,il)) =e= someConstant;
但这并不排除相同向量的乘积。如何添加这个?我能以某种方式用美元声明来做吗?无论如何,该语句中可能存在一些错误,我没有尝试,因为我认为缺少我想要的排除项。
所以我想做的是:
Sets
i / 1*13 /
ii(i,i) diagonal elements / #i:#i /
ij(i,i) all elements / #i.#i /
ij_wo_ii(i,i);
得到没有对角元素的所有组合:
ij_wo_ii(i,j) = ij(i,j) - ii(i,j);
然后我在这样的等式中使用它:
equation(j,k)..
sum(i,x(i,j)*x(i,k)$ij_wo_ii(j,k)) =l= 1;
这类似于正交性,只是矩阵中向量的乘积必须小于某个值且不一定为 0。不知道是否有这个术语。希望它对其他人也有用。