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

时间:2017-11-30 00:35:45

标签: minizinc

我用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文件初始化此数组的一个或一些元素?

1 个答案:

答案 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