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

32 lines
1.2 KiB
MiniZinc

include "fzn_geost_nonoverlap_k.mzn";
predicate fzn_geost(
int : k ,
array[int,int] of int : rect_size ,
array[int,int] of int : rect_offset ,
array[int ] of set of int : shape ,
array[int,int] of var int : x ,
array[int ] of var int : kind
) =
% A few useful definitions
let {
set of int: DIMS = 1..k;
set of int: SHAPES = 1..length(shape);
set of int: OBJECTS = index_set(kind);
} in
forall(o1, o2 in OBJECTS where o1 < o2)(
forall(s1 in dom(kind[o1]), s2 in dom(kind[o2]))(
(kind[o1] = s1 /\ kind[o2] = s2 ->
forall(r1 in shape[s1], r2 in shape[s2])(
fzn_geost_nonoverlap_k(
[ x[o1,j] + rect_offset[r1,j] | j in DIMS ],
[ rect_size[r1,j] | j in DIMS ],
[ x[o2,j] + rect_offset[r2,j] | j in DIMS ],
[ rect_size[r2,j] | j in DIMS ]
)
)
)
)
);