With support from the Science Foundation Ireland
Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice. Christopher Alexander.
Constraint models contain a number of common patterns. By documenting such constraint patterns, we can share modelling expertise. Constraint solvers can also be extended to exploit such patterns. The result will be a systematic and comprehensive methodology for modelling an informal problem. Such a methodology will permit us to tackle the modelling ``bottleneck'' that hinders the uptake of constraint programming.
Patterns are an approach to design that started in architecture with the work of Christopher Alexander, which has since spread to many other areas including software engineering where they often go by the name of design patterns.
A pattern describes not only the context of a problem and its solution, but also the rationale behind the solution. Patterns are a valuable mechanism for describing best practice and good design. Patterns therefore have a useful role to play in constraint programming. There are many recurring patterns in good constraint models. These patterns cannot usually be precisely specified as there are many conflicting interactions in a complex problem. Patterns therefore seem a good vehicle for explicitly capturing the knowledge of expert modellers.
Patterns are, by their very nature, not formal objects. They are therefore usually documented in natural language (see the proposed blank pattern template for constraint programming).