D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e

Programmation par contraintes
Cours 2 : Probl´mes de Satisfaction de Contraintes e CSP Odile PAPINI
ESIL Universit´ de la m´diterran´e e e e Odile.Papini@esil.univ-mrs.fr http://pages-perso.esil.univmed.fr/∼papini/

Odile PAPINI

Programmation par contraintes

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e

Plan du cours 2

1

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e

2

3

4

Odile PAPINI

Programmation par contraintes

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e

Bibliographie
Livres : K. Marriott and P. Stuckey. Programming with constraints. MIT Press 1998 F. Fages. Programming Logique par contraintes. Ellipes, 1996 K. R. Apt. Principles in Constraint Programming. Cambridge Univ Press, 2003 Supports de cours : Support de cours : Christine SOLNON universit´ Lyon e I : http ://bat710.univ-lyon1.fr/ csolnon/Site-PPC/ Roman Bartak Charles university : http ://kti.mff.cuni.cz/ bartak/constraints/
Odile PAPINI Programmation par contraintes

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e

Probl`mes de Satisfaction de Contraintes (CSP) e
D´finition e un CSP est un probl`me mod´lis´ sous forme de contraintes pos´es e e e e sur des variables prenant valeur dans un domaine u un CSP est quadruplet (X , D, C , R) o` : X = {X1 , · · · , Xn } : un ensemble de variables D = {D1 , · · · , Dn } : un ensemble de domaines,
Xi ∈ Di , 1 ≤ i ≤ n

C = {C1 , · · · , Cm } : un ensemble de contraintes, R = {R1 , · · · , Rm } : un ensemble de relations,
` chaque contrainte Cj est associ´e une relation Rj , 1 ≤ j ≤ m a e
Odile PAPINI Programmation par contraintes

