<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Improving the Efficiency of Dislocality Constraints for an Automated Software Deployment in Safety-Critical Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Dr. Robert Hilbrich</string-name>
          <email>robert.hilbrich@dlr.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dr. Michael Behrisch</string-name>
          <email>michael.behrisch@dlr.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>German Aerospace Center</institution>
          ,
          <addr-line>Rutherfordstr. 2, 12489 Berlin</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <fpage>90</fpage>
      <lpage>95</lpage>
      <abstract>
        <p>-Mapping software components to hardware resources is a central part of the systems engineering process. This task can be automated by formalization and transformation into a Constraint Satisfaction Problem and the subsequent application of a constraint solver. The toolsuite ASSIST demonstrates the feasibility of this concept. In ASSIST, dislocality requirements can be specified for software components to constrain the set of valid mapping solutions and to ensure reliability and fault tolerance of the system. Three approaches to model these dislocality requirements with constraints are presented. They are compared to each other based on twenty synthetic mapping examples.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>Engineering complex and safety-critical systems, such as
flight control systems aboard an airplane, is still challenging
and costly. Despite recent advancements in our model-based
tool suites and engineering methods, the design of these
systems still bears risk and uncertainties with regard to its
outcome.</p>
      <p>
        The formalization and automation of crucial engineering
