diff --git a/chapters/2_background.tex b/chapters/2_background.tex index 0efdd29..92c810e 100644 --- a/chapters/2_background.tex +++ b/chapters/2_background.tex @@ -700,8 +700,8 @@ using a set of linear equations over continuous variables. In general, a linear program can be expressed in the form: \begin{align*} - \text{maximise } & \sum_{j=1}^{V} c_{j} x_{j} & \\ - \text{subject to } & l_{i} \leq \sum_{j=0}^{V} a_{ij} x_{j} \leq u_{i} & \forall_{i=1}^{C} \\ + \text{maximise} \hspace{2em} & \sum_{j=1}^{V} c_{j} x_{j} & \\ + \text{subject to} \hspace{2em} & l_{i} \leq \sum_{j=0}^{V} a_{ij} x_{j} \leq u_{i} & \forall_{i=1}^{C} \\ & x_{i} \in \mathbb{R} & \forall_{i=1}^{V} \end{align*} @@ -743,9 +743,11 @@ bound from an earlier solution, then we know that any discrete solutions following from the linear program will be strictly worse than the incumbent. Over the years \gls{lp} and \gls{mip} \glspl{solver} have developed immensely. -\Glspl{solver}, such as CBC \autocite{}, CPLEX \autocite{}, Gurobi \autocite{}, -and SCIP \autocite{}, can solve many complex problems. It is therefore often -worthwhile to encode problem as an mixed integer program to find a solution. +\Glspl{solver}, such as CBC \autocite{forrest-2020-cbc}, CPLEX +\autocite{cplex-2020-cplex}, Gurobi \autocite{gurobi-2021-gurobi}, and SCIP +\autocite{gamrath-2020-scip}, can solve many complex problems. It is therefore +often worthwhile to encode problem as an mixed integer program to find a +solution. \glspl{csp} can be often be encoded as mixed integer programs. This does, however, come with its challenges. Most \glspl{constraint} in a \minizinc\ model @@ -763,8 +765,8 @@ can then be rewritten as linear \glspl{constraint} using the \glspl{variable} following model shows a integer program of this problem. \begin{align} - \text{maximise } & 0 & \\ - \text{subject to } & q_{i} \in \{1,\ldots{},n\} & \forall_{i=1}^{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} @@ -821,9 +823,9 @@ most efficient way to solve the problem. \gls{sat} encoding for this problem is the following. \begin{align} - \text{given } & n & \\ - \text{find } & q_{ij} \in \{\text{true}, \text{false}\} & \forall_{i=1}^{n}\forall_{j=1}^{n} \\ - \label{line:back-sat-at-least}\text{subject to } & \exists_{j=1}^{n} q_{ij} & \forall_{i=1}^{n} \\ + \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)}\\