Work on the Optimisation Phase text
This commit is contained in:
parent
b3a497f71d
commit
1fe8190c14
@ -321,6 +321,11 @@
|
|||||||
description={},
|
description={},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\newglossaryentry{unify}{
|
||||||
|
name={unify},
|
||||||
|
description={},
|
||||||
|
}
|
||||||
|
|
||||||
\newglossaryentry{variable}{
|
\newglossaryentry{variable}{
|
||||||
name={decision variable},
|
name={decision variable},
|
||||||
description={},
|
description={},
|
||||||
|
@ -1568,10 +1568,12 @@ the utmost importance. A \flatzinc\ containing extra \glspl{variable} and
|
|||||||
\glspl{constraint} that do not add any information to the solving process might
|
\glspl{constraint} that do not add any information to the solving process might
|
||||||
exponentially slow down the solving process. Therefore, the \minizinc\
|
exponentially slow down the solving process. Therefore, the \minizinc\
|
||||||
flattening process is extended using many techniques to help improve the quality
|
flattening process is extended using many techniques to help improve the quality
|
||||||
of the flattened model. In the remainder of this section we will discuss the
|
of the flattened model. In \crefrange{subsec:back-cse}{subsec:back-delayed-rew}
|
||||||
most important techniques utilised in the flattener.
|
we will discuss the most important techniques used to improved the flattening
|
||||||
|
process.
|
||||||
|
|
||||||
\paragraph{Common Sub-expression Elimination}
|
\subsection{Common Sub-expression Elimination}%
|
||||||
|
\label{subsec:back-cse}
|
||||||
|
|
||||||
Because the evaluation of a \minizinc\ expression cannot have any side-effects,
|
Because the evaluation of a \minizinc\ expression cannot have any side-effects,
|
||||||
it is possible to reuse the same result for equivalent expressions. This
|
it is possible to reuse the same result for equivalent expressions. This
|
||||||
@ -1670,7 +1672,8 @@ constraint.
|
|||||||
set \mzninline{b0} to \mzninline{true}.
|
set \mzninline{b0} to \mzninline{true}.
|
||||||
\end{example}
|
\end{example}
|
||||||
|
|
||||||
\paragraph{Adjusting domains}
|
\subsection{Adjusting Domain}%
|
||||||
|
\label{subsec:back-adjusting-dom}
|
||||||
|
|
||||||
As discussed in \cref{subsec:back-cp}, the \glspl{domain} of \glspl{variable}
|
As discussed in \cref{subsec:back-cp}, the \glspl{domain} of \glspl{variable}
|
||||||
can sometimes be directly changed because of the addition of a \gls{constraint}.
|
can sometimes be directly changed because of the addition of a \gls{constraint}.
|
||||||
@ -1718,7 +1721,8 @@ constraints that directly change the domain (\eg\ \mzninline{x in 3..5}). It,
|
|||||||
however, will not perform more complex \gls{propagation}, like the
|
however, will not perform more complex \gls{propagation}, like the
|
||||||
\gls{propagation} of \glspl{global}.
|
\gls{propagation} of \glspl{global}.
|
||||||
|
|
||||||
\paragraph{Constraint Aggregation}
|
\subsection{Constraint Aggregation}%
|
||||||
|
\label{subsec:back-aggregation}
|
||||||
|
|
||||||
Complex \minizinc\ expression can sometimes result in the creation of many new
|
Complex \minizinc\ expression can sometimes result in the creation of many new
|
||||||
variables that represent intermediate results. This is in particular true for
|
variables that represent intermediate results. This is in particular true for
|
||||||
@ -1766,7 +1770,8 @@ expressions to form an aggregated constraint. The flattening process continues
|
|||||||
by flattening this aggregated constraint, which might still contain unflattened
|
by flattening this aggregated constraint, which might still contain unflattened
|
||||||
arguments.
|
arguments.
|
||||||
|
|
||||||
\paragraph{Delayed Rewriting}
|
\subsection{Delayed Rewriting}%
|
||||||
|
\label{subsec:back-delayed-rew}
|
||||||
|
|
||||||
Adjusting the \glspl{domain} of variables during flattening means that the
|
Adjusting the \glspl{domain} of variables during flattening means that the
|
||||||
system becomes non-confluent, and some orders of execution may produce
|
system becomes non-confluent, and some orders of execution may produce
|
||||||
@ -1818,7 +1823,27 @@ Note that this heuristic does not guarantee that \glspl{variable} have their
|
|||||||
tightest possible \gls{domain}. One delayed \gls{constraint} can still influence
|
tightest possible \gls{domain}. One delayed \gls{constraint} can still influence
|
||||||
the \glspl{domain} of \glspl{variable} used by other delayed \glspl{constraint}.
|
the \glspl{domain} of \glspl{variable} used by other delayed \glspl{constraint}.
|
||||||
|
|
||||||
\subsection{Optimisation}%
|
\subsection{FlatZinc Optimisation}%
|
||||||
\label{subsec:back-fzn-optimisation}
|
\label{subsec:back-fzn-optimisation}
|
||||||
|
|
||||||
The optimisation process of the \minizinc\ compiler
|
After the compiler is done flattening the \minizinc\ instance, it enters the
|
||||||
|
optimisation phase. This phase occurs at the same stage as the as the solver
|
||||||
|
input language. Depending on the targeted \gls{solver}, the \minizinc\ flattener
|
||||||
|
might still understand the meaning of certain constraints. In these cases,
|
||||||
|
\gls{propagation} methods (as discussed in \cref{subsec:back-cp}) can be used to
|
||||||
|
eliminate values from variable \glspl{domain} and simplify \glspl{constraint}.
|
||||||
|
|
||||||
|
In the current implementation the main focus of the flattener is to propagate
|
||||||
|
Boolean constraint. The flattener try and reduce the number of Boolean variables
|
||||||
|
and try and reduce the number of literals in clauses or logical and constraints.
|
||||||
|
The additional propagation might fix the reification of a constraint. If this
|
||||||
|
constraint is not yet rewritten, then the \gls{solver} will know to use a direct
|
||||||
|
constraint instead of a reified version.
|
||||||
|
|
||||||
|
Even more important than the Boolean constraints, are equality
|
||||||
|
\glspl{constraint}. The flattening is in the unique position to \gls{unify}
|
||||||
|
\glspl{variable} when they are found to be equal. Since they both have to take
|
||||||
|
the same value, only a single \gls{variable} is required in the \flatzinc\ model
|
||||||
|
to represent them both. Whenever any (recognisable) equality constraint is found
|
||||||
|
during the optimisation phase, it is removed and the two \glspl{variable} are
|
||||||
|
unified.
|
||||||
|
Reference in New Issue
Block a user