tasks appears to be a promising approach to tackle these
challenges [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Systems in these areas are engineered to
implement a complex interplay between mechanical elements,
electronic components, as well as (embedded) software.
Therefore, their design has to mirror this interplay and requires the
development of a hardware and software architecture.
      </p>
      <p>In practice, these architectures can often be developed
independent of each other, but their integration in the final
system requires a link between the software components and
their hardware resources. Creating this link is referred to as
the deployment of the software components. Constructing a
deployment requires the systems engineer to map software
components to resources and to schedule the access to shared
resources. Therefore, mapping refers to a spatial allocation,
while scheduling refers to a temporal allocation of software
components.</p>
      <p>The construction of a deployment is an engineering task,
which not only affects the fulfillment of functional
requirements by providing the necessary resources, but also affects
the satisfaction of non-functional requirements, such as safety
and reliability. Redundancy and fault tolerance can only be
achieved, if critical software components are deployed
accordingly. Deploying software components is a very intricate
task with zero tolerance for errors as they may jeopardize
the correctness of the system. At the same time, it requires
a detailed understanding of the requirements of all software
components and the capabilities of all hardware resources in
the system. Due to the sensitivity and complexity of this task,
its formalization and automation is a valuable research goal.</p>
      <p>
        II. AUTOMATED CONSTRUCTION OF DEPLOYMENTS
In order to achieve an automated construction of a
deployment and to argue its correctness, a formalization of the
mapping problem is required. For smaller mapping problems,
this has been successfully achieved based on Linear Integer
Programming [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], SMT-based solvers [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] or evolutionary
algorithms [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. However, these approaches reach their limits
when larger, real-world mapping problems are considered.
On the one hand, methods based on integer programming
techniques are typically unable to provide solutions in a short
timespan (20 minutes), when the complexity of the system
reaches the level of real-world systems. Heuristic approaches
based on evolutionary algorithms on the other hand are usually
unable to cope with limited gradient information to guide a
search process, because the design space of real-world systems
often contains many discontinuities.
      </p>
      <p>
        The authors instead chose to transform a mapping problem
into a semantically equivalent Constraint Satisfaction Problem
(CSP) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] and solve this CSP with Constraint Programming
techniques [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The advantages of using Constraint
Programming in comparison to other techniques lie in the availability
of powerful modeling elements, such as an allDifferent
constraint, and the ease with which custom search heuristics
can be implemented.
      </p>
      <sec id="sec-1-1">
        <title>A. Constraint Satisfaction Problems</title>
        <p>Constraint Programming refers to a set of techniques in
artificial intelligence and operations research. These techniques
assist in finding solutions for problems based on variables,
which are affected by constraints. Each constraint defines valid
or invalid solutions for a subset of these variables. In this
paper, a subclass of constraint satisfaction problems is used
to express mapping problems: finite domain integer constraint
satisfaction problems in which each variable has a finite
integer domain. Solutions for this problem class can be obtained
by applying a combination of search techniques – including
backtracking – and constraint propagation techniques for value
elimination.</p>
        <p>To illustrate the modeling approach of Constraint
Satisfaction Problems, consider the well-known Map Coloring
problem as an example. This problem asks, whether it is
possible to color a map with only four colors in such a way,
that neighboring countries have different colors. It can be
formulated as a CSP by assigning an integer variable xi for
each country with the index i. The domain of each variable
corresponds to the four colors: Dxi = {0, 1, 2, 3}. In order to
model the restrictions of this problem, a constraint is added
for each pair of adjacent countries. If country xi is adjacent
to country xj , then xi 6= xj is required. The search algorithm
is now responsible to select a variable and test a value of its
domain. Assuming a simple “first variable, first value” strategy,
the variable x0 would be chosen and set to the value 0 as a test.
This would be propagated to all variables which are directly
linked to x0 by a constraint, so that the value 0 gets removed
from their domains. This removal may lead to other value
removals in indirectly linked variables and is processed until
a fix point is reached. If a contradiction is encountered or the
domain of a variable becomes empty, backtracking is initiated,
so that the next value of the variable x0 is tested. Otherwise,
the search algorithm continues with the next uninstantiated
variable.</p>
        <p>This example also shows, that the propagation of the
NOTEQUAL constraint is weak, because it affects only two
variables and invalidates only 4 out of the 16 possible value
combinations between two variables.</p>
      </sec>
      <sec id="sec-1-2">
        <title>B. Toolsuite ASSIST</title>
        <p>
          As a proof of concept for the ongoing research toward an
automated construction of deployments based on Constraint
Satisfaction Problems, the toolsuite Architecture Synthesis
for Safety-Critical Systems (ASSIST) was developed by the
authors. It is publicly available and uses the constraint solver
Choco 4.0.6 [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] internally.
        </p>
        <p>ASSIST allows a systems engineer to automatically
construct and optimize mappings based on textual specifications of
the software components and hardware resources, dislocality,
dissimilarity and colocality requirements, and also
optimization goals. The textual specifications in ASSIST conform to a
domain-specific language which allows to hide the intricacies
of a formal specification.</p>
        <p>III. ENSURING FAULT TOLERANCE BY REQUIRING</p>
        <p>DISLOCALITY</p>
        <p>In order to achieve fault tolerance and reliability, it is
essential to support “significant differences” in the choice of
resources to which critical software components are deployed
to. For example, a simple redundancy requirement between
two software components, may force the systems engineer
to allocate these software components to different processing
boards in different locations aboard an airplane. Furthermore,
systematic errors and undetected design flaws in hardware
components may be addressed by choosing dissimilar
hardware resources, processors or memory blocks from different
vendors for example.</p>
        <p>Due to the importance of choosing “different” resources
for fault tolerance and reliability in safety-critical systems,
engineering tools for an automated construction of
deployments need to be able to fully support these choices. ASSIST
supports the engineer by offering dislocality and dissimilarity
requirements as part of the domain specific language. They can
be used to enforce “differences” for the choice of resources
during the mapping process. Finding an efficient formulation
to express the semantics of each requirement as a Constraint
Satisfaction Problem is challenging, but also essential in order
to provide an effective toolsuite for the engineering of
safetycritical systems.</p>
        <p>In order to illustrate the challenges and to present specific
modeling improvements, the dislocality requirement is used
as an example in this paper. Please note, that the concepts
developed for dislocality requirements can also be applied to
dissimilarity requirements.</p>
        <p>The semantics of a dislocality requirement can be illustrated
with the following deployment problem (see Figure 2). In
this example system, there are three applications consisting
of one or more tasks. Each task has to be mapped to exactly
one of the processors in the system. It is assumed, that
the processor contains multiple cores, so that multiple tasks
can be mapped to a single processor. However, in order to
ensure fault tolerance, a dislocality requirement is added for
all applications. This means, that the applications must not
share a processor, so that a faulty processor affects only one
application.</p>
        <p>
          Expressing the basic deployment problem with constraints
is straight forward. Each task i in the system is represented
by an integer variable Xi. The domain of each variable Xi
corresponds to the indices of the n processors in the system
(Xi 2 { 0, 1, . . . , n 1}). In order to add the constraints
for the dislocality requirements, two cases have to be
distinguished. In the simple case, in which all applications consist
of only one task, a dislocality can be enforced with a single
allDifferent constraint (see [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]) over all task variables
Xi. This case is depicted in Figure 2 (a). Fortunately, Choco 4
already contains an implementation for an allDifferent
constraint based on the algorithm of Rgin [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ], so that the
simple case can be implemented.
        </p>
        <p>In real-world systems, applications usually consist of more
than one task. Furthermore, tasks of the same application
usually share the same processor. This situation is more
complex and depicted in Figure 2 (b). Unfortunately, in this case,
the previous approach of applying a single allDifferent
constraint over all task variables Xi can no longer be used.</p>
        <p>It would prevent solutions in which a processor is shared by</p>
        <p>Fig. 1. Screenshot of the ASSIST User Interface
App A
Task A.1</p>
        <p>App B
Task B.1</p>
        <p>App C
Task C.1</p>
        <p>App A
Task A.1
Task A.2</p>
        <p>App B
Task B.1
Task B.2</p>
        <p>App C
Task C.1
Processor 1</p>
        <p>Processor 2</p>
        <p>Processor 3</p>
        <p>Processor 4</p>
        <p>Processor 1</p>
        <p>Processor 2</p>
        <p>Processor 3</p>
        <p>Processor 4
(a) Simple Case
(b) Complex Case
multiple tasks of the same application.</p>
        <p>The existing allDifferent constraint simply ensures,
that values for a list of variables are different. However,
the complex case requires an advanced allDifferent
constraint working with a list of a list of variables and ensuring
that the combined values for each list of variables are disjunct.</p>
        <p>
          Unfortunately, such a constraint is neither part of the Global
Constraint Catalog [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] nor available in Choco 4.
        </p>
        <p>IV. MODELING COMPLEX DISLOCALITY REQUIREMENTS</p>
        <p>This section introduces three alternative implementations for
the semantics of an advanced allDifferent constraint.</p>
        <p>Their performance and impact on resolution time will be
analyzed and compared to each other in the next section.</p>
        <p>Before continuing with the description of possible
implementations, the semantics of an advanced allDifferent
constraint should be described more precisely. For this
purpose, consider the example system in Figure 2 (b). It consists
of the applications A, B and C. Each of these applications
contains one or more tasks, i.e. A = {A1, A2}, B = {B1, B2}
and C = {C1}. An advanced allDifferent for all
applications would be working with a list of a list of variables,
for example:</p>
        <p>allDifferent {{A1, A2}, {B1, B2}, {C1}}
Assuming that A? combines the values for each task in
application A:</p>
        <p>A? 2 P
(N) = [ {Ai : Ai 2</p>
        <p>A}
(= A1 [</p>
        <p>A2)
and B? and C? do the same for the applications B and C, Based on the description of these three approaches to
then the advanced allDifferent constraint would ensure, implement the semantics of an advanced allDifferent
that the sets A?, B? and C? are pairwise disjunct. constraint, the next sections will describe experiments
conducted by the authors and preliminary results to assess and
Element-wise Approach compare the performance and efficiency of each approach.</p>
        <p>One option to implement the advanced allDifferent
constraint semantic is to apply the already existing
allDifferent constraint for every subset s with</p>
        <p>s = {a, b, c | a 2 A, b 2 B, c 2 C}
For systems with a large amount of applications and more than
one task within each application, the amount of constraints,
that will be added to the constraint solver by this approach,
may significantly prolong the resolution time. However, this
approach can be realized with the tools already available in
Choco 4 and does not require any additional implementation
of custom propagators and constraints.</p>
      </sec>
      <sec id="sec-1-3">
        <title>Instantiation-only Approach</title>
        <p>In order to address the drawbacks of the first approach,
another option is to implement a custom constraint and
propagator for Choco 4, that is able to operate on a list of a list
of variables. For the sake of simplicity, the propagator should
only react on instantiation events for any of its variables. If
an instantiation is detected, then the value of the instantiated
variable will be removed from the values of all variables in
all of the other lists. This approach has the advantage, that
only one constraint needs to be added to the constraint solver
for each dislocality requirement. However, this
instantiationonly approach leads to a weak propagation as it only removes
values, when one of the variables is instantiated.</p>
      </sec>
      <sec id="sec-1-4">
        <title>Combined Union-Variables and Instantiation-Only Approach</title>
        <p>The third approach tries to build upon the instantiation-only
approach and improve the strength of its propagation. For this
purpose, a new integer variable X? will be added for each list
of task variables X = {X1, . . . , Xn} that were provided to the
advanced allDifferent constraint. The new variable X?
will contain the union of the remaining values of all variables
in X. This can be achieved with a custom propagator similar to
the already existing PropSetIntValuesUnion propagator
in Choco 4. With these new “union variables” being available,
adding a simple allDifferent constraint, which links all
of the union variables, should improve the effectiveness of the
propagation.</p>
        <p>Please note, that these “union variables” must not be added
to the list of variables for branching as part of the search
strategy in Choco 4 as they will not always be resolved to
only one value if tasks of an application are deployed to
different processors. This approach will be combined with
the instantiation-only approach from the previous section. In
comparison to the instantiation-only approach, the handling of
union-variables requires the addition of a new variable and a
propagator for each list of variables, so there is some overhead
to be expected.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>V. EXPERIMENTS</title>
      <p>Benchmarking the performance and efficiency of these
approaches requires several example to work on. For this
purpose, the authors developed a generator for synthetic
mapping problems that resemble the typical characteristics
of mapping problems encountered in safety-critical systems.
Twenty randomized examples with at least one solution were
generated for the experiments. They exhibit the following
properties.</p>
      <p>In each example, there are two compartments, each
containing between four and six boxes. Each box contains between
four and six processing boards and every processing board
is equipped with one or two processors each comprising of
up to four cores. The examples contain between 16 and 24
applications and each of these applications have between two
and eight tasks that need to be mapped to the cores on the
processors. All tasks of an application are required to be
placed on the same processing board to allow for
memorybased communication (colocality requirement). Finally, every
example features between 24 and 32 dislocality requirements
and each of these requirements refers to at least four and up
to six applications.</p>
      <p>Every example was benchmarked on an Apple iMac 5k with
64GB of RAM by using ASSIST 2.3 and Choco 4.0.6. The
experiments were done with the Domain over Weighted Degree
as a variable selector strategy and Minimum Value First as a
value selector strategy. The examples are publicly available in
the ASSIST repository.</p>
    </sec>
    <sec id="sec-3">
      <title>VI. RESULTS</title>
      <p>The amount of constraints and variables are depicted for
each example and each approach in Figure 3 and Figure 4.
The results show, that the element-wise approach leads to a
substantial increase in the amount of constraints in the solver
in comparison to the other two approaches. However, the
increase of the variable count due to the addition of
unionvariables for the implementation of the third approach appears
to be rather negligible.</p>
      <p>The total resolution time until the first solution has been
reached is depicted in Figure 5. Please note the logarithmic
scale on the y-axis. The results demonstrate, that the resolution
time can be significantly reduced in all examples by adopting
the instantiation-only approach.</p>
      <p>Further improvements to the instantiation-only approach
can be achieved by applying the combined approach, but the
additional gains are significantly smaller. In some examples,
the combined approach requires slightly more time for a
resolution. However, the time differences in these cases are
so small, that they may also be induced by external effects,
such as garbage collection in Java or scheduling interferences
in the operating system.</p>
      <p>Backtracking occurs, when the search process in the
constraint solver encounters a fail event, i.e. a variable has an
empty domain after value propagation or one of the constraints
determines a contradiction. Figure 6 shows the amount of
backtracking that occurred before finding the first solution
in each example. One would assume, that the element-wise
approach exhibits the strongest propagation due to the large
amount of additional allDifferent constraints, so that the
amount of fails and backtracks might be smaller compared to
the other approaches. In fact, the results are not as clear-cut.
Some examples show, that the propagation of the
elementwise approach is significantly stronger compared to the other
approaches. However, there are also other examples in which
the situation is reversed.</p>
    </sec>
    <sec id="sec-4">
      <title>VII. SUMMARY AND CONCLUSIONS</title>
      <p>Ensuring significant differences in the choice of resources
to which software components in safety-critical systems are
deployed to, is essential for satisfying safety requirements and
facilitating fault tolerance. ASSIST is a toolsuite for system
engineers, which aims to automate the deployment of
software components to hardware resources by transforming this
mapping problem into an equivalent Constraint Satisfaction
Problem. In ASSIST, there are several means to require
“differences” in the choice of resources. Dislocality requirements
are one of those means and they are used as an example in
this paper to illustrate the challenge of finding an efficient
constraint model.</p>
      <p>Three different approaches to implement the intended
semantics of dislocality requirements are presented. They
specifically address complex use-cases in which applications consist
of multiple tasks. While one of these approaches can be
realized without any customized constraints or propagators,
the other two approaches rely on custom implementations of
constraints and propagators as well as additional variables in
the third approach.</p>
      <p>Experiments conducted with twenty synthesized mapping
examples for ASSIST show, that the implementation of custom
constraints and propagators is well worth the effort. They lead
to a substantial reduction in the resolution time with only
minimal overhead due to the additional constraints and variables.
The results also indicate, that the element-wise approach,
which requires the highest amount of additional constraints,
does not always lead to the lowest rate of backtracks in the
examples.</p>
    </sec>
    <sec id="sec-5">
      <title>ACKNOWLEDGMENT</title>
      <p>The authors acknowledge the financial support for this
work by the Federal Ministry of Education and Research of
Germany (BMBF) in the project “ARAMiS II” (DLR, grant
identifier 01IS16025D).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R.</given-names>
            <surname>Chapman</surname>
          </string-name>
          , “
          <article-title>Correctness by construction: putting engineering (back) into software,” in Proceedings of the 2007 ACM international conference on SIGAda annual international conference, ser</article-title>
          .
          <source>SIGAda '07</source>
          . New York, NY, USA: ACM,
          <year>2007</year>
          , pp.
          <fpage>100</fpage>
          -
          <lpage>100</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/1315580.1315605
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>R.</given-names>
            <surname>Hilbrich</surname>
          </string-name>
          ,
          <article-title>Platzierung von Softwarekomponenten auf Mehrkernprozessoren: Automatisierte Konstruktion und Analyse fu</article-title>
          ¨r funktionssichere Systeme. Springer Fachmedien Wiesbaden,
          <year>2015</year>
          . [Online]. Available: https://books.google.de/books?id=qu5rCgAAQBAJ
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>W.</given-names>
            <surname>Damm</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Metzner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Eisenbrand</surname>
          </string-name>
          , G. Shmonin,
          <string-name>
            <given-names>R.</given-names>
            <surname>Wilhelm</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Winkel</surname>
          </string-name>
          , “
          <article-title>Mapping Task-Graphs on Distributed ECU Networks: Efficient Algorithms for Feasibility and Optimality,” in Embedded and Real-Time Computing Systems</article-title>
          and Applications,
          <year>2006</year>
          . Proceedings. 12th IEEE International Conference on,
          <year>2006</year>
          , pp.
          <fpage>87</fpage>
          -
          <lpage>90</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>S.</given-names>
            <surname>Kugele</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Haberl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tautschnig</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Wechs</surname>
          </string-name>
          , “
          <article-title>Optimizing Automatic Deployment Using Non-functional Requirement Annotations,” in Leveraging Applications of Formal Methods, Verification and Validation, ser</article-title>
          . Communications in Computer and Information Science,
          <string-name>
            <given-names>T.</given-names>
            <surname>Margaria</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Steffen</surname>
          </string-name>
          , Eds. Springer Berlin Heidelberg,
          <year>2009</year>
          , vol.
          <volume>17</volume>
          , pp.
          <fpage>400</fpage>
          -
          <lpage>414</lpage>
          . [Online]. Available: http://dx.doi.
          <source>org/10.1007/978-3-540-88479-8 28</source>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>S.</given-names>
            <surname>Voss</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Schatz</surname>
          </string-name>
          , “Deployment and
          <article-title>Scheduling Synthesis for Mixed-Critical Shared-Memory Applications</article-title>
          ,” in
          <source>Engineering of Computer Based Systems (ECBS)</source>
          ,
          <year>2013</year>
          20th IEEE International Conference and Workshops on the,
          <year>2013</year>
          , pp.
          <fpage>100</fpage>
          -
          <lpage>109</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>White</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Dougherty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Thompson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D. C.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          , “
          <article-title>ScatterD: Spatial deployment optimization with hybrid heuristic/evolutionary algorithms</article-title>
          ,
          <source>” TAAS</source>
          , vol.
          <volume>6</volume>
          , no.
          <issue>3</issue>
          , p.
          <fpage>18</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>K. R.</given-names>
            <surname>Apt</surname>
          </string-name>
          ,
          <article-title>Principles of constraint programming</article-title>
          . Cambridge University Press,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>F.</given-names>
            <surname>Rossi</surname>
          </string-name>
          , P. van Beek, and T. Walsh, Eds.,
          <article-title>Handbook of Constraint Programming</article-title>
          .
          <source>ELSEVIER SCIENCE &amp; TECHNOLOGY</source>
          ,
          <year>2006</year>
          . [Online]. Available: http://www.ebook.de/de/product/5834373/ handbook of constraint programming.
          <source>html</source>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>C.</given-names>
            <surname>Prud</surname>
          </string-name>
          <article-title>'homme</article-title>
          , J.-G. Fages, and
          <string-name>
            <given-names>X.</given-names>
            <surname>Lorca</surname>
          </string-name>
          , Choco Documentation,
          <string-name>
            <surname>TASC</surname>
          </string-name>
          , INRIA Rennes,
          <source>LINA CNRS UMR 6241</source>
          ,
          <string-name>
            <surname>COSLING</surname>
            <given-names>S.A.S.</given-names>
          </string-name>
          ,
          <year>2016</year>
          . [Online]. Available: http://www.choco-solver.org
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>N.</given-names>
            <surname>Beldiceanu</surname>
          </string-name>
          , M. Carlsson, and
          <string-name>
            <given-names>J.-X.</given-names>
            <surname>Rampo</surname>
          </string-name>
          , “Global Constraint Catalog,” online, SICS,
          <source>Technical Report T2012:03</source>
          ,
          <string-name>
            <surname>Feb</surname>
          </string-name>
          .
          <year>2014</year>
          , iSSN:
          <fpage>1100</fpage>
          -
          <lpage>3154</lpage>
          . [Online]. Available: http://www.emn.fr/z-info/sdemasse/ gccat/
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>J.-C.</surname>
          </string-name>
          <article-title>Re´gin, “A filtering algorithm for constraints of difference in csps</article-title>
          ,”
          <source>in Proceedings of the Twelfth National Conference on Artificial Intelligence</source>
          (Vol.
          <article-title>1), ser</article-title>
          . AAAI '
          <fpage>94</fpage>
          . Menlo Park, CA, USA: American Association for Artificial Intelligence,
          <year>1994</year>
          , pp.
          <fpage>362</fpage>
          -
          <lpage>367</lpage>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <volume>199288</volume>
          .
          <fpage>178024</fpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>