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.
Jip J. Dekker f2a1c4e389 Squashed 'software/mza/' content from commit f970a59b17
git-subtree-dir: software/mza
git-subtree-split: f970a59b177c13ca3dd8aaef8cc6681d83b7e813
2021-07-11 16:34:30 +10:00

27 lines
1.1 KiB
MiniZinc

%-----------------------------------------------------------------------------%
% A table constraint table(x, t) represents the constraint x in t where we
% consider each row in t to be a tuple and t as a set of tuples.
%-----------------------------------------------------------------------------%
predicate fzn_table_int(array[int] of var int: x, array[int, int] of int: t) =
let { int: l = min(index_set(x)),
int: u = max(index_set(x)),
int: lt = min(index_set_1of2(t)),
int: ut = max(index_set_1of2(t)),
var lt..ut: i,
array[l..u, lt..ut] of int: t_transposed =
array2d(l..u, lt..ut, [ t[i,j] | j in l..u, i in lt..ut ]) }
in
forall(j in l..u) (
% Having the variable index component at the left position
% means that the nD-to-1D array translation during Mzn-to-Fzn
% will generate at most an offset constraint, instead of a
% scaling + offset constraint.
%
t_transposed[j,i] = x[j]
%
% t[i,j] = x[j]
);
%-----------------------------------------------------------------------------%