Fix the pareto front predicate

This commit is contained in:
Jip J. Dekker 2021-07-26 12:01:17 +10:00
parent b94eb66e12
commit 77722f0f87
No known key found for this signature in database
GPG Key ID: 517DF4A00618C9C3
2 changed files with 13 additions and 1 deletions

View File

@ -9,11 +9,22 @@ predicate pareto_optimal(var int: obj1, var int: obj2) =
nsol = 0
elseif status() = UNSAT then
complete() % we are finished!
elseif
elsif status() = SAT then
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])
) /\ for(i in 1..ms) (
if i in 1..nsol-1 then
s1[i] = lastval(s1[i]) /\
s2[i] = lastval(s2[i]) /\
elsif i = nsol /\ status() != SAT then
s1[i] = lastval(s1[i]) /\
s2[i] = lastval(s2[i]) /\
elseif i in nsol+1..ms then
s1[i] = lb(obj1) /\
s2[i] = lb(obj2)
endif
);

View File

@ -266,6 +266,7 @@ If we do not find any \glspl{sol}, then we finish the entire search.
Otherwise, we record that we have one more \gls{sol}.
We store the \gls{sol} values in \mzninline{s1} and \mzninline{s2} \glspl{array}.
Before each \gls{restart} we add \constraints{} removing Pareto dominated \glspl{sol}, based on each previous \gls{sol}.
Additionally, we maintain the \glspl{sol} stored in \mzninline{s1} and \mzninline{s2} by assigning them to their previous value and avoid search on the unused spaces in the \glspl{array} by assignment them to the lower bound of their respective \gls{objective}.
\section{Rewriting of Meta-Optimisation Algorithms}\label{sec:inc-solver-extension}