X1 + X3 < X2 } R = {R1 . R3 } Les relations asoci´es aux contraintes de C : e R1 X1 0 1 X2 1 0 X1 0 Odile PAPINI R2 X3 0 1 R3 X2 1 X3 0 Programmation par contraintes X4 1 0 . X3 . X3 = X4 . D2 . D4 } avec D1 = D2 = D3 = D4 = {0. X4 } D = {D1 . R2 . 1} C = {X1 = X2 . D3 .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Probl`mes de Satisfaction de Contraintes (CSP) e Exemple X = {X1 . X2 .

crit`res de choix : e e simplicit´ d’expression e efficacit´ : taille de l’espace de recherche de solutions e Odile PAPINI Programmation par contraintes .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Mod´lisation de probl`mes en termes de CSP e e Mod´lisation d’un probl`me e e identifier les variables : les inconnues identifier les domaines de valeur de ces variables identifier les contraintes souvent plusieurs mod´lisations possibles.

pas sur la mˆme colonne.D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Mod´lisation de probl`mes en termes de CSP e e Exemple : le probl`me des 4 reines e Placer 4 reines sur ´chiquier 4 × 4 de telle sorte qu’aucune ne soit e en prise (pas sur la mˆme ligne. pas sur e e la mˆme diagonale) e X = ? D = ? C = ? Odile PAPINI Programmation par contraintes .

4}} CDA = {Xi + i = Xj + j. 3. 2. 3. 3. j ∈ {1. 4} C = {CLI . CDD } avec CLI = {Xi = Xj . 2. i = j. i = j. i = j. 4}. 2. D2 . 3. X4 } D = {D1 . 2. 4}} CDD = {Xi − i = Xj − j. CDA . j ∈ {1. i ∈ {1. 2. X3 . 2. 4}. 2. D4 } avec D1 = D2 = D3 = D4 = {1. pas sur la mˆme colonne. 3. D3 . 4}} Mod´lisation efficace e Odile PAPINI Programmation par contraintes .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Mod´lisation de probl`mes en termes de CSP e e Exemple : le probl`me des 4 reines e Placer 4 reines sur ´chiquier 4 × 4 de telle sorte qu’aucune ne soit e en prise (pas sur la mˆme ligne. 4}. 3. j ∈ {1. 3. i ∈ {1. i ∈ {1. pas sur e e la mˆme diagonale) e X = {X1 . X2 .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e R´solution d’un CSP e R´solution : affectation de valeurs aux variables de telle sorte que e toutes les contraintes soient satisfaites affectation : instanciation des variables sur les domaines affectation totale : affectation de toutes les variables affectation partielle : affectation de certaines variables affectation consistante : affectation qui ne viole aucune contrainte affectation inconsistante : affectation qui viole au moins une contrainte solution : affectation totale et consistante Odile PAPINI Programmation par contraintes .

(X2 . (X3 . (X4 . (X3 . X4 } D = {D1 . 1} C = {X1 = X2 . 0)} affectation inconsistante A = {(X3 . 1)} affectation A = {(X1 . 0). 0)} affectation partielle A = {(X1 . 0). 0)} affectation totale A = {(X1 . D4 } avec D1 = D2 = D3 = D4 = {0. X2 . 0). 0). 0). (X4 . X1 + X3 < X2 } A = {(X2 . 0). D2 . 0). (X4 . 1)} affectation consistante A = {(X1 . 1)} solution Odile PAPINI Programmation par contraintes . (X2 . (X2 . 0).D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e R´solution d’un CSP e Exemple X = {X1 . (X3 . X3 = X4 . X3 . (X2 . 1). 0). D3 .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e R´solution d’un CSP e R´solution : affectation de valeurs aux variables de telle sorte que e toutes les contraintes soient satisfaites complexit´ : en g´n´ral probl`me NP-difficile e e e e solution : affectation totale et consistante On peut chercher : une solution. n’importe laquelle toutes les solutions une solution optimale ou au moins une bonne solution selon une fonction de coˆt ou d’objectif (Probl`me d’Optimisation u e de Contraintes (COP)) Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Int´rˆt des CSP ee Int´rˆt des CSP par rapport ` la programmation math´matique ee a e la repr´sentation des CSP est plus proche des probl`mes e e originaux. la formulation est plus simple les algorithmes de r´solution des CSP sont relativement e simples et sont plus rapides que ceux de la programmation en nombres entiers Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Binarisation des contraintes Les contraintes peuvent ˆtre n-aires : 2 cas particuliers e les contraintes unaires peuvent ˆtre trait´es par un pr´-traitement sur les domaines e e e les contraintes binaires si toutes les contraintes sont binaires : repr´sentation par un e graphe dont les sommets sont les variables et les arcs sont les contraintes. toute contrainte n-aire peut s’exprimer en termes de contraintes binaires Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Binarisation des contraintes toute contrainte n-aire peut s’exprimer en termes de contraintes binaires tout CSP peut se repr´senter comme un CSP binaire e un CSP binaire peut ˆtre repr´sent´ comme un graphe de e e e contraintes exemples Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Binarisation d’un CSP M´thode 1 : conservation de variables initiales e cr´ation d’une variable encapsul´e U e e e e domaine de U : produit cart´sien des variables encapsul´es application des contraintes sur les variables encapsul´es pour e r´duire le domaine e ajout d’une binaire entre la variable originale et la variable encapsul´e : Xi = posi (U) e i`me position de Xi dans U : posi (U) e Odile PAPINI Programmation par contraintes .

X2 . X3 U}. e DU = D1 × D2 × D3 ′ r´duction de domaine : DU e nouvel ensemble de containtes : C ′ Odile PAPINI Programmation par contraintes . D ′ = {D1 . D3 . X2 .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Binarisation d’un CSP M´thode 1 : exemple e X = {X1 . D3 = {5. X3 ). DU } cr´ation de la variable U = {(X1 . X2 . D2 . D2 = {3. X3 } D = {D1 . X1 < X2 } ′ CSP binaire : X ′ = {X1 . D2 . 4}. D3 } avec D1 = {1. 2}. 6} C = {X1 + X2 = X3 . tq {X1 + X2 = X3 }.

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Binarisation d’un CSP M´thode 2 : sans conservation de variables initiales e cr´ation de variables encapsul´es e e domaine : produit cart´sien des variables qu’elles encapsulent e application des contraintes sur les variables encapsul´es pour e r´duire le domaine e ajout d’une binaire entre la variable originale et la variable encapsul´e : Xi = posi (U) e i`me position de la variable encapsul´e U est la j`me position e e e de la variable encapsul´e V : posi (U) = posj (V ) e Odile PAPINI Programmation par contraintes .

V }. D2 .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Binarisation d’un CSP M´thode 2 : exemple e X = {X1 . 6} C = {X1 + X2 = X3 . X3 ). D2 = {3. X3 } D = {D1 . DV }. X2 . 4}. D3 = {5. X2 ). X2 . 2}. D3 } avec D1 = {1. C ′ cr´ation de 2 variable U = {(X1 . tq {X1 < X2 } DU = D1 × D2 × D3 et DV = D1 × D2 ′ ′ r´duction de domaine : DU et DV e nouvel ensemble de containtes : C ′ Odile PAPINI Programmation par contraintes . D ′ = {DU . tq {X1 + X2 = X3 }. X1 < X2 } ′ ′ CSP binaire : X ′ = {U. et e V = {(X1 .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e R´solution d’un CSP e hypoth`se : domaines finis e algorithmes g´n´riques de r´solution de CSP e e e algorithmes complets algorithmes incomplets Autres algorithmes pour : CSP num´riques lin´aires sur les r´els e e e CSP num´riques lin´aires sur les entiers e e CSP num´riques non lin´aires e e Odile PAPINI Programmation par contraintes .

de chemin (PC) · · · techniques de propagation de contraintes forward checking (FC) look ahead (LH) techniques bas´es sur l’ordre des variables et des valeurs e heuristiques Odile PAPINI Programmation par contraintes . d’arc (AC).D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithmes de r´solution d’un CSP e algorithmes g´n´riques de r´solution de CSP e e e recherche syst´matique e genere et teste (GET) retour arri`re (SRA) ou (backtracking (BT)) e techniques de filtrage consistance de noeud (NC).

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Approche G´n`re Et Teste e e principe Recherche syst´matique d’une solution e g´n´ration d’un affectation totale e e test de la satisfaction de toutes les contraintes Odile PAPINI Programmation par contraintes .

Vi )}.C)) = VRAI alors retourner VRAI finsi fin pour retourner FAUX finsi fin Odile PAPINI Programmation par contraintes .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme G´n`re et Teste : GET e e fonction GET(A.C)) : bool´en e d´but e si toutes les variables de X sont affect´es alors e si A est consistante alors retourner VRAI sinon retourner FAUX finsi sinon choisir une variable Xi de X qui n’est pas encore affect´e e pour toute valeur Vi appartenant ` Di faire a si GET(A ∪ {(Xi . (X.(X.D.D.

R2 . X2 . R3 } Recherche de solutions de ce CSP par l’algorithme GET Odile PAPINI Programmation par contraintes . 1} C = {X1 = X2 . D4 } avec D1 = D2 = D3 = D4 = {0. X4 } D = {D1 .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme G´n`re Et Teste : GET e e exemple X = {X1 . X3 . D3 . X1 + X3 < X2 } R = {R1 . X3 = X4 . D2 .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme G´n`re Et Teste : GET e e inconvenients sur l’espace de recherche ensemble des affectations compl`tes e inconsistance d´couverte au dernier moment e croissance exponentielle de la taille de l’espace de recherche am´liorations e ne d´velopper que des affectations partielles consistantes e r´duire la taille des domaines e Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Approche Simple retour arri`re e principe Construction d’une solution g´n´ration d’un affectation partielle consistante e e extension de l’affectation partielle avec l’affection d’une nouvelle variable si cette extension est inconsistante on retourne en arri`re on e modifie l’affectation de la nouvelle variable Odile PAPINI Programmation par contraintes .

(X.C)) = VRAI alors retourner VRAI finsi fin pour retourner FAUX finsi fin Odile PAPINI Programmation par contraintes .Vi )}.D.(X.D.C)) : bool´en e d´but e si A n’est pas consistante alors retourner alors retourner FAUX finsi si toutes les variables de X sont affect´es alors e retourner VRAI sinon choisir une variable Xi de X qui n’est pas encore affect´e e pour toute valeur Vi appartenant ` Di faire a si SRA(A ∪ {(Xi .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Simple Retour Arri`re : SRA e fonction SRA(A.

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Simple Retour Arri`re : SRA e exemple du probl`me des 4 reines e Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Algorithme Simple Retour Arri`re : SRA e avantages r´duction de l’espace de recherche e am´liore GET en espace et en temps d’ex´cution e e inconvenients pas d’identification des cause de conflit redondance d´tection tardive des conflits e alternatives : backjumping. backmarking Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de filtrage principe filtrage des domaines dans la construction d’une affectation partielle consistante : filtrage ` priori a filtrer le domaine des variables en enlevant les valeurs localement inconsistantes filtrage ` diff´rents niveaux : noeud. · · · a e Odile PAPINI Programmation par contraintes . arc. chemin.

principe filtrage des domaines pour chaque variable Xi . v )} viole les contraintes unaires. C . D. on enl`ve de Di toute valeur v telle e que l’affectation partielle {(Xi . v )} satisfait toutes les contraintes unaires de C .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de filtrage consistance de noeud Un CSP (X . Odile PAPINI Programmation par contraintes . et pour toute valeur v de Di . l’affectation partielle {(Xi . R) est consistant de noeud si pour toute variable Xi de X .

vi ). vi ). vj )} satisfasse toutes les contraintes binaires de C . (Xj . Xj ) de X . il existe une valeur vj appartenant Dj telle que l’affectation partielle {(Xi .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de filtrage consistance d’arc Un CSP (X . l’affectation partielle {(Xi . vj )} viole les contraintes binaires. (Xj . et pour toute valeur vi de Di . on enl`ve de Di toute valeur vi telle e quil existe une variable Xj pour laquelle. pour toute valeur vj de Dj . C . D. principe filtrage des domaines pour chaque variable Xi . R) est consistant d’arc si tout couple de variables (Xi . Odile PAPINI Programmation par contraintes .

supprime les e valeurs qui violent les contraintes binaires AC1 : r´applique REVISE chaque fois qu’un domaine est e chang´ e AC3 : ne r´applique REVISE que le nombre de fois n´cessaires e e Odile PAPINI Programmation par contraintes .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de filtrage : consistance d’arc plusieurs algorithmes AC ou REVISE : r´duit la taille des domaines.

Xj ).D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Consistance D’Arc : AC fonction REVISE((Xi .D.C)) : bool´en e d´but e DELETE ← FAUX pour tous les Vi de Di faire si il n’y a pas de Vj dans Dj qui satisfasse les contraintes binaires entre Xi et Xj alors supprimer Vi de Di DELETE ← VRAI finsi fin pour retourner DELETE fin Odile PAPINI Programmation par contraintes .(X.

C)) d´but e Q ← {(Xi . Xj ) /il existe une contrainte entre Xi et Xj } rpter R ← FALSE pour tous les (Xi .C))) fin pour jusqu’ non R retourner (X.D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Consistance D’Arc : AC1 fonction AC1((X.D.D.C) fin Odile PAPINI Programmation par contraintes .D. Xj ) de Q faire R ← (R ou REVISE((Xi .(X. Xj ).

Xj ). Xj ) si REVISE((Xi . Xi ) /il existe une contrainte entre Xk et Xi et Xk = Xi et Xk = Xj } finsi fin tantque retourner (X.D.C)) d´but e Q ← {(Xi .D.D.C)) alors Q ← Q ∪{(Xk .(X. Xj ) /il existe une contrainte entre Xi et Xj } tantque Q = ∅ faire Q ← Q \(Xi .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Consistance D’Arc : AC3 fonction AC3((X.C) fin Odile PAPINI Programmation par contraintes .

··· k-consistance : consid´rer les valeurs d’une variable par e rapport ` la combinaison de k − 1 valeurs des autres variables. vj )} est consistant. si pour toute affectation partielle {(Xi . vi ). (Xj . a Odile PAPINI Programmation par contraintes . (Xk .consistance : consistance d’arc 3-consistance : consistance de chemin un ensemble {Xi . (Xj .consistance : consistance de noeud 2.D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de filtrage : consistance locale plusieurs notions 1. vk )} est consistant et {(Xk . il existe une valeur vk appartenant Dk telle que {(Xi . vk ). vj )}. vi ). Xj } est consistant de chemin par rapport ` a la variable Xk de X .

e filtrer le domaine de la variable Xj non encore affect`es dont e les valeurs violent les contraintes contenant Xi et Xj . Odile PAPINI Programmation par contraintes . Look ahead : Apr`s chaque affectation d’une varible Xi .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de propagation de contraintes principe Forward checking et Look-ahead Combinaison du filtrage et du retour-arri`re : filtrage au cours e de la r´solution e Forward checking : Apr`s chaque affectation d’une varible Xi . filtrer e le domaine de toutes les variable non encore affect`es dont les e valeurs violent les contraintes contenant Xi et ces variables.

v )} satisfait toutes les contraintes unaires de C . Odile PAPINI Programmation par contraintes . R) est consistant de noeud si pour toute variable Xi de X . v )} est inconsistante. on enl`ve de Di e e toute valeur v telle que A ∪ {(Xi .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de propagation de contraintes consistance de noeud Un CSP (X . principe : anticipation + consistance de noeud anticipation d’une ´tape l’affectation e pour chaque variable Xi non affect´e dans A. et pour toute valeur v de Di . l’affectation partielle {(Xi . D. C .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme anticipation : forward checking fonction FC(A. Vi ).D. Vj )} est consistante } ee si Dj′ est vide alors retourner FAUX finsi fin pour si FC(A ∪{(Xi .C)) : bool´en e d´but e si toutes les variables de X sont affect´es alors e retourner VRAI sinon choisir une variable Xi de X qui n’est pas encore affect´e e pour toute valeur Vi appartenant ` Di faire a pour toute variable Xj de X qui n’est pas encore affect´e faire e Dj′ ← {Vj ´l´ment de Dj | A ∪{(Xi .C))= VRAI alors retourner VRAI finsi fin pour retourner FAUX finsi fin Odile PAPINI Programmation par contraintes .D’. (Xj .(X.(X. Vi )}.

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Anticipation : FC Odile PAPINI Programmation par contraintes .

Odile PAPINI Programmation par contraintes . et pour toute valeur vi de Di . Xj ) de X . C .D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Techniques de propagation de contraintes consistance d’arc Un CSP (X . principe : anticipation + consistance d’arc anticipation de deux ´tapes l’affectation e pour chaque variable Xi non affect´e dans A. vi ). vj )} est inconsistante. (Xj . (Xj . D. R) est consistant d’arc si tout couple de variables (Xi . pour toute valeur vj de Dj . on enl`ve de Di e e toute valeur vi telle quil existe une variable Xj non affect´e e pour laquelle. vi ). l’affectation A ∪ {(Xi . il existe une valeur vj appartenant Dj telle que l’affectation partielle {(Xi . vj )} satisfasse toutes les contraintes binaires de C .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Algorithme Look ahead : LH Odile PAPINI Programmation par contraintes .

D´finition d’un CSP e Mod´lisation en termes de CSP e R´solution d’un CSP e Algorithmes de r´solution e Heuristiques ordre des variables statique dynamique ordre des valeurs Odile PAPINI Programmation par contraintes .

Sign up to vote on this title
UsefulNot useful