仅初始化 dzn 文件中数组的某些元素

Initialize only certain elements of array in dzn file

我正在使用 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 的几个元素(其他元素应该是 vars)。

dzn 看起来像这样

time=1;
n=3;
X[4,1,7]=true;

由于这种初始化是不可能的,我还尝试使用 X=array3d(1..4,0..time,1..l,[false,...,false],其中除了位置 (4,1,7) 中的元素以外的每个元素都是假的。然而,这会初始化每个元素,我无法获得我想要的结果,因为它不能满足我的约束。

有没有办法使用 dzn 文件只初始化这个数组的一个或一些元素?

一种方法是在 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