我用minizinc搞乱周围,我想要一个静态的mzn文件,我只使用dzn进行求解。 为了更好地理解这个问题,以下是一个示例:
include "globals.mzn";
include "data.dzn";
int: time;
int: n;
int: l=n*n;
array[1..4,0..time,1..l] of var bool: X;
solve satisfy;
我现在想要使用dzn文件初始化X的少数元素(其他元素应该是变量)。
dzn看起来像这样
time=1;
n=3;
X[4,1,7]=true;
由于这种初始化是不可能的,我也尝试使用X=array3d(1..4,0..time,1..l,[false,...,false]
,其中除了位置(4,1,7)中的元素之外的每个元素都是假的。然而,这会初始化每个元素,我无法获得我想要的结果,因为它不能满足我的约束。
有没有办法使用dzn文件初始化此数组的一个或一些元素?
答案 0 :(得分:1)
执行此操作的一种方法是在dzn文件的数据矩阵中使用匿名变量(_
)。这是一个简单的例子:
% mzn file
include "data.dzn";
int: time;
int: n;
array[1..time,1..n] of var bool: X;
solve satisfy;
数据文件:
% data.dzn
time=3;
n=2;
X = array2d(1..3,1..2,
[_,_,
_,_,
_,false
]);
请注意,此方法至少需要一个非匿名值,否则会抛出此消息:array literal must contain at least one non-anonymous variable
。