My Essence'/Savile Row page
For more about the Essence' modeling language, see Modelling with ESSENCE'.
The Automated Generation of Constraint Programs contains more information about Essence' (as well as ESSENCE and CONJURE).
2009-07-25: I blogged about Tailor/Essence' (an earlier version of Essence') in New Tailor version (v0.3.2) and My Essence'/Tailor page
Essence'/Savile Row
2012: Tailor's successor Savile Row constraint modelling assistant can be used instead to solve Essence' models.
Savile Row is a modelling assistant for CP. It provides a high-level language for the user to specify their constraint problem, and automatically translates that language to the input language of a constraint solver. It is a research tool, so it is designed to be as flexible as possible. It is very easy to add new rules and program new translation pipelines.
During the translation process, Savile Row applies some reformulations to improve the model. At the moment these are quite simple, with the most interesting one being common subexpression elimination (CSE). If the same (or equivalent) expression appears in different parts of a model, CSE replaces the expression with a single variable everywhere it appears. In this way it connects together different parts of the model. This often improves constraint propagation.
Savile Row is the successor to Tailor, developed by Andrea Rendl as part of her PhD. Some of the techniques used by Savile Row (CSE in particular) were invented by Andrea, and are detailed in her PhD thesis.
The authors of Savile Row are Ian Miguel and Peter Nightingale. To report bugs, ask questions, or ask for features, contact Peter: pwn1@st-andrews.ac.uk
...
Constraint Solvers
At the moment only Minion is fully supported. Work is in progress on supporting Gecode. Also, work is in progress on supporting the Dominion constraint solver synthesizer.
Savile Row is mentioned in the paper Qualitative Modelling via Constraint Programming: Past, Present and Future by Thomas W. Kelsey, Lars Kotthoff, Christoffer A. Jefferson, Stephen A. Linton, Ian Miguel, Peter Nightingale, Ian P. Gent.
My Essence'/Savile Row models
Savile Row has a slighly different view of a proper Essence' model than Tailor so here are the adjusted Essence' models.
Here are some differences between Tailor's and Savile Row's models (found by experimentation):
- Savile Row don't accept
param .. is/be
. Use letting .. be
instead
- An .eprime model cannot both have a
given
clause and a letting
clause for the same parameter. Either move the letting
clauses to a .param file or comment out the given
.
- If a model include the
letting
clause, then the type must be stated (at least for matrices)
- Savile Row requires the stricted
allDiff
(and not alldiff
, alldifferent
), forAll
(and not forall
)
- The automatic flattening of a matrix for use in allDiff, e.g.
allDiff(x)
(or allDiff(x[..,..])
) is no longer supported. Use flatten
for this instead, e.g. allDiff(flatten(x))
.
- I'm not sure about this, but it seems that the local variables in forAll/exists loops share the (global) name space as the given/letting variables. (E.g. in calculs_d_enfer.eprime I had to change the loop variables from
i
to i2
.)
Also, see information about other constraint programming systems:
* My Constraint Programming Blog, especially the Tailor/Minion category
* Constraint Programming
* Common constraint programming problems
* My MiniZinc page
* My Zinc page
* My JaCoP page
* My JaCoP/Scala page
* My Choco page
* My Gecode/R page
* My Comet page
* My Gecode page
* My ECLiPSe page
* My SICStus Prolog page
* My Google CP Solver page
* My OscaR page
* My JSR-331 page
* My Numberjack page
* My AIMMS+CP page
* My B-Prolog page
* My Choco3 page
* My Picat page
* My z3/python page
* My SWI-Prolog page
Back to my homepage
Created by Hakan Kjellerstrand hakank@gmail.com