Module 1: From Backtracking Search to the Constraint Programming Paradigm
Starting from a custom backtracking search algorithm for the N-Queens Problem, we will make the approach gradually more generic until the introduction of a purely declarative approach and the design a first tiny CP library.
Module 2: Introduction to Mini-CP
The design and internals (variables, domains, state restoration, etc.) of Mini-CP, the constraint programming library that is used along the course and that is extended in each assignment.
Module 3: The sum and element global constraints
Two constraints that occur for solving most of the CP problems. Design of their filtering algorithms, study of their properties and implementation.
Module 4: The extensional table constraint
Introduction to the table constraint, the most generic one can imagine in CP. Study of some of its application, and filtering algorithms for this constraint.
Module 5: The alldifferent constraint
Study of the alldifferent global constraint as an illustration of an elegant reuse of well-known graph algorithms embedded into the filtering of constraints.
Module 6: The Circuit constraint and Vehicle Routing Problems (VRP)
Introduction to solving VRP with CP using the successor model and the circuit global constraint. Introduction to solving optimization problems with CP and Large Neighborhood search.
Module 7: Cumulative Scheduling Problems
Introduction to Scheduling with CP and the cumulative constraint, instrumental for scheduling non preemptive tasks with resource requirements.
Module 8: Disjunctive Scheduling Problems
A specific case of scheduling problems is the one of disjunctive resource where activities cannot overlap in time. We will study specific filtering and search techniques and apply it to solve the well kownknown job-shop problem.
Module 9: Blackbox Search
Introduction to efficient search heuristics independent of the problem to solve. All these searches are declinations of the well-known first-fail principle.
Module 10: Modeling
Introduction to advanced modeling techniques to boost the solving of your problems, including redundant constraints, and symmetry breaking.