% 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{aggregation}{ name={constraint aggregation}, description={A technique that combines many smaller \glspl{constraint} into a one or, by exception, a few larger \glspl{constraint}}, } \newglossaryentry{gls-ampl}{ name={AMPL:\ A Mathematical Programming Language}, description={}, } \newglossaryentry{assignment}{ name={assignment}, description={ A mapping from \glspl{parameter} or \glspl{variable} to values. An assignment is referred to as \gls{partial} when it maps only a subset of the \glspl{parameter} and \glspl{variable} of a \gls{model}. A \gls{parameter-assignment} is an \gls{partial} \gls{assignment} that maps only the \glspl{parameter}, a \gls{variable-assignment} maps only the \glspl{variable}. A complete \gls{parameter-assignment} maps all \glspl{parameter} of a \gls{model}, a complete \gls{variable-assignment} maps all \glspl{variable} of a \gls{model} }, } \newglossaryentry{gls-ast}{ name={Abstract Syntax Tree}, description={A tree structure representing the syntactic structure of a piece of computer language. These structures are often used in a \gls{compiler} or \gls{interpreter}}, } \newglossaryentry{annotation}{ name={annotation}, description={}, } \newglossaryentry{array}{ name={array}, description={}, } \newglossaryentry{backtrack}{ name={backtrack}, description={}, } \newglossaryentry{bnb}{ name={branch and bound}, description={}, } \newglossaryentry{bounds-con}{ name={bounds consistent}, description={}, } \newglossaryentry{gls-cbls}{ name={constraint-based local search}, description={}, } \newglossaryentry{chuffed}{ name={Chuffed}, description={}, } \newglossaryentry{comprehension}{ name={comprehension}, description={}, } \newglossaryentry{conditional}{ name={conditional}, description={}, } \newglossaryentry{constraint}{ name={constraint}, description={A formalised rule of a problem. Constraints are generally expressed in term of Boolean logic}, } \newglossaryentry{cml}{ name={constraint modelling language}, description={ A computer language used to define \glspl{model}. Low-level constraint modelling languages allow modellers to define \glspl{model} in terms of \gls{native} \glspl{constraint} and \gls{variable} types. To create a \gls{slv-mod} the language merely assigns the \glspl{parameter}, (almost) no \gls{rewriting} is required. In contrast, high-level constraint modelling languages provide \glspl{global}, allowing modellers to reason at a level different from the targeted \gls{solver} }, } \newglossaryentry{constraint-store}{ name={constraint store}, description={}, } \newglossaryentry{cplex}{ name={CPLEX}, description={}, } \newglossaryentry{gls-chr}{ name={constraint handling rules}, description={}, } \newglossaryentry{gls-clp}{ name={constraint logic programming}, description={}, } \newglossaryentry{gls-cp}{ name={constraint programming}, description={}, } \newglossaryentry{gls-cse}{ name={common subexpression elimination}, description={}, } \newglossaryentry{confluence}{ name={confluence}, description={}, } \newglossaryentry{gls-csp}{ name={constraint satisfaction problem}, description={}, } \newglossaryentry{gls-cop}{ name={constraint optimisation problem}, description={}, } \newglossaryentry{cvar}{ name={control variable}, description={ A special form of an \gls{ivar} where the \gls{variable} represent the result of a \gls{reification} }, } \newglossaryentry{compiler}{ name={compiler}, description={ A computer program that transforms a program in a computer language, referred to as the \emph{source}, into a different language (or instruction set), the \emph{target}. The goal of this transformation is generally to create an executable version of the program }, } \newglossaryentry{compiling}{ name={compiling}, description={see \gls{compiler}}, } \newglossaryentry{dec-prb}{ name={decision problem}, description={ A problem which can be defined as making a set of decisions under a certain set of rules. Decisions problems can be formalised as \glspl{model}. }, } \newglossaryentry{decomp}{ name={decomposition}, description={ A formulation of a \gls{constraint} in terms of other \glspl{constraint} in order to reach \gls{native} \glspl{constraint}. Note that the new \glspl{constraint} might represent the same decisions using a different \glspl{variable}, possibly of different types }, } \newglossaryentry{del-rew}{ name={delayed rewriting}, description={}, } \newglossaryentry{domain}{ name={domain}, description={A set of value that a \gls{variable} can take without violating any \glspl{constraint} in the problem}, } \newglossaryentry{domain-con}{ name={domain consistent}, description={}, } \newglossaryentry{essence}{ name={Essence}, description={}, } \newglossaryentry{eqsat}{ name={equisatisfiable}, description={Two \glspl{model} are equisatisfiable when a bijective function can be defined to map the \glspl{sol} of one \gls{model} onto the \glspl{sol} of the other}, } \newglossaryentry{fixed}{ name={fixed}, description={A \gls{variable} is said to be fixed when there is only a single possible value that it can take}, } \newglossaryentry{fixpoint}{ name={fix-point}, description={}, } \newglossaryentry{flatzinc}{ name={Flat\-Zinc}, description={}, } \newglossaryentry{gecode}{ name={Gecode}, description={}, } \newglossaryentry{gls-gbac}{ name={Generalised Balanced Academic Curriculum}, description={}, } \newglossaryentry{generator}{ name={generator}, description={}, } \newglossaryentry{git}{ name={Git}, description={}, } \newglossaryentry{global}{ name={global constraint}, description={ A common \gls{constraint} pattern. These patterns can generally span any number of \glspl{variable}. For example, the well-known global constraint \( \textsc{All\_Different}(\ldots) \) requires all its arguments to take a different value. Global constraints are usually not \gls{native} to a \gls{solver}. Instead, the \gls{rewriting} process can enforce the global constraint using a \gls{decomp} }, } \newglossaryentry{gurobi}{ name={Gurobi}, description={}, } \newglossaryentry{half-reif}{ name={half reification}, description={}, } \newglossaryentry{indicator-var}{ name={indicator variable}, description={}, } \newglossaryentry{ivar}{ name={introduced variable}, description={ A \gls{variable} that was created in the reformulation of a \gls{decomp}. New \gls{variable} are introduced either to redefine an existing \gls{variable} using a different type or to connect newly introduced \glspl{constraint} }, } \newglossaryentry{int-sol}{ name={intermediate solution}, description={A \gls{sol} in an \gls{opt-prb} that is not (yet) proven to be the \gls{opt-sol}}, } \newglossaryentry{instance}{ name={instance}, description={A \gls{model} with a complete \gls{parameter-assignment}}, } \newglossaryentry{interpreter}{ name={interpreter}, description={ A computer program that directly executes instructions one at a time }, } \newglossaryentry{knapsack}{ name={knapsack problem}, description={}, } \newglossaryentry{let}{ name={let expression}, description={}, } \newglossaryentry{gls-lcg}{ name={lazy clause generation}, description={}, } \newglossaryentry{gls-lns}{ name={large neighbourhood search}, description={}, } \newglossaryentry{meta-search}{ name={meta-search}, plural={meta-searches}, description={}, } \newglossaryentry{microzinc}{ name={Micro\-Zinc}, description={}, } \newglossaryentry{minisearch}{ name={Mini\-Search}, description={}, } \newglossaryentry{model}{ name={constraint model}, description={ A formalisation of a \gls{dec-prb} or an \gls{opt-prb}. It is defined in terms of formalised decision, \glspl{variable} of different kinds (\eg{} Boolean, integers, or even sets), and \glspl{constraint}, Boolean logic formulas which are forced to hold in any \gls{sol}, and, in case of an \gls{opt-prb}, an \gls{objective}. Any external data required to formulate the \glspl{constraint} is said to be the \glspl{parameter}. The combination of a constraint model and assignments for its \glspl{parameter} is said to be an \gls{instance} of the constraint model. }, } \newglossaryentry{minizinc}{ name={Mini\-Zinc}, description={ The primary \gls{cml} studied in this thesis. MiniZinc is the successor to \gls{zinc} introduced in 2007 \autocite{nethercote-2007-minizinc}. An open-source implementation of the language is available \autocite{minizinc-2021-minizinc} }, } \newglossaryentry{normal-form}{ name={normal form}, description={A \gls{trs} has reached its normal form when no more rewriting rules can be applied}, } \newglossaryentry{gls-mip}{ name={Mixed Integer Programming}, description={}, } \newglossaryentry{native}{ name={native}, description={\glspl{constraint} and \gls{variable} types are said to be native to a \gls{solver} when they can be directly used as input for the \gls{solver}}, } \newglossaryentry{nanozinc}{ name={Nano\-Zinc}, description={}, } \newglossaryentry{neighbourhood}{ name={neighbourhood}, description={}, } \newglossaryentry{objective}{ name={objective function}, description={A function defined over the \glspl{variable} of a \gls{model} to assign a numeric value to the quality of the \gls{sol}}, } \newglossaryentry{operator}{ name={operator}, description={}, } \newglossaryentry{gls-opl}{ name={OPL:\ The optimisation modelling language}, description={}, } \newglossaryentry{opt-prb}{ name={optimisation problem}, description={ A decision problem with an additional \gls{objective}. It can, likewise, be formalised as a \gls{model}. If the problem has multiple \glspl{sol}, then this function can be used to asses the quality on the \gls{sol}. For such a problem, an \gls{opt-sol} is a \gls{sol} with the highest quality }, } \newglossaryentry{optional}{ name={optional}, description={}, } \newglossaryentry{opt-sol}{ name={optimal solution}, description={A \gls{sol} in an \gls{opt-prb} for which it has been proven that no other \gls{sol} exist of higher quality}, } \newglossaryentry{restart}{ name={restart}, description={}, } \newglossaryentry{gls-sat}{ name={boolean satisfiability}, description={}, } \newglossaryentry{search-heuristic}{ name={search heuristic}, description={}, } \newglossaryentry{sol}{ name={solution}, description={A complete \gls{variable-assignment} for an \gls{instance} such that all \glspl{constraint} are satisfied}, } \newglossaryentry{solver}{ name={solver}, description={ A computer program that is designed to solve certain types of \gls{dec-prb} and/or \gls{opt-prb}. Given a \gls{slv-mod}, in a specified format, a solver will (eventually) produce a \gls{sol} for it. When solving a \gls{opt-prb}, solvers often produce intermediate \glspl{sol} before producing the \gls{opt-sol} }, } \newglossaryentry{parameter}{ name={problem parameter}, description={ Problem parameters are part of the external input for a \gls{model}. They can be used as immutable data used to define \glspl{constraint} or provide structural information about an \gls{instance}. For example, a problem parameter might influence the number of \glspl{constraint} in an \gls{instance} }, } \newglossaryentry{parameter-assignment}{ name={parameter assignment}, description={see \gls{assignment}}, } \newglossaryentry{partial}{ name={partial}, description={A function is said to be partial when it does not have a defined result for every possible input. Similarly, an \gls{assignment} is said to be partial when it maps only a subset of the \glspl{parameter} and \glspl{variable} in a }, } \newglossaryentry{propagation}{ name={constraint propagation}, description={}, } \newglossaryentry{propagator}{ name={propagator}, description={An algorithm that perform \gls{propagation} for a \gls{constraint}}, } \newglossaryentry{qcp-max}{ name={QCP-max}, description={}, } \newglossaryentry{reification}{ name={reification}, description={A reification is a special form of a \gls{constraint} where, instead of the \gls{constraint} being enforced in the \glspl{sol}, it enforces that a \gls{cvar} represents whether the \gls{constraint} holds or not}, } \newglossaryentry{rewriting}{ name={rewriting}, description={ The process of transforming a \gls{model} \gls{instance} into an \gls{eqsat} \gls{slv-mod} is referred to as rewriting. This happens primarily through the application of \glspl{decomp} }, } \newglossaryentry{satisfied}{ name={satisfied}, description={ A \gls{constraint} is said to be satisfied when its logical expression is proven to hold. Furthermore, a \gls{dec-prb} is said to be satisfied when all its \glspl{constraint} are satisfied }, } \newglossaryentry{slv-mod}{ name={solver model}, description={ A solver model is a \gls{instance} of a \gls{model} where all \glspl{constraint} and \gls{variable} types are \gls{native} for the targeted \gls{solver}. \glspl{instance} of \glspl{model} containing non-native \glspl{constraint} and/or \gls{variable} types can be transformed into solver models through the process of \gls{rewriting} }, } \newglossaryentry{scip}{ name={SCIP}, description={}, } \newglossaryentry{term}{ name={term}, description={}, } \newglossaryentry{termination}{ name={termination}, description={}, } \newglossaryentry{trail}{ name={trail}, description={}, } \newglossaryentry{gls-trs}{ name={term rewriting system}, description={}, } \newglossaryentry{unify}{ name={unify}, description={}, } \newglossaryentry{unsat}{ name={unsatisfiable}, description={A problem is unsatisfiable when there exists no possible for the problem}, } \newglossaryentry{variable}{ name={decision variable}, description={ A formalised decision that is yet to be made. When searching for a \gls{sol} a decision variable is said to have a certain \gls{domain}, which contains the values that the decision variable might still take. If at any point the \gls{domain} is reduced to a single value, then the decision variable is said to be \gls{fixed}. If, however, a decision variable has an empty \gls{domain}, then there is no value it can take that is consistent with the \glspl{constraint} }, } \newglossaryentry{variable-assignment}{ name={variable assignment}, description={see \gls{assignment}}, } \newglossaryentry{violated}{ name={violated}, description={A \gls{constraint} is said to be violated when its logical expression is known to be false}, } \newglossaryentry{zinc}{ name={Zinc}, description={}, }