this repo has no description
1%-----------------------------------------------------------------------------% 2% Constrains two arrays of int variables to represent inverse functions. 3% All the values in each array must be within the index set of the other array. 4% 5% Linear version. 6%-----------------------------------------------------------------------------% 7 8% include "domain_encodings.mzn"; 9 10% predicate inverse(array[int] of var int: f, array[int] of var int: g) = 11% let { 12% array[int,int] of var 0..1: map_f = eq_encode(f); 13% array[int,int] of var 0..1: map_g = eq_encode(g); 14% } in forall (i in index_set(f), j in index_set(g)) (map_f[i,j] = map_g[j,i]); 15 16%-----------------------------------------------------------------------------% 17 18 19%% Now copying the std version, seems a little faster on vrp-s2-v2-c7_vrp-v2-c7_det_ADAPT_1_INVERSE.mzn 20 21predicate fzn_inverse(array[int] of var int: f, 22 array[int] of var int: invf) = 23 forall(i in index_set(f)) ( f[i] in index_set(invf) ) /\ 24 forall(j in index_set(invf)) ( invf[j] in index_set(f) ) /\ 25 forall(i in index_set(f), j in index_set(invf)) ( 26 ((j == f[i]) <-> (i == invf[j])) 27 );