我想为MiniZinc中的一组整数的每个子集创建一个约束,沿着这条线......
constraint forall (S subset C, k in M) (
% Some constraint over the set S, and integer k
);
我还想在约束中使用S
的基数,而C
只是一组整数。我可以使用子集的语法吗? (以上型号不起作用)。
答案 0 :(得分:1)
目前没有数组/集合的生成器;因此除了在数据文件中手动列出功率集之外,没有可行的方法迭代给定集合的所有子集。
在大多数情况下,可以重新制定模型,以便不需要这些发生器。例如,考虑使用变量集:
var set of C: S;
% or if you want to declare S in a different way:
% var set of 0..100: S; % Different declaration
% constraint S subset C;
forall (k in M) {
% some cool constraints
}
这将使您能够制作包含约束的模型,声明“有这样的集合 S ,这样所有约束都会成立。”