Arrays 为数组中的每个变量分配不同的域

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]在数组声明中没有

我有一个int:capacity的数组:
数组[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 [];