From b3a497f71d39add0ffd708e57eee66dd7f3aa19e Mon Sep 17 00:00:00 2001 From: "Jip J. Dekker" Date: Tue, 18 May 2021 19:33:16 +1000 Subject: [PATCH] Fix the diagonals for the MIP N-Queens --- chapters/2_background.tex | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/chapters/2_background.tex b/chapters/2_background.tex index 327904e..ae0497c 100644 --- a/chapters/2_background.tex +++ b/chapters/2_background.tex @@ -842,11 +842,14 @@ can then be rewritten as linear \glspl{constraint} using the \glspl{variable} following model shows a integer program of this problem. \begin{align} + \text{given} \hspace{2em} & N = {1,\ldots,n} & \\ \text{maximise} \hspace{2em} & 0 & \\ - \text{subject to} \hspace{2em} & q_{i} \in \{1,\ldots{},n\} & \forall_{i=1}^{n} \\ - & y_{ij} \in \{0,1\} & \forall_{i=1}^{n} \forall_{j=1}^{n} \\ - \label{line:back-mip-channel} & x_{i} = \sum_{j=1}^{n} j * y_{ij} & \forall_{i=1}^{n} \\ - \label{line:back-mip-row} & \sum_{i=1}^{n} y_{ij} \leq 1 & \forall_{j=1}^{n} + \text{subject to} \hspace{2em} & q_{i} \in N & \forall_{i \in N} \\ + & y_{ij} \in \{0,1\} & \forall_{i,j \in N} \\ + \label{line:back-mip-channel} & x_{i} = \sum_{j \in N} j * y_{ij} & \forall_{i \in N} \\ + \label{line:back-mip-row} & \sum_{i \in N} y_{ij} \leq 1 & \forall_{j \in N} \\ + \label{line:back-mip-diag1} & \sum_{i,j \in N. i + j =k} y_{ij} \leq 1 & \forall_{k=3}^{2n-1} \\ + \label{line:back-mip-diag2} & \sum_{i,j \in N. i - j =k} y_{ij} \leq 1 & \forall_{k=2-n}^{n-2} \end{align} @@ -857,10 +860,8 @@ can then be rewritten as linear \glspl{constraint} using the \glspl{variable} \(q\). The \cref{line:back-mip-channel} is used to connect the \(q\) and \(y\) \glspl{variable} and make sure that their values correspond. \Cref{line:back-mip-row} ensures that only one queen is placed in the same - row. - - \jip{TODO: Fix diagonals} - + row. Finally, \cref{line:back-mip-diag1,line:back-mip-diag2} constrain all + diagonals to contain only one queen. \end{example} \subsection{Boolean Satisfiability}% @@ -900,13 +901,13 @@ most efficient way to solve the problem. \gls{sat} encoding for this problem is the following. \begin{align} - \text{given} \hspace{2em} & n & \\ - \text{find} \hspace{2em} & q_{ij} \in \{\text{true}, \text{false}\} & \forall_{i=1}^{n}\forall_{j=1}^{n} \\ - \label{line:back-sat-at-least}\text{subject to} \hspace{2em} & \exists_{j=1}^{n} q_{ij} & \forall_{i=1}^{n} \\ - \label{line:back-sat-row}& \neg q_{ij} \lor \neg q_{ik} & \forall_{i=1}^{n} \forall_{j=1}^{n} \forall_{k=j}^{n}\\ - \label{line:back-sat-col}& \neg q_{ij} \lor \neg q_{kj} & \forall_{i=1}^{n} \forall_{j=1}^{n} \forall_{k=i}^{n}\\ - \label{line:back-sat-diag1}& \neg q_{ij} \lor \neg q_{(i+k)(j+k)} & \forall_{i=1}^{n} \forall_{j=1}^{n} \forall_{k=1}^{min(n-i, n-j)}\\ - \label{line:back-sat-diag2}& \neg q_{ij} \lor \neg q_{(i+k)(j-k)} & \forall_{i=1}^{n} \forall_{j=1}^{n} \forall_{k=1}^{min(n-i, j)} + \text{given} \hspace{2em} & N = {1,\ldots,n} & \\ + \text{find} \hspace{2em} & q_{ij} \in \{\text{true}, \text{false}\} & \forall_{i,j \in N} \\ + \label{line:back-sat-at-least}\text{subject to} \hspace{2em} & \exists_{j \in N} q_{ij} & \forall_{i \in N} \\ + \label{line:back-sat-row}& \neg q_{ij} \lor \neg q_{ik} & \forall_{i,j \in N} \forall_{k=j}^{n}\\ + \label{line:back-sat-col}& \neg q_{ij} \lor \neg q_{kj} & \forall_{i,j \in N} \forall_{k=i}^{n}\\ + \label{line:back-sat-diag1}& \neg q_{ij} \lor \neg q_{(i+k)(j+k)} & \forall_{i,j \in N} \forall_{k=1}^{min(n-i, n-j)}\\ + \label{line:back-sat-diag2}& \neg q_{ij} \lor \neg q_{(i+k)(j-k)} & \forall_{i,j \in N} \forall_{k=1}^{min(n-i, j)} \end{align} The encoding of the problem uses a Boolean \gls{variable} for every position