% Note: glossary entries for terms that are acronyms should be prefixed 'gls-'
% so the non-prefixed reference is used to refer to the acronym

% \newglossaryentry{gls-api}{
%   name={API},
%   description={An Application Programming Interface (API) is a particular set
%     of rules and specifications that a software program can follow to access and
%     make use of the services and resources provided by another particular software
%     program that implements that API},
% }

\newglossaryentry{constraint}{
  name={constraint},
  description={A constraint is a relationship between two or more decision
variables or problem parameters that has to present in any valid solution to a
problem},
}

\newglossaryentry{constraint-modelling}{
  name={constraint modelling},
  description={Constraint modelling is a technique used to describe
combinatorial problems. In this paradigm the problem in terms of
\glspl{decision-variable} that have an unknown value, but are potentially
subject to certain \glspl{constraint}},
}


\newglossaryentry{gls-cp}{
  name={constraint programming},
  description={Constraint Programming (CP) is a paradigm used to solve
combinatorial problems. Its distinctive features are the declarative way in
which the user creates a problem description, in this thesis referred to as
\gls{constraint-modelling}, and its backtracking search that employs
\gls{propagation} and customisable search heuristics},
}

\newglossaryentry{decision-variable}{
  name={decision variable},
  description={A decision variable is a value that is yet to be determined. A
problem defined as a constraint model is solved by assigning a value to each
variable that does not violate any constraints in the model and, in case of an
optimisation problem, optimises the objective function}
}

\newglossaryentry{flatzinc}{
  name={Flat\-Zinc},
  description={A subset of the \minizinc\ syntax that is used as input for
\glspl{solver}},
}

\newglossaryentry{global}{
  name={global constraint},
  description={A global constraint is a common \gls{constraint} pattern that can
be described using simpler \glspl{constraint}. \Glspl{solver} sometimes provide
dedicated algorithms or rewriting rules to better handle the global constraint},
}

\newglossaryentry{gls-lns}{
  name={large neighbourhood search},
  description={Large Neighbourhood Search (LNS) is a meta-search algorithm that
repeatedly restricts the search space, applying a \gls{neighbourhood}, to
quickly find better solutions to a problem},
}


\newglossaryentry{meta-search}{
  name={meta-search},
  description={A search approach that repeatedly solves constraint models},
}

\newglossaryentry{microzinc}{
  name={Micro\-Zinc},
  description={TODO},
}

\newglossaryentry{minisearch}{
  name={Mini\-Search},
  description={TODO},
}

\newglossaryentry{minizinc}{
  name={Mini\-Zinc},
  description={A high-level \gls{constraint-modelling} language with an
extensive library of \glspl{global}},
}

\newglossaryentry{nanozinc}{
  name={Nano\-Zinc},
  description={TODO},
}

\newglossaryentry{neighbourhood}{
  name={neighbourhood},
  description={A neighbourhood is a restriction of the search space of the
\gls{solver}},
}

\newglossaryentry{solver}{
  name={solver},
  description={A solver is a dedicated program or algorithm that can be used to
solve combinatorial problems, or a subset thereof},
}

\newglossaryentry{problem-parameter}{
  name={problem parameter},
  description={A problem parameter is a constant value that helps define the
problem. Its value can differ among different problem instances. Its exact value
must be known when rewriting a constraint model, but is not required when
compiling a constraint model into a executable program},
}

\newglossaryentry{propagation}{
  name={constraint propagation},
  description={Constraint propagation is the inference that
\glspl{decision-variable} can no longer take a certain values, lest they would
violate a \gls{constraint}},
}
