20 lines
535 B
MiniZinc
20 lines
535 B
MiniZinc
predicate pareto_optimal(var int: obj1, var int: obj2) =
|
|
let {
|
|
int: ms = 1000; % max solutions
|
|
var 0..ms: nsol; % number of solutions
|
|
set of int: SOL = 1..ms;
|
|
array[SOL] of var lb(obj1)..ub(obj1): s1;
|
|
array[SOL] of var lb(obj2)..ub(obj2): s2;
|
|
} in if status() = START then
|
|
nsol = 0
|
|
elseif status() = UNSAT then
|
|
complete() % we are finished!
|
|
elseif
|
|
nsol = sol(nsol) + 1 /\
|
|
s1[nsol] = sol(obj1) /\
|
|
s2[nsol] = sol(obj2)
|
|
endif
|
|
/\ for(i in 1..nsol) (
|
|
obj1 < lastval(s1[i]) \/ obj2 < lastval(s2[i])
|
|
);
|