Foundations of Constraint Satisfaction
Abstract:
Constraint programming is a technology for declarative description and solving of hard combinatorial problems. It
represents one of the closest approaches to the Holy Grail of automated problem solving: the user states the constraints
over the problem variables and the system finds a valuation of the variables satisfying the constraints. The course gives a
broad and deep survey of the major constraint satisfaction techniques.
First, the notion of a constraint is explained and some examples of practical applications of constraint technology
are given. Then we survey the basic search algorithms for solving constraints; both local search and depth-first search
methods are presented. The algorithms are explained in an incremental nature showing how the more advanced
algorithms are built up on improvements of the simpler algorithms. In the next part we concentrate on the core of
constraint satisfaction technology - consistency techniques. We explain the main consistency levels like arc and path
consistency and we present several algorithms how to achieve them. We also describe how the consistency techniques
reduce the search space in the depth-first search and we show how to solve the problems where all the constraints cannot
be satisfied together - so called over-constrained problems.
Outline:
1. Introduction and basic terminology. Local search techniques (hill-climbing, min-conflicts, random-walk, tabu-search).
2. Systematic search techniques: chronological backtracking, backjumping, backmarking, discrepancy search.
3. Introduction to consistency techniques: node consistency, arc consistency (AC1, AC3, AC4), directional arc
consistency.
4. Path consistency (PC1, PC2). Generic consistency notions: k-consistency, (i,j)-consistency, singleton consistency.
5. Integration of consistency with search, value/variable ordering. Optimisation and over-constrained problems. Final
notes.