MiniZinc -(多维)数组的数组
MiniZinc - Array of (multidimensional) array
我想知道是否有可能在 MiniZinc 语言中拥有(多维)数组的数组。
确实,我想与工人解决一个时间表问题。我的目标是检查它们是否每周至少有 1 天有空。每个工人都有一个整数索引,我每周都有他们的时间表。
对我来说,像这样的数组:[[number_of_week, weekday]]
可能是一个解决方案。
例如,第 1 周 monday/friday 和第 2 周 tuesday/thursday 有空的工人 1 可以通过以下数组建模:(« 1 » 表示该工人有空)
[[| 1,0,0,0,1,
| 0,1,0,1,0 |],
[...], ...]
如果可以,如何声明这种数组?我也乐于接受任何关于建模此约束的建议。
抱歉我的英语不完善,在此先感谢您,
尼古拉斯.
我不确定我是否完全理解你的问题,但你可以有如下多维数组:
array[1..3,1..3] of int: a = array2d(1..3,1..3,
[1,0,0,
0,1,0,
1,1,0]);
或使用另一种语法:
array[1..3,1..3] of int: a =
[|1,0,0
|0,1,0
|1,1,0|];
但是,您不能数组中有数组,即这是不允许的:
% This is NOT valid MiniZinc code!
array[1..3,1..3] of int: a =
[[[1,0,0],[1,0,1]],
[[0,1,0],[0,1,1]],
[[1,1,0],[0,0,0]]];
另请注意,不能有 "ragged" 个数组:每一行和每一列中的元素数必须相同。
关于您的特定约束,如果我理解您的描述,您可能会像这样定义 3D 数组:
int:_num_workers = 2;
int: num_weeks = 3;
int: num_days = 4;
array[1..num_workers,1..num_weeks,1..num_days] of int: a =
array3d(1..num_workers,1..num_weeks,1..num_days,
[
% worker 1
% week1 week2 week3
1,0,0,1, 1,1,0,1, 0,0,1,1,
% worker 2
% week1 week2 week3
1,0,0,0, 0,0,0,1, 1,1,1,0
]);
请特别注意创建 3D 数组的 array3d
结构。因此,您可以使用 a[w,e,d]
.
访问工作人员 w
周 e
的第 d
天
我想知道是否有可能在 MiniZinc 语言中拥有(多维)数组的数组。
确实,我想与工人解决一个时间表问题。我的目标是检查它们是否每周至少有 1 天有空。每个工人都有一个整数索引,我每周都有他们的时间表。
对我来说,像这样的数组:[[number_of_week, weekday]]
可能是一个解决方案。
例如,第 1 周 monday/friday 和第 2 周 tuesday/thursday 有空的工人 1 可以通过以下数组建模:(« 1 » 表示该工人有空)
[[| 1,0,0,0,1,
| 0,1,0,1,0 |],
[...], ...]
如果可以,如何声明这种数组?我也乐于接受任何关于建模此约束的建议。
抱歉我的英语不完善,在此先感谢您, 尼古拉斯.
我不确定我是否完全理解你的问题,但你可以有如下多维数组:
array[1..3,1..3] of int: a = array2d(1..3,1..3,
[1,0,0,
0,1,0,
1,1,0]);
或使用另一种语法:
array[1..3,1..3] of int: a =
[|1,0,0
|0,1,0
|1,1,0|];
但是,您不能数组中有数组,即这是不允许的:
% This is NOT valid MiniZinc code!
array[1..3,1..3] of int: a =
[[[1,0,0],[1,0,1]],
[[0,1,0],[0,1,1]],
[[1,1,0],[0,0,0]]];
另请注意,不能有 "ragged" 个数组:每一行和每一列中的元素数必须相同。
关于您的特定约束,如果我理解您的描述,您可能会像这样定义 3D 数组:
int:_num_workers = 2;
int: num_weeks = 3;
int: num_days = 4;
array[1..num_workers,1..num_weeks,1..num_days] of int: a =
array3d(1..num_workers,1..num_weeks,1..num_days,
[
% worker 1
% week1 week2 week3
1,0,0,1, 1,1,0,1, 0,0,1,1,
% worker 2
% week1 week2 week3
1,0,0,0, 0,0,0,1, 1,1,1,0
]);
请特别注意创建 3D 数组的 array3d
结构。因此,您可以使用 a[w,e,d]
.
w
周 e
的第 d
天