Arrays 为数组中的每个变量分配不同的域
我有一个int:capacity的数组:Arrays 为数组中的每个变量分配不同的域,arrays,constraints,constraint-programming,minizinc,Arrays,Constraints,Constraint Programming,Minizinc,我有一个int:capacity的数组:数组[backpacks],指定每个背包的容量 现在我想创建一个约束求解器必须满足的变量数组。我希望每个变量都取域1..capacity中的值,其中capacity对应于上述数组中指定的值 是否需要这样的工作:var容量的数组[backpacks]:bagcaps 或者我必须做一些类似的事情:var 1的数组[backpacks]..MAX:bagcaps 然后添加约束:constraint for all(背包中的i)bagcaps[i]在数组声明中没有
数组[backpacks],指定每个背包的容量
现在我想创建一个约束求解器必须满足的变量数组。我希望每个变量都取域1..capacity中的值,其中capacity对应于上述数组中指定的值
是否需要这样的工作:var容量的数组[backpacks]:bagcaps
或者我必须做一些类似的事情:var 1的数组[backpacks]..MAX:bagcaps
然后添加约束:constraint for all(背包中的i)bagcaps[i]在数组声明中没有限制特定元素的域的捷径。传统版本是您上次编写的版本:
constraint forall(i in backpacks) bagcaps[i] <= capacity[i]);
请注意,您仍然必须使用restrict\u domains
作为约束。我建议您总是尽可能地限制声明中的域,即使用var 1..max(capacity)
而不是var int
来使用声明
set of int: backpacks = 1..6;
array[backpacks] of int: capacity = [10,4,3,7,5,3];
array[backpacks] of var 1..max(capacity): bagcaps;
solve satisfy;
predicate restrict_domains(array[int] of var int: x, array[int] of int: d) =
forall(i in index_set(x)) ( x[i] <= d[i] );
constraint
% forall(i in backpacks) ( bagcaps[i] <= capacity[i] ) % original
restrict_domains(bagcaps,capacity)
;
% output [];