我有一个真正的挑战,在Zimpl中声明一个2D变量。 (参数似乎工作正常。)
以下是我的MWE:
set I := {1 to 10};
set J := {1 to 5};
param A[I*J] := read InputFile as "n+";
var x[I] binary;
var s[J] binary; # this works but doesn't do what I need
var s2[I*J] binary; # this does what I need but doesn't work
minimize sum<i,j> in I*J with A[i,j] < 5: (s2[i,j] - x[i]) * A[i,j];
# this constraint compiles
subto constraint1:
forall <j> in J do sum <i> in I with A[i,j] < 5: x[i] <= 1 + s[j];
# this constraint does not compile
subto constraint2:
forall <j> in J do sum <i> in I with A[i,j] < 5: x[i] <= 1 + s2[i,j];
当我尝试创建我的lp文件时,我得到了
Error 133: Unknown symbol "i"
有没有人对如何让第二个约束起作用有任何见解?据我所知,这与Zimpl用户手册中的容量设施问题(第6.3节)的实施相同。
提前致谢。
你在约束的左边有i的和,但是在右边也引用i。我期待你的价值在哪?
什么会有用
forall <j> in J do sum <i> in I with A[i,j] < 5: (x[i] - s2[i,j]) <= 1;
但我不确定这是你想要达到的目的。
添加Leon的评论以提供更完整的答案:
为了补充Gerald所写的内容,在ZIMPL中,总和只考虑下一个变量,因此必须使用括号使其工作。
为了补充Gerald所写的内容,在ZIMPL中,总和只考虑下一个变量,因此必须使用括号使其工作。
最小化有名称缺失。它应该是最小化obj:总和...