Gams math 如何在GAMS中过滤具有相同索引的元素?

Gams math 如何在GAMS中过滤具有相同索引的元素?,gams-math,Gams Math,我有一个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; 然而,这并不排除相同向量的乘积。如何添加这个?我可以用美元结算单吗?无论如何,该语句中可能有一些错误,我没有尝试,因为我认为我想要的排除遗漏了

我有一个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。我不知道这是否有一个术语。希望它对其他人也有用。

我不明白你想用
scalarProduct
做什么。你想要把像
x(i1,i2)*x(i1,i3)
这样的东西相乘,并且想要排除像
x(i1,i2)*x(i1,i2)
这样的东西?我几乎忘了这一点。我找到了如何做的同时,将张贴答案现在