如何量化 MiniZinc 中的所有子集

How to quantify over all subsets in MiniZinc

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

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

我还想在约束中使用 S 的基数,而 C 只是一组整数。是否有我可以使用的子集语法? (以上模型无效)

目前 arrays/sets 组没有生成器;因此除了在数据文件中手动列出幂集之外,没有可行的方法迭代给定集合的所有子集。

在大多数情况下,可以重新制定模型,这样就不需要这些生成器了。例如,考虑使用变量集:

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
}

这将使您能够制作包含约束条件的模型"There is such a set S, such that all constraints hold."