More work on the CP section
This commit is contained in:
parent
1e64cf304d
commit
7fcf6ff042
@ -224,6 +224,13 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@manual{cplex-2020-cplex,
|
||||
title = {V20.1: User’s Manual for CPLEX},
|
||||
author = {CPLEX, IBM ILOG},
|
||||
journal = {International Business Machines Corporation},
|
||||
year = 2020
|
||||
}
|
||||
|
||||
@article{davis-1962-dpll,
|
||||
author = {Davis, Martin and Logemann, George and Loveland, Donald},
|
||||
title = {A Machine Program for Theorem-Proving},
|
||||
@ -280,6 +287,14 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@software{gecode-2021-gecode,
|
||||
author = {{Gecode Team}},
|
||||
title = {Gecode: A Generic Constraint Development Environment},
|
||||
year = 2021,
|
||||
url = {http://www.gecode.org},
|
||||
version = {6.3.0},
|
||||
}
|
||||
|
||||
@article{fourer-2002-amplcp,
|
||||
author = {Robert Fourer and David M. Gay},
|
||||
title = {Extending an Algebraic Modeling Language to Support
|
||||
@ -296,21 +311,6 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@software{gecode-2021-gecode,
|
||||
author = {{Gecode Team}},
|
||||
title = {Gecode: A Generic Constraint Development Environment},
|
||||
year = 2021,
|
||||
url = {http://www.gecode.org},
|
||||
version = {6.3.0},
|
||||
}
|
||||
|
||||
@software{gurobi-2021-gurobi,
|
||||
author = {{Gurobi Optimization, LLC}},
|
||||
title = {Gurobi Optimizer Reference Manual},
|
||||
year = 2021,
|
||||
url = {http://www.gurobi.com},
|
||||
}
|
||||
|
||||
@software{minizinc-2021-minizinc,
|
||||
author = {{MiniZinc Team}},
|
||||
title = {MiniZinc: a free and open-source constraint modeling language},
|
||||
@ -396,6 +396,13 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@manual{gurobi-2021-gurobi,
|
||||
author = {{Gurobi Optimization, LLC}},
|
||||
title = {Gurobi Optimizer Reference Manual},
|
||||
year = 2021,
|
||||
url = {http://www.gurobi.com},
|
||||
}
|
||||
|
||||
@inproceedings{hebrard-2005-diverse,
|
||||
author = {Emmanuel Hebrard and Brahim Hnich and Barry O'Sullivan and
|
||||
Toby Walsh},
|
||||
@ -579,6 +586,17 @@
|
||||
programming},
|
||||
}
|
||||
|
||||
@phdthesis{rendl-2010-thesis,
|
||||
author = {Andrea Rendl},
|
||||
title = {Effective compilation of constraint models},
|
||||
school = {University of St Andrews, {UK}},
|
||||
year = {2010},
|
||||
url = {http://hdl.handle.net/10023/973},
|
||||
timestamp = {Thu, 25 Aug 2016 17:20:59 +0200},
|
||||
biburl = {https://dblp.org/rec/phd/ethos/Rendl10.bib},
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@article{marriott-2008-zinc,
|
||||
author = {Kim Marriott and Nicholas Nethercote and Reza Rafeh and
|
||||
Peter J. Stuckey and Maria Garcia de la Banda and Mark
|
||||
@ -597,17 +615,6 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@phdthesis{rendl-2010-thesis,
|
||||
author = {Andrea Rendl},
|
||||
title = {Effective compilation of constraint models},
|
||||
school = {University of St Andrews, {UK}},
|
||||
year = {2010},
|
||||
url = {http://hdl.handle.net/10023/973},
|
||||
timestamp = {Thu, 25 Aug 2016 17:20:59 +0200},
|
||||
biburl = {https://dblp.org/rec/phd/ethos/Rendl10.bib},
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@inproceedings{mears-2014-option,
|
||||
author = {Christopher Mears and Andreas Schutt and Peter J. Stuckey
|
||||
and Guido Tack and Kim Marriott and Mark Wallace},
|
||||
@ -805,6 +812,17 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@techreport{gamrath-2020-scip,
|
||||
author = {Gerald Gamrath and Daniel Anderson and Ksenia Bestuzheva and Wei-Kun Chen and Leon Eifler and Maxime Gasse and Patrick Gemander and Ambros Gleixner and Leona Gottwald and Katrin Halbig and Gregor Hendel and Christopher Hojny and Thorsten Koch and Le Bodic, Pierre and Stephen J. Maher and Frederic Matter and Matthias Miltenberger and Erik M{\"u}hmer and Benjamin M{\"u}ller and Marc E. Pfetsch and Franziska Schl{\"o}sser and Felipe Serrano and Yuji Shinano and Christine Tawfik and Stefan Vigerske and Fabian Wegscheider and Dieter Weninger and Jakob Witzig},
|
||||
title = {{The SCIP Optimization Suite 7.0}},
|
||||
type = {ZIB-Report},
|
||||
institution = {Zuse Institute Berlin},
|
||||
number = {20-10},
|
||||
month = {3},
|
||||
year = {2020},
|
||||
url = {http://nbn-resolving.de/urn:nbn:de:0297-zib-78023}
|
||||
}
|
||||
|
||||
@inproceedings{schulte-2000-deep,
|
||||
author = {Christian Schulte},
|
||||
editor = {Enrico Pontelli and V{\'{\i}}tor Santos Costa},
|
||||
@ -824,17 +842,6 @@
|
||||
bibsource = {dblp computer science bibliography, https://dblp.org}
|
||||
}
|
||||
|
||||
@techreport{gamrath-2020-scip,
|
||||
author = {Gerald Gamrath and Daniel Anderson and Ksenia Bestuzheva and Wei-Kun Chen and Leon Eifler and Maxime Gasse and Patrick Gemander and Ambros Gleixner and Leona Gottwald and Katrin Halbig and Gregor Hendel and Christopher Hojny and Thorsten Koch and Le Bodic, Pierre and Stephen J. Maher and Frederic Matter and Matthias Miltenberger and Erik M{\"u}hmer and Benjamin M{\"u}ller and Marc E. Pfetsch and Franziska Schl{\"o}sser and Felipe Serrano and Yuji Shinano and Christine Tawfik and Stefan Vigerske and Fabian Wegscheider and Dieter Weninger and Jakob Witzig},
|
||||
title = {{The SCIP Optimization Suite 7.0}},
|
||||
type = {ZIB-Report},
|
||||
institution = {Zuse Institute Berlin},
|
||||
number = {20-10},
|
||||
month = {3},
|
||||
year = {2020},
|
||||
url = {http://nbn-resolving.de/urn:nbn:de:0297-zib-78023}
|
||||
}
|
||||
|
||||
@inproceedings{schulte-2005-views,
|
||||
author = {Christian Schulte and Guido Tack},
|
||||
editor = {Peter van Beek},
|
||||
@ -1025,6 +1032,29 @@
|
||||
publisher = {SRI International}
|
||||
}
|
||||
|
||||
@software{forrest-2020-cbc,
|
||||
author = {Forrest, J. and
|
||||
Stefan Vigerske and
|
||||
Haroldo Gambini Santos and
|
||||
Ted Ralphs and
|
||||
Lou Hafer and
|
||||
Bjarni Kristjansson and
|
||||
Fasano, J.P. and
|
||||
EdwinStraver and
|
||||
Miles Lubin and
|
||||
Lougee-Heimer, R. and
|
||||
jpgoncal1 and
|
||||
Gassmann, H.I. and
|
||||
Matthew Saltzman},
|
||||
title = {coin-or/Cbc: Version 2.10.5},
|
||||
month = mar,
|
||||
year = 2020,
|
||||
publisher = {Zenodo},
|
||||
version = {releases/2.10.5},
|
||||
doi = {10.5281/zenodo.3700700},
|
||||
url = {https://doi.org/10.5281/zenodo.3700700}
|
||||
}
|
||||
|
||||
@book{wolsey-1988-mip,
|
||||
title = {Integer and Combinatorial Optimization},
|
||||
author = {Wolsey, L.A. and Nemhauser, G.L.},
|
||||
|
@ -39,6 +39,17 @@
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{bnb}{
|
||||
name={branch and bound},
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{bounds-con}{
|
||||
name={bounds consistent},
|
||||
description={},
|
||||
}
|
||||
|
||||
|
||||
\newglossaryentry{gls-cbls}{
|
||||
name={constraint-based local search},
|
||||
description={},
|
||||
@ -120,11 +131,21 @@
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{domain-con}{
|
||||
name={domain consistent},
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{essence}{
|
||||
name={Essence},
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{fixpoint}{
|
||||
name={fixpoint},
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{flatzinc}{
|
||||
name={Flat\-Zinc},
|
||||
description={},
|
||||
@ -291,13 +312,18 @@
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{gls-trs}{
|
||||
name={term rewriting system},
|
||||
\newglossaryentry{termination}{
|
||||
name={termination},
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{termination}{
|
||||
name={termination},
|
||||
\newglossaryentry{trail}{
|
||||
name={trail},
|
||||
description={},
|
||||
}
|
||||
|
||||
\newglossaryentry{gls-trs}{
|
||||
name={term rewriting system},
|
||||
description={},
|
||||
}
|
||||
|
||||
|
@ -641,18 +641,48 @@ impossible value using a process called \gls{propagation}. For each
|
||||
\glspl{variable}, the \gls{propagator} will analyse and prune the any values
|
||||
that are proven to be inconsistent.
|
||||
|
||||
When there are no more triggered \glspl{propagator} and not all \glspl{variable}
|
||||
have been assigned a value, the \gls{solver} has to make a search decision. It
|
||||
will bind a \gls{variable} to a value or add a new \gls{constraint}.
|
||||
In the best case scenario, \gls{propagation} will eliminate all impossible value
|
||||
and all \glspl{variable} have been fixed to a single value. In this case we have
|
||||
arrived at a solution. Often, \gls{propagation} alone will not be enough to find
|
||||
a solution to the problem. Instead, when no more \glspl{propagator} are
|
||||
triggered (we have reached a \gls{fixpoint}), the \gls{solver} has to make a
|
||||
search decision. It will fix a \gls{variable} to a value or add a new
|
||||
\gls{constraint}. This search decision is an assumption made by the \gls{solver}
|
||||
in the hope of finding a solution. If no solution is found using the search
|
||||
decision, then it needs to try making the opposite decision: excluding the
|
||||
chosen value or adding the opposite constraint.
|
||||
|
||||
Note that the important difference between values \gls{propagation} and making
|
||||
search decisions is that value excluded by a \gls{propagator} are guaranteed to
|
||||
not occur in any solution, but values excluded by a search heuristic are merely
|
||||
removed locally and might still be part of a solution. A \gls{cp} \gls{solver}
|
||||
is only able to prove that the problem is unsatisfiable by exploring the full
|
||||
search space.
|
||||
|
||||
\Gls{propagation} is not only used when starting the search, but also after
|
||||
making each search decision. This means that some of the \gls{propagation}
|
||||
depends on the search decision. Therefore, if the \gls{solver} needs to
|
||||
reconsider a search decision, then it must also undo all \gls{domain} changes
|
||||
that were caused by \gls{propagation} dependent on that search decision.
|
||||
|
||||
The general most common method in \gls{cp} \glspl{solver} to achieve this is to
|
||||
keep track of \gls{domain} changes using a \gls{trail}. For every \gls{domain}
|
||||
change that is made during propagation (after the first search decision), the
|
||||
reverse change is stored on in a list. Whenever a new search decision is made,
|
||||
the current position of the list is tagged. If the \gls{solver} now needs to
|
||||
undo a search decision (\ie\ \gls{backtrack}), it can apply all change until it
|
||||
reaches the change that is tagged with the search decision. Because all changes
|
||||
before the tagged point on the \gls{trail} were made before the search decision
|
||||
was made, it is guaranteed that these \gls{domain} changes do not depend on the
|
||||
search decision. Furthermore, because propagation is performed to a
|
||||
\gls{fixpoint}, it is guaranteed that no duplicate propagation is required.
|
||||
|
||||
\begin{example}%
|
||||
\label{ex:back-nqueens}
|
||||
Consider as an example the N-Queens problem. Given a chess board of size
|
||||
\(n \times n\), find a placement for \(n\) queen chess pieces such that no queen
|
||||
can attack another. Meaning only one queen per row, one queen per column, and
|
||||
one queen per diagonal.
|
||||
|
||||
The problem can be modelled as a \gls{csp} as follows.
|
||||
one queen per diagonal. The problem can be modelled as a \gls{csp} as follows.
|
||||
|
||||
\begin{mzn}
|
||||
int: n;
|
||||
@ -687,7 +717,38 @@ board.
|
||||
|
||||
\end{example}
|
||||
|
||||
In \gls{cp} solving there is a trade-off between the amount of time spend
|
||||
propagating a constraint and the the amount of search that is otherwise
|
||||
required. The golden standard for a \gls{propagator} is to be \gls{domain-con},
|
||||
meaning that all values left in the \glspl{domain} of its \glspl{variable} there
|
||||
is at least one possible variable assignment that satisfies the constraint.
|
||||
Designing an algorithm that reaches this level of consistency is, however, an
|
||||
easy task and might require high complexity. Instead it can sometimes be better
|
||||
to use a propagator with a lower level of consistency. Although it might not
|
||||
eliminate all possible values of the domain, searching the values that are not
|
||||
eliminated might take less time than achieving \gls{domain-con}.
|
||||
|
||||
This is, for example, the case for integer linear constraints:
|
||||
\[ \sum_{i} c_{i} x_{i} = d\] where \(c_{i}\) and \(d\) are integer
|
||||
\glspl{parameter} and \(x_{i}\) are integer \gls{variable}. For these
|
||||
constraints, no realistic \gls{domain-con} \gls{propagator} exists. Instead
|
||||
\glspl{solver} generally use a \gls{bounds-con} \gls{propagator}, which
|
||||
guarantee only that the minimum and maximum values in the \glspl{domain} of the
|
||||
\glspl{variable} are used in at least one possible assignment that satisfies the
|
||||
constraint.
|
||||
|
||||
Thus far, we have only considered \glspl{csp}. \gls{cp} solving can, however,
|
||||
also be used to solve optimisation problems using a method called \gls{bnb}. The
|
||||
\gls{cp} \gls{solver} will follow the same method as previously described.
|
||||
However, when it find a solution, it does not yet know if this solution is
|
||||
optimal. It is merely an incumbent solution. The \gls{solver} must therefore
|
||||
resume its search, but it is no longer interested in just any solution, only
|
||||
solutions that have a better \gls{objective} value. This is achieved by adding a
|
||||
new \gls{propagator} that enforces all solutions to have a better
|
||||
\gls{objective} value than the incumbent solution. If the search process finds
|
||||
another solution, then the incumbent solution is updated and the search process
|
||||
continues. If the search process does not find any other solutions, then it is
|
||||
proven that there are no better solutions than the current incumbent solution.
|
||||
|
||||
\subsection{Mathematical Programming}%
|
||||
\label{subsec:back-mip}
|
||||
|
Reference in New Issue
Block a user