Constraint Programming (CP) is a programming technique that tries to solve the problems by using partial information obtained from constraints. As it is understood from its name, it consists of computer implementation of the algorithms that are designed to solve specific type of problems. These algorithms can be implemented in a logic programming language such as PROLOG or more efficiently in a CLP language such as CHIP (Constraint Handling in Prolog) that is developed by modifying PROLOG to have extensive capabilities of solving constraints. However, this does not mean that CP cannot be implemented by using general purpose programming languages. As an example, ILOG Solver, that is used in this study, is a CP solver that consists of routines written in C++ [6].
The two major aspects of CP are:
In most of the problems that we face with, the solution requires to find out value assignments for the variables in a way that all the constraints are satisfied. Generally these problems can be represented as a Constraint Satisfaction Problem (CSP). A CSP consists of
Constraint satisfaction algorithms deal with finding values for the variables in CSP such that all the constraints are satisfied. Since in real life most of the problems can be modeled by using finite set of variables with finite domain for each variable, constraint satisfaction can be used in combinatorial problems.
The second aspect of CP is constraint solving. In constraint solving, the variables may have infinite values in their domains and the constraints are more complicated such as there may be nonlinear equalities. Constraint solving algorithms use algebraic and numeric methods instead of combinations and search algorithms that are used in CSP [4].
The following is a brief overview of concepts and techniques used in CP (for a detailed discussion see [7]).