微型为数组中的每个VAR分配了不同的域



我有一个数组: array[backpacks] of int: capacity指定每个背包的容量。

现在,我想创建一系列变量,约束求解器必须满足这些变量。我希望每个变量在域1 ..容量对应于上述数组中指定的变量中。

对应。

类似此工作的东西: array[backpacks] of var capacity: bagcaps

或我必须做类似: array[backpacks] of var 1..MAX: bagcaps

之类的事情

然后添加约束: constraint forall(i in backpacks) bagcaps[i] <= capacity[i]

谢谢。

没有捷径可以限制数组声明中特定元素的域。传统版本是您最后写的版本:

constraint forall(i in backpacks) bagcaps[i] <= capacity[i]);

但是,您可以将其作为谓词(并将其放入单独的文件中,然后将其导入使用include(。例如。这样的事情:

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 [];

请注意,您仍然必须将restrict_domains用作约束。我建议您始终尽可能限制声明中的域,即使用var 1..max(capacity)而不是var int

使用声明。

最新更新