Guido's abstract / intro notes
This commit is contained in:
parent
fe0234b009
commit
4562bb685d
@ -2,7 +2,7 @@
|
|||||||
\chapter{Abstract}\label{ch:abstract}
|
\chapter{Abstract}\label{ch:abstract}
|
||||||
%************************************************
|
%************************************************
|
||||||
|
|
||||||
\vspace{-8em}
|
\vspace{-5em}
|
||||||
|
|
||||||
\noindent{}\Cmls{} are a prominent way to model and solve real world problems.
|
\noindent{}\Cmls{} are a prominent way to model and solve real world problems.
|
||||||
They are used in areas such as scheduling, supply chain management, and transportation, among many others.
|
They are used in areas such as scheduling, supply chain management, and transportation, among many others.
|
||||||
@ -27,8 +27,8 @@ The architecture is extended using a range of well-known simplification techniqu
|
|||||||
In addition, we incorporate new analysis techniques to avoid the use of \glspl{reif} or replace them with \glspl{half-reif}, where possible.
|
In addition, we incorporate new analysis techniques to avoid the use of \glspl{reif} or replace them with \glspl{half-reif}, where possible.
|
||||||
|
|
||||||
The architecture is designed to incorporate incremental \constraint{} modelling in two ways.
|
The architecture is designed to incorporate incremental \constraint{} modelling in two ways.
|
||||||
Primarily, the \gls{rewriting} process is fully incremental: changes made to the \instance{} through a provided interface require minimal addition \gls{rewriting} effort.
|
Primarily, the \gls{rewriting} process is fully incremental: changes made to the \instance{} through a provided interface require minimal additional \gls{rewriting} effort.
|
||||||
Moreover, we introduce \gls{rbmo}, a way to specify \gls{meta-optimization} algorithms directly in \minizinc{}.
|
Moreover, we introduce \gls{rbmo}, a way to specify \gls{meta-optimization} algorithms directly in \minizinc{}.
|
||||||
These specifications are executed by a normal \minizinc{} \solver{}, requiring only a slight extension of its capabilities.
|
These specifications are executed directly by a \minizinc{} \solver{}, using a simple extension.
|
||||||
|
|
||||||
Together, the functionality of this architecture helps to make \cmls{} a more powerful and attractive approach to solve real world problems.
|
Together, the functionality of this architecture helps to make constraint modelling a more powerful and attractive approach to solve real world problems.
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
\noindent{}A \gls{dec-prb} is any problem that requires us to make decisions according to a set of rules.
|
\noindent{}A \gls{dec-prb} is any problem that requires us to make decisions according to a set of rules.
|
||||||
Many important and difficult problems in the real world are \glspl{dec-prb}.
|
Many important and difficult problems in the real world are \glspl{dec-prb}.
|
||||||
We can think, for instance, about the decision on the country's rail timetable or the stand-by locations for ambulances in the region.
|
We can think, for instance, about the decisions on the country's rail timetable or the stand-by locations for ambulances in the region.
|
||||||
Formally, we define a \gls{dec-prb} as a set of \variables{} subject to a set of logical \constraints{}.
|
Formally, we define a \gls{dec-prb} as a set of \variables{} subject to a set of logical \constraints{}.
|
||||||
A \gls{sol} to such a problem is the \gls{assignment} of all \variables{} to values that abide by the logic of the \constraints{}.
|
A \gls{sol} to such a problem is the \gls{assignment} of all \variables{} to values that abide by the logic of the \constraints{}.
|
||||||
These problems are also highly computationally complex: even with the fastest computers, finding a solution can take a long time.
|
These problems are also highly computationally complex: even with the fastest computers, finding a solution can take a long time.
|
||||||
@ -16,20 +16,19 @@ Famous classes of decision and \glspl{opt-prb}, such as \gls{sat} \autocite{bier
|
|||||||
And, over the years, highly specialized \solvers{} have been created to find \glspl{sol} for these classes of problems.
|
And, over the years, highly specialized \solvers{} have been created to find \glspl{sol} for these classes of problems.
|
||||||
Nowadays, most decision and \glspl{opt-prb} are solved by encoding them into one of the above-mentioned classes of problems.
|
Nowadays, most decision and \glspl{opt-prb} are solved by encoding them into one of the above-mentioned classes of problems.
|
||||||
|
|
||||||
Encoding one problem in terms of another is, however, a difficult problem.
|
Encoding one problem in terms of another is, however, a difficult task.
|
||||||
The problem classes can be restrictive: the input to the \solver{}, the \gls{slv-mod}, can only contain \gls{native} \variables{} and \constraints{}, meaning those that are directly supported by the \solver{}.
|
The problem classes can be restrictive: the input to the \solver{}, the \gls{slv-mod}, can only contain \gls{native} \variables{} and \constraints{}, meaning those that are directly supported by the \solver{}.
|
||||||
Furthermore, \constraints{} can only refer to \variables{}, they cannot be (directly) dependent on other \constraints{}.
|
Furthermore, \constraints{} can only refer to \variables{}, they cannot be (directly) dependent on other \constraints{}.
|
||||||
For example, \gls{sat} \solvers{} can only reason about Boolean \variables{}, deciding if something is true or false.
|
For example, \gls{sat} \solvers{} can only reason about Boolean \variables{}, deciding if something is true or false.
|
||||||
\Constraints{} for \gls{sat} \solvers{} have to be in the form of disjunctions of Boolean \variables{}, or their negations.
|
\Constraints{} for \gls{sat} \solvers{} have to be in the form of disjunctions of Boolean \variables{}, or their negations.
|
||||||
|
|
||||||
But, not only does the encoding have to be correct, the encoding also has to be performant.
|
But, not only does the encoding have to be correct, the encoding also has to be performant.
|
||||||
There are often many possible correct encodings of a problem, but there can be a significant difference in how quickly the \solver{} finds a \gls{sol} for them.
|
There are often many possible correct encodings of a problem, but there can be a significant difference in how quickly the \solver{} finds a \gls{sol} for them and the preferred encoding can differ between \solvers{}.
|
||||||
The preferred encoding can however differ between \solvers{}.
|
|
||||||
Two \solvers{} designed to solve the same problem class can perform very differently.
|
Two \solvers{} designed to solve the same problem class can perform very differently.
|
||||||
|
|
||||||
\Cmls{} have been designed to tackle these issues.
|
\Cmls{} have been designed to tackle these issues.
|
||||||
They serve as a level of abstraction between the modeller and the \solver{}.
|
They serve as a level of abstraction between the modeller and the \solver{}.
|
||||||
The typical process of a \cml{} is visualized in \cref{fig:intro-cml-flow}.
|
The typical process of using a \cml{} is visualized in \cref{fig:intro-cml-flow}.
|
||||||
Instead of providing a flat list of \variables{} and \constraints{}, a modeller creates a \cmodel{} using the more natural syntax of the \cml{}.
|
Instead of providing a flat list of \variables{} and \constraints{}, a modeller creates a \cmodel{} using the more natural syntax of the \cml{}.
|
||||||
A \cmodel{} can generally describe a class of problems through the use of \prbpars{}: values assigned by external input.
|
A \cmodel{} can generally describe a class of problems through the use of \prbpars{}: values assigned by external input.
|
||||||
Once given a complete \gls{assignment} of the \prbpars{}, the \cmodel{} forms an \instance{}.
|
Once given a complete \gls{assignment} of the \prbpars{}, the \cmodel{} forms an \instance{}.
|
||||||
@ -42,23 +41,23 @@ The \gls{rewriting} process of a \cml{} transforms a \cmodel{} into a \gls{slv-m
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Traditional \cmls{}, such as \emph{\glsxtrshort{ampl}} \autocite{fourer-2003-ampl}, \gls{essence} \autocite{frisch-2007-essence}, and \emph{\glsxtrshort{opl}} \autocite{van-hentenryck-1999-opl}, offer the modeller an expressive language that can be used to target a great variety of \solvers{}.
|
Traditional \cmls{}, such as \emph{\glsxtrshort{ampl}} \autocite{fourer-2003-ampl}, \gls{essence} \autocite{frisch-2007-essence}, and \emph{\glsxtrshort{opl}} \autocite{van-hentenryck-1999-opl}, offer the modeller an expressive language that can be used to target a great variety of \solvers{}.
|
||||||
However, these language lack a certain level of flexibility: the modeller is unable to capture common concepts used throughout a \cmodel{}, and the \solver{} cannot influence their way in which the problem is encoded.
|
However, these languages lack a certain level of flexibility: the modeller is unable to capture common concepts used throughout a \cmodel{}, and the \solver{} cannot influence their way in which the problem is encoded.
|
||||||
|
|
||||||
This is a stark difference to \gls{clp} languages, such as \gls{sicstus} \autocite{carlsson-1997-sicstus}, which are said to be the precursors to \cmls{}.
|
This is a stark difference to \gls{clp} languages, such as \gls{sicstus} \autocite{carlsson-1997-sicstus}, which are said to be the precursors to \cmls{}.
|
||||||
In these languages, the modeller is encouraged to create high-level concepts and declare the way in which they are rewritten into \gls{native} \constraints{}.
|
In these languages, the modeller is encouraged to express high-level concepts by defining custom predicates and functions and declare the way in which they are rewritten into \gls{native} \constraints{}.
|
||||||
The downside of \gls{clp} languages is that, because of its search mechanism, the \solver{} is tightly integrated within the \gls{rewriting}.
|
The downside of \gls{clp} languages is that, because of its search mechanism, the \solver{} is tightly integrated within the \gls{rewriting}.
|
||||||
These languages thus lack the \solver{}-independence of \cmls{}.
|
These languages thus lack the \solver{}-independence of \cmls{}.
|
||||||
|
|
||||||
\minizinc{} \autocite{nethercote-2007-minizinc} is a functional \cml{} that operates on a level in between these two types of languages.
|
\minizinc{} \autocite{nethercote-2007-minizinc} is a functional \cml{} that operates on a level in between these two types of languages.
|
||||||
Like a traditional \cml{}, it is a \solver{}-independent \cml{}.
|
Like a traditional \cml{}, it is \solver{}-independent.
|
||||||
Like a \gls{clp} language, modellers can declare and reuse common concepts and control the encoding into the \gls{slv-mod} through the use of function definitions.
|
Like a \gls{clp} language, modellers can declare and reuse common concepts and control the encoding into the \gls{slv-mod} through the use of function definitions.
|
||||||
Fundamentally, in its \gls{rewriting} process \minizinc{} is a functional language.
|
Fundamentally, in its \gls{rewriting} process \minizinc{} is a functional programming language.
|
||||||
It continuously evaluates the calls in a \minizinc{} \instance{} until it reaches \gls{native} \constraints{}.
|
It continuously evaluates the calls in a \minizinc{} \instance{} until it reaches \gls{native} \constraints{}.
|
||||||
Like other functional languages, \minizinc{} allows recursion; it can be used as a fully Turing complete programming language.
|
Like other functional languages, \minizinc{} allows recursion; it can be used as a fully Turing complete programming language.
|
||||||
|
|
||||||
Although \minizinc{} is based on this powerful paradigm, its success has made certain problems apparent.
|
Although \minizinc{} is based on this powerful paradigm, its success has made certain problems apparent.
|
||||||
The language was originally designed to target \gls{cp} \solvers{}, where the \glspl{slv-mod} typically contain a few highly complex \constraints{}.
|
The language was originally designed to target \gls{cp} \solvers{}, where the \glspl{slv-mod} typically contain only few, highly complex \constraints{}.
|
||||||
Its use has extended to rewrite for \gls{mip} and \gls{sat} \solvers{}, whose \glspl{slv-mod} often contain large numbers \variables{} and simple \constraints{}, generated by a complex library of \minizinc{} functions.
|
Its use has however, over time, extended to rewrite for \gls{mip} and \gls{sat} \solvers{}, whose \glspl{slv-mod} often contain numerous \variables{} and simple \constraints{}, generated by a complex library of \minizinc{} functions.
|
||||||
For many applications, \minizinc{} now requires a significant, and sometimes prohibitive, amount of time to rewrite \instances{}.
|
For many applications, \minizinc{} now requires a significant, and sometimes prohibitive, amount of time to rewrite \instances{}.
|
||||||
|
|
||||||
Unlike \gls{clp} \gls{rewriting}, the \minizinc{} \gls{rewriting} process does not consider incremental changes to its \gls{slv-mod}.
|
Unlike \gls{clp} \gls{rewriting}, the \minizinc{} \gls{rewriting} process does not consider incremental changes to its \gls{slv-mod}.
|
||||||
@ -68,7 +67,7 @@ The overhead of \gls{rewriting} all these \instances{} separately can be substan
|
|||||||
In this thesis we revisit the \gls{rewriting} of functional \cmls{} into \glspl{slv-mod}.
|
In this thesis we revisit the \gls{rewriting} of functional \cmls{} into \glspl{slv-mod}.
|
||||||
We design and evaluate an architecture for \cmls{} that can accommodate the modern uses of these languages.
|
We design and evaluate an architecture for \cmls{} that can accommodate the modern uses of these languages.
|
||||||
|
|
||||||
\section{Constraint Modelling Varieties}
|
\section{Different Ways of Modelling with Constraints}
|
||||||
|
|
||||||
Let us now study the different ways of constraint modelling in more detail, starting with one of the most commonly used \cmls{}: \glsxtrshort{ampl}.
|
Let us now study the different ways of constraint modelling in more detail, starting with one of the most commonly used \cmls{}: \glsxtrshort{ampl}.
|
||||||
|
|
||||||
@ -91,7 +90,7 @@ As an \gls{opt-prb}, our goal is to find a schedule that minimizes the finishing
|
|||||||
In order of occurrence, \lrefrange{line:intro:param:start}{line:intro:param:end} show the declarations of the \prbpars{}.
|
In order of occurrence, \lrefrange{line:intro:param:start}{line:intro:param:end} show the declarations of the \prbpars{}.
|
||||||
To create an \instance{} of the problem, the modeller provides the number of jobs and machines that are considered, and the duration of each task.
|
To create an \instance{} of the problem, the modeller provides the number of jobs and machines that are considered, and the duration of each task.
|
||||||
\Lrefrange{line:intro:var:start}{line:intro:var:end} show the \variable{} declarations: for each task we decide on its start time.
|
\Lrefrange{line:intro:var:start}{line:intro:var:end} show the \variable{} declarations: for each task we decide on its start time.
|
||||||
We also declare the end time of the last task as a \variable{}, to ease the modelling of the problem.
|
We also declare the end time of the last task as a \variable{}, to make it easier to model the \gls{objective}.
|
||||||
This \variable{} is made to be our optimization goal on \lref{line:intro:goal}.
|
This \variable{} is made to be our optimization goal on \lref{line:intro:goal}.
|
||||||
Finally, \lrefrange{line:intro:con:start}{line:intro:con:end} express the \constraints{} of our problem in terms of equations bound by logic.
|
Finally, \lrefrange{line:intro:con:start}{line:intro:con:end} express the \constraints{} of our problem in terms of equations bound by logic.
|
||||||
|
|
||||||
@ -133,7 +132,7 @@ For example, the concepts of one task preceding another and non-overlapping of t
|
|||||||
|
|
||||||
The definition of \texttt{non\_overlap} requires that either task A precedes task B, or vice versa.
|
The definition of \texttt{non\_overlap} requires that either task A precedes task B, or vice versa.
|
||||||
However, unlike the \glsxtrshort{ampl} model, Prolog would not provide this choice to the \solver{}.
|
However, unlike the \glsxtrshort{ampl} model, Prolog would not provide this choice to the \solver{}.
|
||||||
Instead, it enforces one, test if this works, and it otherwise enforces the other.
|
Instead, it enforces one, tests if this works, and it otherwise enforces the other.
|
||||||
|
|
||||||
This is a powerful mechanism where choices are made in the \gls{rewriting} process, and not in the \solver{}.
|
This is a powerful mechanism where choices are made in the \gls{rewriting} process, and not in the \solver{}.
|
||||||
The problem with the mechanism is that it requires a highly incremental interface with the \solver{} that can incrementally post and retract \constraints{}.
|
The problem with the mechanism is that it requires a highly incremental interface with the \solver{} that can incrementally post and retract \constraints{}.
|
||||||
@ -161,14 +160,15 @@ For example, a modeller could create the following \minizinc{} function to expre
|
|||||||
\minizinc{} also determines how an \instance{} is encoded for a \solver{} through function definitions.
|
\minizinc{} also determines how an \instance{} is encoded for a \solver{} through function definitions.
|
||||||
All functionality in the \minizinc{} language is eventually expressed using function calls.
|
All functionality in the \minizinc{} language is eventually expressed using function calls.
|
||||||
The \solver{}, then, has the decision to choose if this call is a \gls{native} \constraint{}, or how this call is rewritten.
|
The \solver{}, then, has the decision to choose if this call is a \gls{native} \constraint{}, or how this call is rewritten.
|
||||||
For example, the logical \mzninline{or}-operator, which was only supported for \gls{cp} \solvers{} in \glsxtrshort{ampl}, could be defined for \gls{mip} solvers in \minizinc{} using the following definition.
|
Each \solver{} supplies its own library of \minizinc{} function definitions for common \constraints{}.
|
||||||
|
For example, the logical \mzninline{or}-operator, which was only supported for \gls{cp} \solvers{} in \glsxtrshort{ampl}, could be defined in the \minizinc{} library for a \gls{mip} \solver{} using the following definition.
|
||||||
|
|
||||||
\begin{mzn}
|
\begin{mzn}
|
||||||
predicate bool_or(var bool: x, var bool: y) =
|
predicate bool_or(var bool: x, var bool: y) =
|
||||||
x + y >= 1;
|
x + y >= 1;
|
||||||
\end{mzn}
|
\end{mzn}
|
||||||
|
|
||||||
\noindent{}Whereas the following definition would mark it as a \gls{native} \constraint{} for a \gls{cp} \solver{}, by not defining a body.
|
\noindent{}Whereas, the \minizinc{} library of a \gls{cp} \solver{} could include the following definition to mark it as a \gls{native} \constraint{}, by not defining a body.
|
||||||
|
|
||||||
\begin{mzn}
|
\begin{mzn}
|
||||||
predicate bool_or(var bool: x, var bool: y);
|
predicate bool_or(var bool: x, var bool: y);
|
||||||
@ -177,7 +177,7 @@ For example, the logical \mzninline{or}-operator, which was only supported for \
|
|||||||
The functional paradigm employed by \minizinc{} has shown itself to be powerful and flexible for the modeller and \solver{}
|
The functional paradigm employed by \minizinc{} has shown itself to be powerful and flexible for the modeller and \solver{}
|
||||||
However, the performance of the functional evaluation of the language can be a limiting factor.
|
However, the performance of the functional evaluation of the language can be a limiting factor.
|
||||||
|
|
||||||
\section{The Problems of Rewriting MiniZinc}
|
\section{Why Rewriting MiniZinc is Difficult}
|
||||||
|
|
||||||
A \minizinc{} model generally consists of a few loops or \glspl{comprehension}; for a \gls{cp} solver, this would be rewritten into a relatively small set of \constraints{} which would be fed whole into the solver.
|
A \minizinc{} model generally consists of a few loops or \glspl{comprehension}; for a \gls{cp} solver, this would be rewritten into a relatively small set of \constraints{} which would be fed whole into the solver.
|
||||||
The existing process for translating \minizinc{} into a \gls{slv-mod} is a somewhat ad-hoc, (mostly) single-pass, recursive unrolling procedure, and many aspects (such as call overloading) are resolved dynamically.
|
The existing process for translating \minizinc{} into a \gls{slv-mod} is a somewhat ad-hoc, (mostly) single-pass, recursive unrolling procedure, and many aspects (such as call overloading) are resolved dynamically.
|
||||||
@ -204,7 +204,7 @@ In particular:
|
|||||||
An important decision that is made during \gls{rewriting} is if a \constraint{} can be enforced directly or if it is dependent on other \constraints{}.
|
An important decision that is made during \gls{rewriting} is if a \constraint{} can be enforced directly or if it is dependent on other \constraints{}.
|
||||||
In the second case, a \gls{reif} has to be introduced: an often costly form of the \constraint{} that determines whether a \constraint{} holds rather than enforcing the \constraint{} itself.
|
In the second case, a \gls{reif} has to be introduced: an often costly form of the \constraint{} that determines whether a \constraint{} holds rather than enforcing the \constraint{} itself.
|
||||||
It is possible, however, that further \gls{rewriting} can reveal a \gls{reif} to be unnecessary.
|
It is possible, however, that further \gls{rewriting} can reveal a \gls{reif} to be unnecessary.
|
||||||
Currently, the current \minizinc{} implementation cannot reverse any \gls{reif} decisions once they are made.
|
The current \minizinc{} implementation cannot reverse any \gls{reif} decisions once they are made.
|
||||||
And, it also does not consider \gls{half-reif}, a cheaper alternative to \gls{reif} that is often applicable.
|
And, it also does not consider \gls{half-reif}, a cheaper alternative to \gls{reif} that is often applicable.
|
||||||
|
|
||||||
\item Monolithic \gls{rewriting} is wasteful.
|
\item Monolithic \gls{rewriting} is wasteful.
|
||||||
@ -218,9 +218,9 @@ In particular:
|
|||||||
\section{Research Aims and Contributions}
|
\section{Research Aims and Contributions}
|
||||||
|
|
||||||
Research into \gls{rewriting} of \cmls{}, as well as model transformation in general, has shown that it is difficult to achieve both high performance and generality.
|
Research into \gls{rewriting} of \cmls{}, as well as model transformation in general, has shown that it is difficult to achieve both high performance and generality.
|
||||||
We address these issues by reconsidering the rewriting process from the ground up to make the transformation efficient while accommodating the optimization techniques to achieve the expected result.
|
We address these issues by reconsidering the rewriting process from the ground up to make the transformation efficient while accommodating the optimization techniques required to produce high-quality \gls{slv-mod}.
|
||||||
In order to adapt \cmls{} for modern day requirements, this thesis aims to \textbf{design, implement, and evaluate a modern architecture for functional \cmls{}}.
|
In order to adapt \cmls{} for modern day requirements, this thesis aims to \textbf{design, implement, and evaluate a modern architecture for functional \cmls{}}.
|
||||||
Crucially, this architecture should allow us to:
|
Crucially, this architecture will allow us to:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ Overall, this thesis makes the following contributions.
|
|||||||
|
|
||||||
This thesis is arranged into the following chapters.
|
This thesis is arranged into the following chapters.
|
||||||
|
|
||||||
Succeeding this introductory chapter, \emph{\cref{ch:background}} gives an overview of the area of \cmls{}.
|
\emph{\Cref{ch:background}} gives an overview of the area of \cmls{}.
|
||||||
It introduces the reader to \minizinc{}, how its models are formulated and how they are translated to \glspl{slv-mod}.
|
It introduces the reader to \minizinc{}, how its models are formulated and how they are translated to \glspl{slv-mod}.
|
||||||
Then, we review different solving methods such as \gls{sat}, \gls{mip}, and \gls{cp}.
|
Then, we review different solving methods such as \gls{sat}, \gls{mip}, and \gls{cp}.
|
||||||
This is followed by a comparison of \minizinc{} with other \cmls{}.
|
This is followed by a comparison of \minizinc{} with other \cmls{}.
|
||||||
@ -276,15 +276,15 @@ We compare the performance of an implementation of the presented architecture ag
|
|||||||
\emph{\Cref{ch:half-reif}} continues on the path of improving \glspl{slv-mod}.
|
\emph{\Cref{ch:half-reif}} continues on the path of improving \glspl{slv-mod}.
|
||||||
In this chapter, we present a formal analysis technique to reason about \gls{reif}.
|
In this chapter, we present a formal analysis technique to reason about \gls{reif}.
|
||||||
This analysis can help us decide whether a \constraint{} has to be reified.
|
This analysis can help us decide whether a \constraint{} has to be reified.
|
||||||
In addition, the analysis allows us to determine whether we use \gls{half-reif}.
|
In addition, the analysis allows us to determine whether to use \gls{half-reif}.
|
||||||
We thus present the first implementation of automatic \gls{half-reif}.
|
We thus present the first implementation of automatic \gls{half-reif}.
|
||||||
We conclude this chapter by analysing the impact of \gls{half-reif} for different types of \solvers{}.
|
We conclude this chapter by analysing the impact of \gls{half-reif} for different types of \solvers{}.
|
||||||
|
|
||||||
\emph{\Cref{ch:incremental}} focuses on the development of incremental methods for \cmls{}.
|
\emph{\Cref{ch:incremental}} focuses on the development of incremental methods for \cmls{}.
|
||||||
We first present a novel technique that eliminates the need for the incremental \gls{rewriting}.
|
We first present a novel technique that eliminates the need for incremental \gls{rewriting}.
|
||||||
Instead, it integrates a \gls{meta-optimization} specification, written in the \minizinc{} language, into the \gls{slv-mod}.
|
Instead, it integrates a \gls{meta-optimization} specification, written in the \minizinc{} language, into the \gls{slv-mod}.
|
||||||
Then, we describe a technique to optimize the \gls{rewriting} process for incremental changes to an \instance{}.
|
Then, we describe a technique to optimize the \gls{rewriting} process for incremental changes to an \instance{}.
|
||||||
This method prevents the repeated \gls{rewriting} for parts of the \instance{} that remain unchanged.
|
This method prevents the repeated \gls{rewriting} of parts of the \instance{} that remain unchanged.
|
||||||
We conclude this chapter by testing the performance and computational overhead of these two techniques.
|
We conclude this chapter by testing the performance and computational overhead of these two techniques.
|
||||||
|
|
||||||
Finally, \emph{\Cref{ch:conclusions}} is the concluding chapter of the thesis.
|
Finally, \emph{\Cref{ch:conclusions}} is the concluding chapter of the thesis.
|
||||||
|
Reference in New Issue
Block a user