Constraint Programming (CP) in short
"CP represents one of the closest approaches computer science has yet made to the Holy Grail of programming:
the user states the problem, the computer solves it."
Eugene C. Freuder, CONSTRAINTS, April 1997
CP is a programming paradigm wherein relations between variables are stated in the form of constraints.
CP is a form of declarative programming.
The constraints used in constraint programming are of various kinds and they offer a rich modeling language.
- Declarative Models with high level constraints (allDifferent, cardinality, etc)
- Flexible Search
- Possiblity scale using Large Neighborhood Search
- Global constraints encapsulating powerful filtering algorithms
- Typical problems where CP is good: scheduling, vehicle routing, strongly constrained combinatorial problems
- Naive models are not efficient (modeling is a bit of an art)
- There is a learning curve to acquire experience with implementation of good search
- Some exact models do not scale well on large instances.
- When using Branch and Bound, bounding quality depends on the constraints where the objective is involved. Usage of appropriate global constraints is crucial
- Very crisp and elegant models using Scala (as short as with dedicated modelling languages)
- Full control on the search
- State of the art solver (raw performances comparable to the best CP solvers)
- Many global constraints with sometimes several implementations (all the most useful ones are there, if not let-us know!)
- Some unique features: LNS in few lines, multi-objective optimization, variable-objective LNS
- Reliable and well tested (nightly tested through hundreds of regression tests on a continuous integration server)
- Very reactive development team (questions or bug fix, just ask)
Some links to learn to use OscaR and CP