Professional Documents
Culture Documents
"Constraint programming 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."
(La programmation par contraintes représente une des avancées que l'informatique ait jamais
réalisée qui se rapproche le plus du Saint Graal de la programmation : l'utilisateur définit le
problème, l'ordinateur le résout.)
Eugene C. Freuder
Avertissement : Ce cours est destiné aux étudiants de la e-miage, une formation informatique "à
distance". Il est découpé en 7 sessions de cours, chaque session étant prévue pour durer
approximativement 1 heure.
La résolution de CSP est généralement combinatoire dans le sens où il faut envisager un très grand
nombre de combinaisons avant d'en trouver une qui satisfasse toutes les contraintes (... parfois même, le
nombre de combinaisons est infini...). Bien souvent, la puissance de calcul des ordinateurs ne suffit pas
pour examiner toutes les combinaisons possibles en un temps acceptable, et il est nécessaire d'introduire
des "raisonnements" et des "heuristiques" permettant de réduire la combinatoire et de guider la recherche
vers les bonnes combinaisons. En ce sens, la résolution pratique de CSPs fait appel à des techniques
issues traditionnellement de "l'intelligence artificielle".
Ces algorithmes permettant de résoudre des CSPs sont appelés des "solveurs" de contraintes. Certains de
ces solveurs ont été intégrés dans des langages de programmation, définissant ainsi un nouveau
"paradigme" de programmation appelé "programmation par contraintes" : pour résoudre un CSP avec un
langage de programmation par contraintes, il suffit de spécifier les contraintes, leur résolution étant prise
en charge automatiquement (sans avoir besoin de le programmer) par les solveurs de contraintes intégrés
au langage.
Pour en savoir plus sur les problèmes de satisfaction de contraintes et la programmation par contraintes :
quelques liens
quelques livres
Sommaire du cours :
Session 1 - Contraintes et Problèmes de Satisfaction de Contrainte.
Présentation de la session
1 - L'algorithme "génère et teste"
2 - Critique de "génère et teste" et notion d'espace de recherche d'un CSP
3 - L'algorithme "simple retour-arrière"
4 - L'algorithme "anticipation"
5 - Intégration d'heuristiques
Présentation de la session
1 - Description de CSPs binaires en Prolog
2 - Programmation de l'algorithme "génère et teste" en Prolog
3 - Programmation de l'algorithme "simple retour-arrière en Prolog"
4 - Programmation de l'algorithme "anticipation/noeud" en Prolog
5 - Intégration de l'heuristique "échec d'abord"
6 - Comparaison expérimentale des quatre solveurs
Présentation du TP
Exercice 1 : Retour de monnaie
Exercice 2 : Coloriage de cartes
Exercice 3 : Sel et moutarde
Exercice 4 : Send more money
Exercice 5 : Le zèbre