and*_*iba 2 multidimensional-array minizinc
我想将大型输入数组的初始化分成较小的块(只是为了可读性)。我试过这个:
array[1..3,1..2] of int: arr;
% This works:
% arr = array2d(1..3,1..2, [0,0,2,2,3,3]);
% But this not:
arr[1] = [0,0];
arr[2] = [2,2];
arr[3] = [3,3];
constraint true;
solve satisfy;
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,出现语法错误:
arr[1] = [0,0];
^
Error: syntax error, unexpected =, expecting ':'
Run Code Online (Sandbox Code Playgroud)
这是不支持的Minizinc
还是我错过了其他东西?
(有一个有点相关的问题initialize-only-certain-elements-of-array-in-dzn-file,但没有回答我的具体问题。)
MiniZinc 目前不允许这样做,原因有两个:
arr[1]
是对数组的无效访问。在编译器的开发分支上有数组切片,但它们以arr[1,..]
.我建议的解决方案是以二维方式格式化二维数组,这应该会增加可读性。MiniZinc 对二维数组文字有特殊的格式:
arr = [|
0,0|
2,2|
3,3|
|];
Run Code Online (Sandbox Code Playgroud)
更新:MiniZinc 现在完全支持数组切片。然而,赋值项仍然只允许使用标识符。