arrays - MiniZinc - (多维)数组的数组

标签 arrays multidimensional-array minizinc

我想知道 MiniZinc 语言中是否可以有(多维)数组的数组。

确实,我想解决 worker 的时间表问题。我的目标是检查它们是否每周至少有 1 天可用。每个 worker 都由一个整数索引,我每周都有他们的日程安排。

对我来说,像这样的数组:[[number_of_week, weekday]]可能是一个解决方案。

例如,第 1 周周一/周五和第 2 周周二/周四有空的工作人员 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]]];

另请注意,不能有“参差不齐”的数组:每行和每列中的元素数量必须相同。

关于您的具体约束,如果我理解您的描述,您可能会定义一个 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] 访问工作人员 we 周的 d 日。

关于arrays - MiniZinc - (多维)数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48278879/

相关文章:

Android AES/GCM/NoPadding 特定长度输入字节的错误?

c - 如何在 C 中打印具有特定字符的单词?

arrays - Minizinc - 如何限制数组的每一列仅包含给定整数之一?

Minizinc 在求解过程中跟踪数组

minizinc - 具体化和半具体化谓词

c++ - 我们可以用这种方式在数组 (a1,a2) 中输入吗?

php - 检查数据库数组中是否存在值不起作用

javascript - 数组大小如何在 Javascript 中工作

ios - 多维数组转表

.each 循环内的 javascript .push 方法仅返回一个数组