Aller au contenu

Utilisateur:PierreSelim/PPC

Une page de Wikipédia, l'encyclopédie libre.

La programmation par contraintes (PPC, ou CP pour Constraint Programming en anglais) est un paradigme de programmation apparu dans les années 80 [1] permettant de résoudre des problèmes combinatoires de grandes tailles tels que les problèmes de planification et d'ordonnancement[2]. La programmation par contraintes sépare la partie modélisation à l'aide de problème de satisfaction de contraintes, de la partie résolution dont la particularité réside dans l'utilisation active des contraintes du problème pour réduire la taille de l'espace des solutions à parcourir (on parle de propagation de contraintes).

« 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. »

— E. Freuder

Dans le cadre de la PPC, les problèmes sont modélisés sous à l'aide de variables de décision et de contraintes, où une contrainte est une relation entre une ou plusieurs variables qui limite les valeurs que peuvent prendre simultanément chacune des variables liées par la contrainte. Les algorithmes de recherche de solution, en PPC, s'appuient généralement sur la propagation de contraintes, pour réduire le nombre de solutions candidates à explorer, ainsi que sur une recherche systématique parmi les différentes affectation possible de chacune des variables. De tels algorithmes garantissent de trouver une solution, quand elle existe, et permettent de prouver qu'il n'existe pas de solution à un CSP si ils n'ont pas trouvé de solutions à la fin de la recherche exhaustive.

Problème de satisfaction de contraintes sur les domaines finis[modifier | modifier le code]

Une contrainte est une relation entre plusieurs varaibles qui limitent l'ensemble des valeurs que peuvent prendre ces variables simultanément.

Définition — Un problème de satisfaction de contraintes sur des domaines finis (ou CSP) est défini par un triplet où:

  • est l'ensemble de variables du problème;
  • est l'ensemble des domaines des variables, c'est-à-dire que pour tout on a ;
  • est un ensemble de contraintes. Une contrainte est définie par l'ensemble des variables sur lequel elle porte et la relation qui définie l'ensemble des valeurs que peuvent prendre simultéanément les variables de :

On appelle affectation, le fait d'associer une valeur de son domaine à une variable. Dans le cadre de la résolution de problème de satisfaction de contraintes, on parle d'affectation partielle lorsque l'on affecte un sous-ensemble de l'ensemble des variables du problème, et d'affectation totale lorsque l'on affecte toutes les variables du problème.

Définition —  Une affectation d'un CSP est définie par le couple où:

  • est un sous-ensemble de variables;
  • est le tuple des valeurs prises par les variables affectées.

On dit qu'une affectation est partielle lorsque l'ensemble de variables affectées est différent de l'ensemble des variables du problème, sinon on parle d'affectation totale.

Propriété — Soit une affectation (partielle ou totale) d'un CSP , et une contrainte de tel que , l'affectation satisfait la contrainte si et seulement si l'ensemble des valeurs des variables sur lesquelles porte la contrainte appartient à .

Définition — Une solution d'un CSP est une affectation totale qui satisfait l'ensemble des contraintes.

Notes et références[modifier | modifier le code]

  1. Mackworth 77, Haralick 80
  2. Roman Bartak, A Guide to Constraint Programming, 1998