1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
on-restart-benchmarks/share/minizinc/std/global_cardinality.mzn
Jip J. Dekker fad1b07018 Squashed 'software/minizinc/' content from commit 4f10c8205
git-subtree-dir: software/minizinc
git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
2021-06-16 14:06:46 +10:00

18 lines
682 B
MiniZinc

include "fzn_global_cardinality.mzn";
include "fzn_global_cardinality_reif.mzn";
/** @group globals.counting
Requires that the number of occurrences of \a cover[\p i] in \a x is \a counts[\p i].
*/
predicate global_cardinality(array[$X] of var int: x,
array[$Y] of int: cover,
array[$Y] of var int: counts) =
assert(index_sets_agree(cover, counts),
"global_cardinality: cover and counts must have identical index sets",
if length(x) == 0 then
forall(c in array1d(counts))(c = 0)
else
fzn_global_cardinality(array1d(x), array1d(cover), array1d(counts))
endif
);