%************************************************
\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}

\section{Benchmark Design}%
\label{sec:bench-env}

To promote the verification and recreation of experiments, we have published the programs with accompanying instructions to perform the experiments in this thesis.
The experiments are split into three parts, each testing a different system.
Each part is published as a \gls{git} repository on GitHub.

\paragraph{MiniZinc Prototype} The design for the experiments of the \minizinc{} prototype implementation can be found in:

\begin{center}
	\url{file://TODO}
\end{center}

This repository contains the flattening, recursive function, and the incremental flattening benchmarks. 

\paragraph{Half Reification} The design for all the \gls{half-reif} experiments is located in:

\begin{center}
	\url{https://github.com/Dekker1/half-reif-benchmarks}
\end{center}

This repository contains both the benchmark for the \gls{chuffed} propagators of \gls{half-reif} constraints and the \minizinc{} Challenge 2019 \& 2020 benchmark.

\paragraph{Restarting Meta-Search} Finally, the design of the experiments for restart based \gls{meta-search} can be found in:

\begin{center}
	\url{https://github.com/Dekker1/on-restart-benchmarks}
\end{center}

This repository contains the benchmarks for both \gls{gecode} and \gls{chuffed}.

