From bc7d05cc2d0352e93d23288996774056c08245fe Mon Sep 17 00:00:00 2001 From: "Jip J. Dekker" Date: Tue, 25 May 2021 12:10:09 +1000 Subject: [PATCH] Add chessboard visualisations --- assets/packages.tex | 5 +++ chapters/2_background.tex | 91 +++++++++++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 14 deletions(-) diff --git a/assets/packages.tex b/assets/packages.tex index 0c8fe2a..df4ac9a 100644 --- a/assets/packages.tex +++ b/assets/packages.tex @@ -74,6 +74,11 @@ \usepackage{graphicx} \usepackage{subcaption} +% Drawing chessboards (background) +\usepackage{chessboard} +\setchessboard{showmover=false} + + % Algorithms % \usepackage[ruled,vlined]{algorithm2e} diff --git a/chapters/2_background.tex b/chapters/2_background.tex index c6e1b47..11b5ac8 100644 --- a/chapters/2_background.tex +++ b/chapters/2_background.tex @@ -86,8 +86,8 @@ problem format these techniques expect. \Cref{sec:back-other-languages} introduces alternative \cmls\ and compares their functionality to \minizinc{}. Then,\cref{sec:back-term} survey the closely related technologies in the field of \glspl{trs}. Finally, \cref{sec:back-mzn-interpreter} explores the process -that the current \minizinc\ interpreter uses to translate a \minizinc{} instance -into a solver-level constraint model. +that the current \minizinc\ interpreter uses to translate a \minizinc{} +instance into a solver-level constraint model. \section{\glsentrytext{minizinc}}% \label{sec:back-minizinc} @@ -99,8 +99,8 @@ library of constraints allow users to easily model complex problems. \begin{listing} \mznfile{assets/mzn/back_knapsack.mzn} - \caption{\label{lst:back-mzn-knapsack} A \minizinc\ model describing a 0-1 knapsack - problem} + \caption{\label{lst:back-mzn-knapsack} A \minizinc\ model describing a 0-1 + knapsack problem} \end{listing} \begin{example}% @@ -684,7 +684,7 @@ 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 \solver{} now needs to undo a -search decision (\ie\ \gls{backtrack}), it can apply all change until it reaches +search decision (\ie\ \gls{backtrack}), it can apply all changes 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 @@ -730,19 +730,82 @@ constraints otherwise. When solving the problem, initially no values can be eliminated from the \glspl{domain} of the \variables{}. The first propagation will happen when the - first queen is placed on the board. The search space will then look like this: + first queen is placed on the board, the first search decision. - \jip{Insert image of n-queens board with one queen assigned.} - - Now that one queen is placed on the board the propagators for the - \mzninline{all_different} constraints can start propagating. They can eliminate - all values that are on the same row or diagonal as the queen placed on the - board. - - \jip{Insert previous image with all impossible moves marked red.} + \Cref{fig:back-nqueens} visualises the domain propagation of placing a queen + on the d3 square of an eight by eight chess board. When the queen it placed + on the board in \cref{sfig:back-nqueens-1}, it fixes the value of row 4 to + the value 3. This implicitly eliminates any possibility of placing another + queen in the row. Now that one queen is placed on the board the propagators + for the \mzninline{all_different} constraints can start propagating. As show + in \cref{sfig:back-nqueens-2}, the first \mzninline{all_different} constraint + can now stop other queens to be placed in the same column. It eliminates the + value 3 from the domains of the queens in the remaining rows. Similarly, the + other \mzninline{all_different} constraints remove all values that correspond + to positions on the same diagonal as the placed queen, shown in + \cref{sfig:back-nqueens-3,sfig:back-nqueens-4}. + The propagation of the first placed queen severely limits the positions where + a second queen can be placed. \end{example} +\begin{figure} + \centering + \begin{subfigure}[b]{.48\columnwidth} + \centering + \chessboard[ + setwhite={Qd3}, + pgfstyle=cross, + color=red, + markarea={d1-d2,d4-d8}, + ] + \caption{\label{sfig:back-nqueens-1} Assign a queen to d3} + \end{subfigure}% + \hspace{0.04\columnwidth}% + \begin{subfigure}[b]{.48\columnwidth} + \centering + \chessboard[ + setwhite={Qd3}, + pgfstyle=cross, + color=red!35!white, + markareas={d1-d2,d4-d8}, + pgfstyle=cross, + color=red, + markareas={a3-c3,e3-h3}, + ] + \caption{\label{sfig:back-nqueens-2} Propagate rows} + \end{subfigure} + \begin{subfigure}[b]{.48\columnwidth} + \centering + \chessboard[ + setwhite={Qd3}, + pgfstyle=cross, + color=red!35!white, + markareas={d1-d2,d4-d8,a3-c3,e3-h3}, + pgfstyle=cross, + color=red, + markareas={b1-b1,c2-c2,e4-e4,f5-f5,g6-g6,h7-h7}, + ] + \caption{\label{sfig:back-nqueens-3} Propagate upwards diagonal} + \end{subfigure}% + \hspace{0.04\columnwidth}% + \begin{subfigure}[b]{.48\columnwidth} + \centering + \chessboard[ + setwhite={Qd3}, + pgfstyle=cross, + color=red!35!white, + markareas={d1-d2,d4-d8,a3-c3,e3-h3,b1-b1,c2-c2,e4-e4,f5-f5,g6-g6,h7-h7}, + pgfstyle=cross, + color=red, + markareas={a6-a6,b5-b5,c4-c4,e2-e2,f1-f1}, + ] + \caption{\label{sfig:back-nqueens-4} Propagate downward diagonal} + \end{subfigure} + \caption{\label{fig:back-nqueens} An example of domain propagation when a + queen gets assigned in the N-Queens problem.} +\end{figure} + In \gls{cp} solving there is a trade-off between the amount of time spend propagating a constraint and the amount of search that is otherwise required. The golden standard for a \gls{propagator} is to be \gls{domain-con}, meaning