如何量化MiniZinc中的所有子集

时间:2016-11-01 19:18:52

标签: minizinc

我想为MiniZinc中的一组整数的每个子集创建一个约束,沿着这条线......

constraint forall (S subset C, k in M) (
    % Some constraint over the set S, and integer k
);

我还想在约束中使用S的基数,而C只是一组整数。我可以使用子集的语法吗? (以上型号不起作用)。

1 个答案:

答案 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 ,这样所有约束都会成立。”