%************************************************
\chapter{Experiment Resources}%
\label{ch:benchmarks}
%************************************************

\noindent{}All experiments included in this thesis were conducted on a dedicated node in a computational cluster.
The machine operates using a \textbf{Intel Xeon 8260} \gls{cpu}, which has 24 non-hyperthreaded cores, and has access to \textbf{268.55 GB} of \gls{ram}.
Each experimental test was given exclusive access to a single \gls{cpu} core and access to sufficient \gls{ram}.

\section{Software}%
\label{sec:bench-soft}

\subsection{MiniZinc Flattener}

In this thesis we use three different versions of the \minizinc\ flattening tool

\subsection{MiniZinc Solvers}

\paragraph{Gecode}
\paragraph{Chuffed}
\paragraph{IBM CPLEX}
\paragraph{Gurobi}

\section{MiniZinc Models}%
\label{sec:bench-models}

\paragraph{QCP-Max} This problem was introduced in by Feydy et al. in the original paper on \gls{half-reif} \autocite{feydy-2011-half-reif}. \jip{...}

\begin{mzn}
	include "all_different.mzn";

	int: n;                          % size
	array[1..n,1..n] of 0..n: s;     % 0 = unfixed 1..n = fixed
	array[1..n,1..n] of var 1..n: q; % qcp array;

	constraint forall(i,j in 1..n where s[i,j] > 0)(q[i,j] = s[i,j]);

	solve maximize
		sum(i in 1..n)(all_different([q[i,j] | j in 1..n])) +
		sum(j in 1..n)(all_different([q[i,j] | i in 1..n]));
\end{mzn}

\paragraph{Prize Collecting Path} This problem was introduced in by Feydy et al. in the original paper on \gls{half-reif} \autocite{feydy-2011-half-reif}. \jip{...}

\begin{mzn}
include "alldifferent_except_0.mzn";

int: n;                        % size
array[1..n,0..n] of int: p;    % prize for edge (i,j), p[i,0] = 0

array[1..n] of var 0..n: next; % next posn in tour
array[1..n] of var 0..n: pos;  % posn on node i in path, 0=notin
array[1..n] of var int: prize = [p[i,next[i]] | i in 1..n];
                               % prize for outgoing edge

constraint forall(i in 1..n)(
	(pos[i] = 0 <-> next[i] = 0) /\
	(next[i] > 1 -> pos[next[i]] = pos[i] + 1)
);

constraint alldifferent_except_0(next) /\ pos[1] = 1;

solve minimize sum(i in 1..n)(prize[i]);
\end{mzn}

\begin{mzn}
include "subcircuit.mzn";

int: n;                        % size
array[1..n,1..n] of int: p;    % prize for edge (i,j), p[i,i] = 0

array[1..n] of var 0..n: next; % next posn in tour
array[1..n] of var int: prize = [p[i,next[i]] | i in 1..n];
                               % prize for outgoing edge

constraint subcircuit(next);

solve minimize sum(i in 1..n)(prize[i]);
\end{mzn}

\section{Benchmark Environments}%
\label{sec:bench-programs}
