19 lines
472 B
MiniZinc
19 lines
472 B
MiniZinc
predicate lex_minimize(array[int] of var int: o) =
|
|
let {
|
|
var min(index_set(o))..max(index_set(o))+1: stage;
|
|
} in if status() = START then
|
|
stage = min(index_set(o))
|
|
elseif status() = UNSAT then
|
|
stage = lastval(stage) + 1
|
|
else /* status() = SAT */
|
|
stage = lastval(stage)
|
|
/\ o[stage] < sol(o[stage])
|
|
endif
|
|
/\ _objective = o[stage];
|
|
/\ forall(i in min(index_set(o))..stage-1) (
|
|
o[i] = sol(o[i])
|
|
)
|
|
/\ if stage > max(index_set(o)) then
|
|
complete()
|
|
endif;
|