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.

Assets

  • 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

Weaknesses

  • 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

Why OscaR-CP

  • 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