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/fzn_value_precede_chain_int.mzn
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

18 lines
638 B
MiniZinc

include "seq_precede_chain.mzn";
predicate fzn_value_precede_chain_int(array[int] of int: T, array[int] of var int: X) =
if min(index_set(T)) = 1 /\ forall (i in index_set(T))(T[i] = i)
/\ max(T) = ub_array(X)
then
seq_precede_chain(X)
else
let {
int: l = lb_array(X);
int: u = ub_array(X);
array[1.. u -l +1] of int : p
= [sum([i | i in index_set(T) where T[i] = j]) | j in l..u];
array [int] of var 0..length(T): Y
= array1d(index_set(X),[p[X[i]-l+1] | i in index_set(X)]);
} in seq_precede_chain(Y)
endif;