我想在 Minizinc 中执行以下操作:对数组的切片设置约束,取 7 个索引并每次移动一个。我试过这样做:
constraint forall(i in 0..length(schedule)-1 - maxOn) (0 in schedule[i..i+maxOn]);
其中 schedule 是我的大小为 64 的输出数组,maxOn 是 7(天)。但是我收到以下错误:
MiniZinc: type error: array comprehension expression cannot be an array.
有什么想法吗?
在 python 中,我会使用带有数组切片的循环:
for i in range(len(schedule) - maxOn):
my_slice = schedule[i:i+maxOn]
以下基于您编写的内容的完整代码示例在最新的 MiniZinc 中按预期工作
int: maxOn = 7;
array[0..64] of var int: schedule;
constraint forall(i in 0..length(schedule)-1 - maxOn) (
0 in schedule[i..i+maxOn]
);