ZIMPL:约束中无法识别2D变量声明

问题描述 投票:1回答:3

我有一个真正的挑战,在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节)的实施相同。

提前致谢。

linear-programming scip
3个回答
2
投票

你在约束的左边有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中,总和只考虑下一个变量,因此必须使用括号使其工作。


2
投票

为了补充Gerald所写的内容,在ZIMPL中,总和只考虑下一个变量,因此必须使用括号使其工作。


0
投票

最小化有名称缺失。它应该是最小化obj:总和...

© www.soinside.com 2019 - 2024. All rights reserved.