Cours 4 -- Résolution de problèmes de satisfaction de contraintes

Transcription

Cours 4 -- Résolution de problèmes de satisfaction de contraintes
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

Documents pareils