Cours 4 – Résolution de problèmes de satisfaction de contraintes (CSP) Master IAD – RP (M1) – Patrice Perny LIP6 – Université Paris 6 Filtrage Traitement de contraintes spécifiques Plan 1 Filtrage et algorithmes 2 Traitement de contraintes spécifiques 2 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Procedure AC1 Procedure AC1 C ← {(xi , xj ), i 6= j liées par une contrainte} répéter modification ← false faire pour tout (xi , xj ) ∈ C modification ← revise(xi , xj )∨modification fait jusqu’à not(modification) Procedure revise(xi , xj ) modification ← false faire pour chaque v ∈ Di si @v 0 ∈ Dj | {xi → v , xj → v 0 } est consistante alors faire Di ← Di \ {v } modification ← vrai fait fait retourner modification 3 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC AC3 Limite de AC1 : on répète l’application sur tous les couples de variables dans les deux sens mais à toute réduction de domaine on doit refaire une passe complète. Idée de AC3 : utiliser une file L pour éviter l’application inutilement répétée de revise. Procedure AC3 L ← {(xi , xj ), i 6= j liées par une contrainte} tant que L 6= ∅ choisir et supprimer dans L un couple (xi , xj ) si revise(xi , xj ) alors L ← L ∪ {(xk , xi ) / ∃ contrainte liant xk et xi } fsi ftq 4 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Limite du filtrage a priori Procédure qui peut être couteuse en calculs et qui ne garantit pas a priori de pouvoir réduire les domaines et de simplifier la résolution. Exemple : X = (x1 , . . . , xn ), D1 = D2 = . . . = Dn = {1, 2, . . . , n − 1}, C = all-diff(x1 , . . . , xn ), i.e. (∀i, j, i 6= j ⇒ xi 6= xj ) Idée : Utiliser le filtrage en cours de résolution plutôt qu’à priori. 5 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Ordre et heuristiques (1) objectif : réduire la taille de l’espace exploré moyen : contrôle de l’ordre des opérations de choix de variables et d’instances outils : heuristiques visant à faire apparaı̂tre les echecs le plus tôt possible Ordre d’instanciation des variables en statique : cardinalité max : variable liée (par des contraintes) au plus gd nb de variables déjà instanciées domaine min : variable de domaine de cardinalité minimale degré max : variable apparaissant dans le plus grand nombre de contraintes en dynamique : domaine min après réduction des domaines pour garantir une condition de consistance. 6 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Ordre et heuristique (2) Ordre d’instanciation des valeurs en statique ou dynamique : dépendant du domaine guidé par une fonction d’évaluation si le CSP est valué Ordre de vérification des contraintes priorité aux contraintes les moins satisfiables 7 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Filtrage en cours de résolution Forward Checking (FC) Après chaque instanciation, on réduit par filtrage les domaines des variables directement liées par une contrainte à la variable que l’on vient d’instancier Exemple : simuler sur le problème des 4 dames 8 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Procédure de Forward Checking V : ens. des vars à instancier ; i : instanciation courante Procedure forward-checking(V, i) si V = ∅ alors i est une solution sinon choisir xk ∈ V faire pour tout v ∈ Dk sauvegarde(V \ {xk }) si check-forward(xk , v , V ) alors forward-checking(V \ {xk }, i ∪ {xk → v }) fsi restaurationV \ {xk } fait fsi 9 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC La procédure check-forward Procedure check-forward(xk , v , V ) consistant ← true pour chaque xj ∈ V \ {xk } et tant que consistant faire pour chaque v 0 ∈ Dj si {xk → v , xj → v 0 } non-consistant alors Dj ← Dj \ {v 0 } fsi fait si Dj = ∅ alors consistant ← false retourner consistant 10 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Renforcer le filtrage Full Look-Ahead (FLA) Après chaque instanciation, réaliser une arc-cohérence complète sur les variables non-instanciées + réduit les domaines encore mieux que le FC - beaucoup plus cher en calculs Exemple : simuler sur le problème des 4 dames Exemple : comparer FC et FLA sur le problèmes suivant : X = {x, y , z} et Dx = Dy = Dz = {1, 2}, C = (x 6= y , y 6= z, x 6= z). 11 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC Améliorer les retours-arrière Conflict BackJumping (CBJ) Calculer, lors de charque retour arrière, un ens. de variables dites “en conflit” dont les valeurs prises dans l’instanciation courante i suffisent à expliquer le retour arrière. permet de reconsidérer immédiatement la valeur la plus basse dans l’ordre d’instanciation Exemple : comparer FC et FLA sur le problèmes suivant : X = {x, y , z} et Dx = {1, 2, 3}, Dy = Dz = {1, 2}, C = (x 6= y , y 6= z, x = z) en commençant par x → 1. 12 / 27 Filtrage Traitement de contraintes spécifiques Procédures de filtrage Sophistication de l’algorithme RAC CBJ CBJ fait appel à la fonction consistante qui reçoit une instanciation et retourne l’ens des variables de la contrainte violée si i est inconsistante. Procedure CBJ(V , i) si V = ∅ alors i est solution, retourner ∅ sinon choisir xk ∈ V , conflit ← ∅, nonBJ ← true faire pour chaque v ∈ Dk et tant que nonBJ conflit-local ← consistante(i ∪ {xk → v }) si conflit-local = ∅ alors conflit-fils ← CBJ(V \ {xk }, i ∪ {xk → v }) si xk ∈ conflit-fils alors conflit ← conflit ∪ conflit-fils sinon conflit ← conflit-fils ; nonBJ ← false fsi sinon conflit ← conflit ∪ conflit-local fait retourner conflit fsi 13 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Contraintes all-diff se pose dans beaucoup de problèmes, e.g. sudoku, carrés magiques une contrainte all-diff(x1 , . . . , xn ) 6= n(n − 1)/2 contraintes binaires d’inégalité Exemple : all-diff(X , Y , Z ) avec DX = {1, 2}, DY = {1, 2}, DZ = {1, 2} On peut calculer : nv : nb de variables non-instanciées R : l’ensemble des valeurs restantes dans les domaine des variables non-instanciées Si nv > |R| alors il n’y a pas de solution Dans l’exemple nv = 3 et |R| = 2 14 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires traitement de alldiff (1) c : contraite all-diff Procedure all-diff-consist(c, D) tant que ∃v ∈ V tel que Dv = {d} pour un d quelconque V ← V \ {v } pour tout v 0 ∈ V faire Dv 0 ← Dv 0 \ {v } ftq nv ← |V | R←∅ faire R ← R ∪ Dv pour tout v ∈ V si nv > |R| alors retourner false fsi 15 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires traitement de alldiff (2) Limite de l’algorithme précédent : Exemple : all-diff(X , Y , Z , T ) avec DX = {1, 2}, DY = {1, 2}, DZ = {1, 2}, DT = {2, 3, 4, 5} nv = 4 et |R| = 5 solution ? non... Pour faire mieux : 1 calculer le couplage maximal dans un graphe biparti (e.g. par un algorithme de flot) 2 si cmax est la valeur du couplage maximal (flot max) alors pas de solution dès que nv > cmax 16 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Exemples préliminaires Exemple : x = 3y + 5z avec Dx = {2, 3, 4, 5, 6, 7}, Dy = {0, 1, 2}, Dz = {−1, 0, 1, 2} tester l’arc consitance revient à chercher à résoudre : 3y + 5z = 2, 3y + 5z = 3 . . . x = 3y + 10 et voir si toutes ces équations sont solubles... Ici le filtrage donnerait : Dx0 = {3, 5, 6}, Dy0 = {0, 1, 2}, Dz0 = {0, 1} les tests deviennent prohibitifs dans l’exemple suivant : Exemple : 12x + 107y − 17z + 5t = 2 avec pour domaine des variables {0, 1, . . . , 1000} 17 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires CSP arithmétique Définition Un CSP arithmétique est un CSP dont chaque variable a un domaine fini d’entiers et dont les contraintes sont des contraintes arithmétiques Exemple : sytemes d’équation linéaires en nb entiers Exemple : problème des n dames Définition Un intervalle [l..u] est l’ensemble d’entiers {l, l + 1, . . . , u} si l ≤ u et l’ensemble vide sinon. Pour tout domaine Dx d’une variable x, on note min(Dx ) et max(Dx ) ses éléments minimaux et maximaux respectivement. 18 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Consistance de bornes Définition Dans un CSP arithmétique avec des variables xi de domaines Di = [li , ui ] une contrainte c = (v , r ) vérifie la consistante de bornes par rapport à une variable xi ∈ v si et seulement si : ∃(b1 , . . . , bi−1 , bi+1 , . . . , bn ) ∈ D1 × . . . × Dn , r (b1 , . . . , bi−1 , li , bi+1 , . . . , bn ) ∃(a1 , . . . , ai−1 , ai+1 , . . . , an ) ∈ D1 × . . . × Dn , r (a1 , . . . , ai−1 , ui , ai+1 , . . . , an ) Définition La contrainte c = (v , r ) est dite consistante de bornes si et seulement si elle est consistante aux bornes par rapport à toutes les variables de v . 19 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Consistance de bornes pour un CSP Définition Un CSP vérifie la consistance de bornes si et seulement si toutes les contraintes qui le composent sont consistantes de borne. Exemple : Dx = [2..7], Dy = [0..2], Dz = [−1..2] avec x − 3y = 5z ne vérifie pas la consistance de bornes. Exemple : Dx = [2..7], Dy = [0..2], Dz = [0..1] avec x − 3y = 5z vérifie la consistance de bornes. on peut rétablir la consistance par réduction des domaines. 20 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Cas de la contrainte x = y + z x =y +z y =x −z z =x −y x ≥ min(Dy ) + min(Dz ) x ≤ max(Dy ) + max(Dz ) y ≥ min(Dx ) − max(Dz ) y ≤ max(Dx ) − min(Dz ) z ≥ min(Dx ) − max(Dy ) z ≤ max(Dx ) − min(Dy ) 21 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Algorithme Procedure Consistance-bornes-add(D) xmin ← max{min(Dx ), min(Dy ) + min(Dz )} xmax ← min{max(Dx ), max(Dy ) + max(Dz )} Dx ← {d ∈ Dx : xmin ≤ d ≤ xmax } ymin ← max{min(Dy ), min(Dx ) − max(Dz )} ymax ← min{max(Dy ), max(Dx ) − min(Dz )} Dy ← {d ∈ Dy : ymin ≤ d ≤ ymax } zmin ← max{min(Dz ), min(Dx ) − max(Dy )} zmax ← min{max(Dz ), max(Dx ) − min(Dy )} Dz ← {d ∈ Dz : zmin ≤ d ≤ zmax } 22 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Exemple Exemple : Dx = [4..8], Dy = [0..3], Dz = [2..2] avec x − 3y = 5z vérifie la consistance de bornes. 2≤x ≤5 2≤y ≤6 1≤z ≤8 Dx = [4..5], Dy = [2..3], Dz = [2..2] 4≤x ≤5 2≤y ≤3 1≤z ≤3 Dx = [4..5], Dy = [2..3], Dz = [2..2] 23 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Cas de contraintes linéaires plus complexes 4w + 3p + 2c ≤ 9 ce qui induit : w≤ 9 3 2 9 4 2 9 3 − p − c, p ≤ − w − c, c ≤ − 2w − p 4 4 4 3 3 3 2 2 et donc les inégalités suivantes : 9 3 − min(Dp ) − 4 4 9 4 p ≥ − min(Dw ) − 3 3 9 c ≥ − 2 min(Dw ) − 2 w≥ 2 min(Dc ) 4 2 min(Dc ) 3 3 min(Dp ) 2 24 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Algorithme Procedure Consistance-bornes-ineq(D) wmax ← min{max(Dw ), b 94 − 34 min(Dp ) − 42 min(Dc )c} Dw ← {d ∈ Dw : d ≤ wmax } pmax ← min{max(Dp ), b 93 − 43 min(Dw ) − 23 min(Dc )c} Dp ← {d ∈ Dp : d ≤ pmax } 2 (Dw ) − 32 min(Dp )c} cmax ← min{max(Dc ), b 92 − min Dc ← {d ∈ Dc : d ≤ cmax } Exemple : Si Dw = [0..9], Dp = [0..9], Dc = [0..9] alors on a : w ≤ 49 , p ≤ 93 , c ≤ 92 et donc : Dw = [0..2], Dp = [0..3], Dc = [0..4] 25 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Contrainte x = min(y , z) On a les inégalités suivantes : y ≥ min(Dx ) z ≥ min(Dx ) x ≥ min{min(Dy ), min(Dz )} x ≤ min{max(Dy ), max(Dz )} 26 / 27 Filtrage Traitement de contraintes spécifiques contrainte all-diff contraintes arithmétiques non-binaires Contrainte x = y × z On a les inégalités suivantes : x ≥ min(Dy ) × min(Dz ) x ≤ max(Dy ) × max(Dz ) y ≥ min(Dx )/ max(Dz ) y ≤ max(Dx )/ min(Dz ) z ≥ min(Dx )/ max(Dy ) z ≤ max(Dx )/ min(Dy ) Exemple : Si Dx = [1..4], Dy = [1..2], Dz = [1..4] alors on a : x ≥ 1, x ≤ 8, y ≥ 1, y ≤ 4, z ≥ 1, z ≤ 4 ce qui laisse les domaines invariants. 27 / 27