仅初始化 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
。
我正在使用 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
。