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.
dekker-phd-thesis/chapters/4_half_reif.tex
2021-05-20 16:50:54 +10:00

94 lines
3.3 KiB
TeX

%************************************************
\chapter{Context Analysis and Half Reification}\label{ch:half-reif}
%************************************************
In this chapter we study the usage of \gls{half-reif}. When a constraint \mzninline{pred(...)} is reified a
\begin{itemize}
\item Flattening with half reification can naturally produce the relational
semantics when flattening partial functions in positive contexts.
\item Half reified constraints add no burden to the solver writer; if they
have a propagator for constraint \mzninline{pred(....)} then they can
straightforwardly construct a half reified propagator for \mzninline{b
-> pred(...)}.
\item Half reified constraints \mzninline{b -> pred(...)} can implement fully
reified constraints without any loss of propagation strength (assuming
reified constraints are negatable).
\item Flattening with half reification can produce more efficient propagation
when flattening complex constraints.
\item Flattening with half reification can produce smaller linear models when
used with a mixed integer programming solver.
\end{itemize}
\section{Propagation and Half Reification}%
\label{sec:half-propagation}
\begin{itemize}
\item custom implemented half-reified propagations.
\item benefits
\item downside
\item experimental results
\end{itemize}
A propagation engine gains certain advantages from half-reification, but also
may suffer certain penalties. Half reification can cause propagators to wake up
less frequently, since variables that are fixed to true by full reification will
never be fixed by half reification. This is advantageous, but a corresponding
disadvantage is that variables that are fixed can allow the simplification of
the propagator, and hence make its propagation faster.
When full reification is applicable (where we are not using half reified
predicates) an alternative to half reification is to implement full reification
\mzninline{x <-> pred(...)} by two half reified propagators \mzinline{x ->
pred(...)}, \mzninline{y \half \neg pred(...)}, \mzninline{x <-> not y}. This
does not lose propagation strength. For Booleans appearing in a positive context
we can make the the propagator \mzninline{y -> not pred(...)} run at the lowest
priority, since it will never cause failure. Similarly in negative contexts we
can make the propagator \mzninline{b -> pred(...)} run at the lowest priority.
This means that Boolean variables are still fixed at the same time, but there is
less overhead.
\section{Decomposition and Half Reification}%
\label{sec:half-decomposition}
\section{Context Analysis}%
\label{sec:half-context}
\begin{tabular}{ccc}
\(
\begin{array}{lcl}
\changepos \rootc & = &\posc \\
\changepos \posc & =& \posc \\
\changepos \negc & =& \negc \\
\changepos \mixc & =& \mixc
\end{array}
\)
&~&
\(
\begin{array}{lcl}
\negop \rootc & = &\negc \\
\negop \posc & = & \negc \\
\negop \negc & = & \posc \\
\negop \mixc & = & \mixc
\end{array}
\)
\end{tabular}
\begin{itemize}
\item What (again) are the contexts?
\item Why are they important
\item When can we use half-reification
\item How does the analysis work?
\end{itemize}
\section{Flattening and Half Reification}%
\label{sec:half-flattening}
\begin{itemize}
\item cse
\item chain compression
\end{itemize}