Vous êtes sur la page 1sur 142

Satisfaction et Optimisation de

Contraintes
Lakhdar SAÏS
CRIL - Université d’Artois, Lens
Bureau : C307
sais@cril.univ-artois.fr
http://www.cril.univ-artois.fr/~sais
Plan
 Introduction
 SAT(isfiabilité) propositionnel
 Problème SAT : définitions de base
 Les classes polynomiales
 Algorithmes de résolution
 Résolution
 Énumération, Simplifications, Heuristiques,Traitement des échecs
 Recherche locale (GSAT, Taboo,…)
 Méthodes hybrides
 Instances de SAT
 Problèmes structurés
 problèmes aléatoires - phénomène de seuil
 problèmes réels
 Structures & résolution
 Extensions
 Directions de recherche
Plan (suite)
 CSP (Problème de satisfaction de Contraintes)
 représentation de problèmes par des contraintes
 Les CSP : définitions de base
 Consistances partielles, filtrages et propagations de contraintes
 Techniques de résolution
 Graphes de contraintes, consistance et méthodes de décomposition
 Extensions
 Directions de recherche
 Autres techniques
 algorithmes génétiques
 ATMS
 Applications
 Conclusion & perspectives
Références
Web
SAT :
 SATLIVE : http://www.satlive.org
 SatEx : http://www.satex.org
 SATLIB : http://www.satlib.org
CSP :
 Constraints archives : http://www.cs.unh.edu/ccc/archive/
 CSPLIB : http://www.csplib.org
Conférences
IJCAI, AAAI, CP, SAT, ICLP, JNPC-JFPLC,…
Livres & articles de synthèse
 Foundation of constraint satisfaction problems, Edward Tsang
 Jun Gu etal. Algorithms for Satisfiability (SAT) Problem: A Survey
Introduction & Motivation
Intelligence artificielle

représentation des connaissances raisonnements

inférence classique inférence non monotone

logique SAT

PL CSP

PLC CP

réseaux de contraintes
Recherche opérationnelle

applications
Problème SAT : définitions de base
Notations & définitions
 Une formule booléenne :
 , T sont des formules
 une variable (atome) propositionnelle A 1, A2, A3, … est une formule
 si 1 et 2 sont des formules, alors 1, (1  2), (1 2), (12), (1 2
)
sont des formules
 Littéral : une variable propositionnelle A i (littéral positif) ou sa négation
Ai (littéral négatif)
 Atomes() : {A1, A2, A3, …An} apparaissant dans 
 Une formule booléenne peut être représenté par un arbre ou un DAG
(graphe orienté acyclique)
Notations & définitions
 Une interprétation complète I de  :
I : Atomes() {, T }

 Une interprétation partielle I de  :


I : A {, T}, A  Atomes()

 représentation d’une interprétation :,


 I peut être représentée par un ensemble de littéraux :
Ex: { I(A1) = T , I(A2) = }  {A1, A2}
 I peut être représentée par une formule booléenne :
Ex: { I(A1) = T , I(A2) = }  A1  A2
Notations & définitions
 I = (I satisfait )
 I =Ai  I(Ai) = T
 I =¬  ¬I =
 I = 1  2  I =1 et I =2
 ...
  est satisfiable ssi  I tq I = ( I est appelé modèle de )
 1 =2   I tq I =1 alors I =2
(2 est conséquence logique de 1 )
 =    I , I = ( est valide)
  est valide  ¬ est unsatisfiable
Équivalence et satisfiabilité

 1 et 2 sont équivalente ssi,  I , I =1 ssi I = 2


 1 et 2 sont équi-satisfiable ssi
I1 tq I1 = 1 ssi I2 tq I2 = 2
 1 et 2 sont équivalente
 
1 et 2 sont équi-satisfiable

 Exemple :
1  2 et (1  ¬ A3)  (2  A3), avec A3  Atomes (1  2) sont
equi-satisfiable mais pas équivalente
Complexité

 Le problème de décider de la satisfiabilité d’une formule booléenne


(SAT) est NP-complet [Cook : 71]
 Les problèmes les plus importants en logique (validité, déduction,
équivalence, …) peuvent être réduit à SAT, et sont (co)NP-complet.
(voir cours outils formels)

 Exemple (déduction logique):


1   1  ¬ est unsatisfiable
=
« Il n’existe pas » d’algorithme de complexité polynomiale!
Question importante en théorie de la complexité.
Transformation en NNF, CNF
Polarité des sous-formules
Polarité : le nombre de négations modulo 2
 Occurrences positive/negative
  apparaît positivement dans 
 si 1 apparaît positivement [négativement] dans  ,
alors 1 apparaît négativement [positivement] dans 
 si 1  2 ou 1  2 apparaît positivement [négativement] dans ,
alors 1 et 2 apparaissent positivement[négativement] dans 
 12 apparaît positivement [négativement] dans  ,

alors 1 apparaît négativement [positivement] dans  et 2 apparaît positivement


[négativement] dans 
 1 2 apparaît dans ,

alors 1 et 2 apparaissent positivement et négativement dans 


Forme Normal Négative (NNF)
  est sous forme NNF ssi  est donnée avec uniquement les connecteurs
logique  ,  et 
 toute formule peut être réduite sous forme NNF :
1) en remplaçant les  et  :
1  2  1  2
1  2  (1  2)  (1  2)
2) descendre les négations au niveau atomique :
(1  2)  1  2
(1  2)  1  2
1  1
 la réduction préserve l’équivalence,
 complexité linéaire.
Forme Normal Conjonctive (CNF)
  est sous forme CNF (clausale) ssi  est une conjonction de
disjonctions de littéraux :
L K
 ( i Aji)
i=1 ji=1
 La disjonction de littéraux  AKj iest appelé clause
i

 La forme CNF est plus facile à manipuler


j =1 (par les algorithmes) :
i
 liste de listes de littéraux

 Exemple :

 = (a  b) (b  c)  (c  a)  (a  b  c)

clause
Transformation en CNF
 Toute formule  peut être réduite à CNF() :
1. réduire en NNF;
2. Appliquer récursivement les lois de DeMorgan :
(1  2)  3  (1  3)  (2  3)
 Atomes(CNF()) = Atomes()
 CNF() est équivalente à 
 Si 1 est équivalente à 2, alors CNF(1) = CNF(2) modulo un ordre
 Complexité exponentielle dans le pire des cas

 Rarement utilisé en pratique.


Transformation en CNF : utilisation de
variables supplémentaire
 Toute formule  peut être réduite à CNF() :
1. réduire en NNF;
2. Appliquer récursivement les règles :
  [Ai  Aj|B]  CNF(B (Ai  Aj) )
  [Ai  Aj|B]  CNF(B (Ai  Aj) )
Ai et Aj sont des littéraux, et B une variable supplémentaire
 Atomes(CNF())  Atomes()
 CNF() est équi-satisfiable à 
 Si 1 est équivalente à 2, alors CNF(1) = CNF(2) modulo un ordre
 Complexité linéaire dans le pire des cas

 Souvent utilisé en pratique.


Transformation en CNF :
version améliorée

 Comme dans le cas précédent, en appliquant (2.) les règles ci-dessous :

  [Ai  Aj|B]  CNF(B  (Ai  Aj) ) , si Ai  Aj est positive

  [Ai  Aj|B]  CNF((Ai  Aj)  B ) , si Ai  Aj est négative

  [Ai  Aj|B]  CNF(B  (Ai  Aj) ), si Ai  Aj est positive

  [Ai  Aj|B]  CNF( (Ai  Aj)  B ), si Ai  Aj est négative

 Réduction de la taille de la formule obtenue.


Représentation arborescente d ’une
formule booléenne
[( ((a  b))  (c  d) )((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3)) ]


Parité négative
Parité positive
Parité positive
 

   

  e1 e2 e3 f1 f2 f3 g1 g2 g3

 c d

a b Parité positive et négative


Transformation en CNF : un exemple
Soit une formule  =
[( ((a  b))  (c  d) )((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3)) ]
Transformation de  en CNF :
1. ’ = NNF( ) :

 remplacer les  et  :
- [( ((a  b))  (c  d) )((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3))
- [( ( ((a  b))  (c  d) )  ( (c  d)  ((a  b)) ) )
((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3)) ]
- [( (((a  b))  (c  d) )  ((c  d)  ((a  b)) ) )
((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3)) ]
- [(( (((a  b))  (c  d) )  ((c  d)  ((a  b)) ) ) ) 
((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3)) ]
Transformation en CNF : un exemple
(suite)
 descendre les négations au niveau atomique :
’ = [ ((a  b  c  d)  ( (c  d)  (a  b) )) 
((e1  e2  e3 ) (f1  f2  f3)(g1  g2  g3)) ]

2. Appliquer les règles

[ ((a  b  c  d)  ( (c  d)  (a  b) ))  ( i (c  d) ) 


( (e1  e2  e3 )  (f1  f2  f3)  (g1  g2  g3) ) ] (j  (a  b) ) 
(k  (e1  e2  e3 )) 
(l  (f1  f2  f3)) 
[( (a  b  c  d)  ( i  j ) ) ( k  l  m )]
(m  (g1  g2  g3) )

(n  ((a  b  c  d)  ( i  j ) ) )
(n  k  l  m )
Transformation en CNF : un exemple
(suite)
(n  k  l  m ) ((n  k  l  m ) 
( i (c  d) )  ( i  c )  ( i  d) 

(j  (a  b) )  ( j  a )  ( j  b) 

(k  (e1  e2  e3 ))  (k  e1)  (k  e2)  (k  e3) 

(l  (f1  f2  f3))  (l  f1)  (l  f2)  (l  f3) 

(m  (g1  g2  g3) ) ( m  g1)  (m  g2)  (m  g3)


( n  a  b  c  d)  ( n  i  j )
(n  ((a  b  c  d)  ( i  j ) ) )
Forme CNF
Transformation en K-CNF
 K-CNF : est une formule CNF avec des clauses de k littéraux

 2-CNF est polynomiale

 K-CNF est NP-complet, k >=3

 toute formule k-SAT peut être réduite en 3-CNF :


(A1  A2  … Ak-1  Ak)

(A1  A2  B1) 
(B1  A3  B2) 

(Bk-4  Ak-2  Bk-3) 
(Bk-3  … Ak-1  Ak)
D’un exemple à représentation clausale
 Exemple : Soit un moteur d’un véhicule un hybride de moto,
vélo, et d ’auto). Le problème est pour le conducteur, de
détecter les pannes grâce à des indices.

Pannes Indices
p1 = il n’y a plus d’eau I1 = le voyant de température est rouge
p2 = il n’y a plus de huile I2 = l ’ ampèremètre de charge est
positif
p3 = la courroie est cassée I3 = le voyant de huile est rouge
p4 = le redresseur est coupé I4 = le compte tour est positif
p5 = la batterie est vide I5 = le moteur tourne
p6 = la batterie est en court circuit I6 = les phares marchent
p7 = le fusible est fondu
Utilitaires
u1 = la bobine est alimenté
u2 = les circuits secondaires sont alimentés
u3 = il y a un court circuit
D’un exemple à représentation clausale
 Si le voyant de température est rouge alors, d ’une part il n ’y a plus d ’eau ou il n ’y a plus
d ’huile ou la courroie est cassée, et d ’autre part les circuits secondaires sont alimentés.
i1  ( ( p1  p2 p3) u2)
clauses : ( i1  p1 p2 p3)  ( i1  u2)
 Le voyant d ’huile est rouge si et seulement si les circuits secondaires sont alimentés, et, il n ’y a
plus d ’huile ou le moteur ne tourne pas.
i3  u2 (p2  i5)
clauses : (i3  u2) (i3  p2  i5) (u2  p2  i3) (u2  i5  i3)
 Une batterie en court circuit est vide
p6  p5
clause : p6  p5
 si l ’ampèremètre de charge est positif et la batterie est en court circuit alors le fusible est fondu
(i2  p6)  p7
clause : (i2  p6  p7)
 ...
D’un exemple à représentation clausale
Coder en CNF les problèmes suivants:
 Puzzles Logiques :
 problème crypto-arithmétique :
coder en CNF le problème consistant à trouver une affectation des lettres dans {0..9} de
manière à satisfaire l ’addition : DONALD + GERALD = ROBERT, tout en évitant la
solution triviale où les lettres reçoivent zéro comme valeur.
 Problème des pigeons (pigeon-hole problem) :
mettre n pigeons dans n-1 pigeonniers, avec un pigeon par pigeonnier.
 Problèmes mathématiques :
 Dans toute collection de 6 personnes, on doit trouver, 3 personnes qui se connaissent ou
3 personnes qui ne se connaissent pas. (instance du théorème de Ramsey)
 …
Problème SAT : Objectifs & historique
Objectifs
 Mots clés
 Codage, Résolution, Extension, Application

 But :
 Élargir la classe des problèmes traitables en pratique

 Exhiber des restrictions (classes) polynomiales

 Améliorer les algorithmes de résolution :


 Proposer de nouveaux raffinements aux algorithmes

 Mise au point de nouvelles approches

 Évaluer les approches proposées :



complexité théorique des algorithmes
 complexité en pratique
Historique

Génération aléatoire
• Phénomène de seuil

Problèmes structurés Applications

• Les puzzles logiques • VLSI,Planification

• Le problème des pigeons • Cryptographie, ...

• Les reines, ... 1990 2003


~ 100 variables / 200 clauses ~ 10000 - 100000 variables/ 500000 clauses
Quelques applications de SAT
 Satisfaction de contraintes
 planification, emploi du temps
 raisonnement temporel (Allen 1983)
 conception et vérification de circuit (VLSI) (Larrabee 1992)
 ...
 raisonnement (déductif)

 Autres modèles de raisonnement en AI (voir cours RCR)


 ssi  est unsatisfiable
diagnostic / abduction
 raisonnement par défaut,
 révision de croyances
 ...
 Apprentissage
 Autres applications
 cryptographie
 model checking (vérification de modèles)

...
Instances de SAT
Problèmes structurés
 Puzzle logiques :
 e.g. reines, zebres, …

 Problèmes mathématiques :
 e.g. instances du théorème de Ramsey, de Schur, d ’Erdös, problèmes de quasi-
groupes,…

 Problèmes générés artificiellement :


 pigeons, formules de Tseitin,…

 Problèmes issus d ’applications réels


Exemple : problème des pigeons
 Exemple : problème des pigeons
 soit les variables propositionnelles :
p(i,j) « le pigeon i est dans le pigeonnier j », i=1..n, j=1..n-1
 Ne pas laisser un pigeon libre :
( p(1,1)  p(1,2)  … p(1,n-1) ) 
( p(2,1)  p (2,2)  … p(2,n-1) ) 

( p(n,1)  p(n,2)  … p(n,n-1) )
 mettre exactement un pigeon par pigeonnier
(p(1,1)  p(2,1) )  … (p(1,1)  p(n,1) )  (p(2,1)  p(3,1) ) …(p(2,1)
 p(n,1) )  … (p(n-1,1)  p(n,1) )

(p(1,n-1)  p(2,n-1) )  … (p(1,n-1)  p(n,n-1) )  (p(2,n-1)  p (3,n-
1) ) …(p(2,n-1)  p(n,n-1) )  … (p(n-1,n-1)  p(n,n-1) )
Problèmes aléatoires - phénomène
de seuil
 Génération aléatoire de formule k-CNF (avec V variables et C clauses)
répéter

1. Prendre uniformément k atomes parmi V

2. Négativer chaque atome avec une probabilité 0.5

3. Créer une clause avec les k littéraux résultants

Jusqu ’à (#clauses générées = C)

Fixed-clause length model


Phénomène de seuil (transition de
phase)

 Expérimentations :
 fixer k et V
 pour des valeurs croissantes de C, générer et tester la satisfiabilité
des (500, 1000, 10000, …) instances avec k, V, C
 tracer les courbes :
 pourcentages d’instances satisfiables en fonction de C/V
 moyenne du temps CPU (sur 500, 1000, …) en fonction de C/V

…
Phénomène de seuil
Transition de phase : %SAT
• En augmentant C/V, on passe de
100% d ’instances satisfiable à
50 var
100% d ’instances unsatisfiable 40 var

• pour V , la transition 20 var

Temps exec.
tend vers une loi 0/1
• Phénomène constaté sur d’autres
problèmes NP-complet

Difficulté de résolution
Pourcentage inst. sat
• En augmentant C/V, on distingue 100
trois régions : facile, difficile, facile 80 50% sat
• Le pique de difficulté se trouve au 60

point où 50% d ’instance satisfiable 40

• 20

0
2 3 4 5 6 7 8
Phénomène constaté sur d’autres
C/V
problèmes NP-complet Seuil
Intuition
 faible rapport C/V : peu de clauses (contraintes)
 beaucoup de solutions
région sous-contrainte
 facilement trouvé

 rapport C/V élevé :


 beaucoup de clauses de contraintes
 inconsistance facilement détecté région sur-contrainte

Remarque :
 pour une formule à n variables -> 2n interprétations
 une clause C élimine (est falsifié par) 2n-|c| interprétations
Zoom sur le seuil
 Redressement de la transition pour des valeurs élevé du nombre de variables

Transition de phase 3-SAT


Fraction de Formules Unsatisfiable

1.0
100
0.8 50 20
40 12
24 UNSAT
0.6 Région

0.4

SAT
0.2 région

0
3 4 5 6 7
Rapport Clauses / Variables
Statut théorique du seuil

 Challenge : trouver la valeur théorique du seuil Problème...

 Statut actuel :

 2-SAT : seuil (C/V= 1)

 3-SAT seuil entre 3.003 et 4.54


(Motwani et al. 1994; Broder and Suen 1993; Broder et al. 1992; Dubois 1990)
 k-SAT k>3 ?
Quelques définitions
Définitions (suite)
Littéral & Clause : classification

falsifié satisfaite active satisfaite

(a ¬b)(¬a b  ¬c )(a  c  d )(¬a ¬b  ¬c )

 Tc et d non affecté
I(a)=I(b)=
Définitions (suite)
Règle de clause unitaire - implications : propagation unitaire
 Une clause active est unitaire si elle a exactement un littéral non affecté
Soient  = (a  c) (b c) (¬a ¬b  ¬c),
et I une interprétation tq. I(a) = T, I(b) = T
 Une clause unitaire admet une seul option pour être satisfaite.
a  b ¬c
i.e. c doit être affecté à .
 La propagation unitaire (PU) consiste à affecter par propagation tout les littéraux
unitaires (apparaissant dans une clause unitaire) d’une formule
Définitions (suite)
Règle du littéral pure (monotone)
 une variable est dite pure dans  si ses littéraux sont soit tous positifs soit
tous négatifs
 La satisfiabilité d’une formule ne change pas par l ’affectation des littéraux
pures de manière à satisfaire toutes les clauses où il apparaissent.

 = (a  c )  (b  c )  (b  ¬d)  (¬a  ¬b  d)

 affecter c à T; si devient unsatisfiable, alors  est aussi


unsatisfiable avec c affecté à .
Définitions (suite)
Règle de Resolution/Consensus
 Résolution:
Soient deux clauses : 1 = (¬a  ), 2 = (a   ),  et  sont
des sous-clause (disjonction de littéraux)
On appelle une résolvante de 1 et 2 la clause :
res(1, 2, a) = (  )
 1   2 (  )
 Remarque :
la règle de clause unitaire est un cas particulier de la règle de résolution
(a)  (¬a  ) 
Classes polynomiales
Classes polynomiales : 2-SAT
 Une classe polynomiale est un ensemble de formules qu ’il est
possible de reconnaître et de résoudre en temps polynomiale.
 2-SAT (clauses binaires )
Exemple :
 = (a  b) (b  c)  (c   a)  (a  d)  (d  a)
a
Algorithme :  est satisfiable?
b
1. Construire Graphe() = G =(S,A) d

2. Fermeture transitive(G) = G’ = (S’,A’) 


c
3. Si ( p tq (p, p) A’ et (p, p)  A’) a
alors retourner faux Remarque :
sinon retourner vrai • (ab)  (b a)
• stabilité des clauses binaires par
adjonction d ’un littéral unitaire
Classes polynomiales : Horn-SAT
 Clauses (formule) de Horn
Une clause est dite de Horn ssi elle contient au plus un littéral positif
Exemple : règle de prolog
 (a) a.
 (a  b  c) a:- b, c.
 (a  b  c) :- a, b, c.

Algorithme :  est satisfiable? Remarque :


1. Appliquer la règle de propagation unitaire  • la PU est complète pour les
clauses de Horn
2. Si ( contient une clause vide)
alors retourner faux • les clauses de Horn sont stable
par adjonction d ’un littéral
sinon retourner vrai unitaire
Classes polynomiales : Horn-renommable
 Définitions :
 Un renommage  des variables x1, x2, …xk dans une formule CNF  consiste à

substituer toutes les occurrences des littéraux construits sur les xi par leurs
opposés.

  ( ) et  sont équi-satisfiable.
 Un renommage  est appelé Horn-renomage ssi  ( ) est une formule de
Horn.
 Une formule est dite Horn-renommable ssi elle admet un Horn-renommage.
Classes polynomiales : Horn-renommable
 Reconnaissance d’une formule Horn-renommable :
 La recherche d ’un Horn-renommage d’une formule  se réduit au

problème de la satisfiabilité d ’un ensemble de clauses binaires


(2-SAT)
Idée : associer à  la formule H() définie comme suit :

  (pi  pj )
Ck  pi, pj Ck

 (pi pj ) exprime «au plus un des littéraux de Ck peut être faux»


pi, pj Ck
Classes polynomiales : un exemple
 Exemple 1 : (formule horn renommable)
 = (a  b)  (b  c)  (c  a)  (a  b  c)

H() = (a  b)  (b  c)  (c  a)  (a  b)  (a  c)  (b  c)

H() est satisfiable   = {a, b, c} est un modèle de H()

  est un Horn- renommage de 


on obtient la formule de Horn :
(a  b)  (b  c)  (c   a)  (a  b  c)
Classes polynomiales : un exemple
 Exemple 2 :

 = (a  b  c)  (a  b)  (b  c)  (c  a)  (a  b  c)

H() = (a  b)  (a  c)  (b  c) 

(a  b)  (b  c)  (c  a)  (a  b)  (a  c)  (b  c)

H() est insatisfiable

  n ’est pas Horn-renommable


Classes polynomiales :Q-Horn
 Q-Horn (généralisation de Horn-SAT et 2-SAT)
Définition : une ensemble de clauses est dit Q-Horn si il existe une
partition des variables en deux sous-ensembles disjoints H et Q tels
que :
 aucune clause ne contient plus de deux variables de Q
 aucune clause ne contient plus d’un littéral positif de H
 aucune clause contenant un littéral positif de H ne contient un
littéral de Q.
Classes polynomiales :Q-Horn
 Représentation schématique

Clauses binaires avec


Cq Q  c Cq atomes(c)  atomes(Q), |atomes(c)| 2

Clauses quelconque
 c Cqh atomes(c)  atomes(Q) atomes(H-)
Cqh Q H-
|atomes(c)atomes(Q)| 2 et
| atomes(c) atomes(H-)| 1
Ch H Clauses de Horn
 c Ch atomes(c)  atomes(H)
 algorithme de reconnaissance en temps linéaire [J-J Hébrard]
Classes polynomiales
 Autres classes polynomiales
 Q-Horn renommable

 Formules bien imbriqués [Knuth]

 Hiérarchies de Gallo & Scutéllà, généralisée par Dallal et Etherington

 Restrictions sur le nombre d ’occurrences :

On définit r,s-SAT comme la classe des formules où les clauses ont exactement r littéraux et chaque

variable admet au plus s occurrences.

 *, s-SAT (pour tout r et s<4) est polynomiale

 3, 4-SAT est NP-complet

 toute instance r,r-SAT est satisfiable


Algorithmes de résolution
Une taxinomie des techniques de
résolution

SAT Algorithmes

Complets Incomplets

peut prouver l’insatisfiabilité Ne peut prouver l’insatisfiabilité

Résolution Recherche locale

Méthode des tableaux Recuit simulé

Procédure DPLL Recherche taboo


Algorithmes génétiques
BDDs
...
...
Algorithmes complets

• Méthodes syntaxiques : basé sur la résolution

• Méthodes sémantiques : énumératives (backtracking)


Méthodes basées sur la résolution
 Règle de résolution/consensus :
1 = (¬a  ), 2 = (a   )
r = (   )
 remarque : la résolvante r est dite tautologique (vrai) si elle contient au moins
deux littéraux opposés; sinon elle est dite fondamentale

 Règle de subsumption/sous-sommation :
si 1  2 alors 1 2 (on dit que 1 subsume 2)

 soit une formule CNF et1, 2tq. 1 subsume 2


alors  est satisfiable ssi  \ {2} est satisfiable

 Règle de fusion :
(a   ) (a    a) (cas particulier de la règle de subsumption)
Méthode de résolution
Fonction résolution ( )
tant que (  S ) faire
choisir 1 , 2  S contenant deux littéraux opposés
r = résolvante (1, 2 )
S = S  {r}
fin tant que
retourner faux

 La méthode résolution est complète pour la réfutation (si la formule


est insatisfiable alors la résolution produira la clause vide)
 la résolution + la règle de subsumption (appliquée à chaque étape)
est complète.
 soit une formule satisfiable alors après un nombre fini d’étapes, toute
nouvelle résolvante générée est subsumée par une clause de 
Procédure de Davis & Putnam [DP 60]
Procédure DP()
tant que ( etT) faire
appliquer la règle de littéraux unitaire
appliquer la règle de littéraux pures
choisir une variable p Atomes(
Soient p{c \ {p}, tq. c et p  c},
p{c\{ p} , c tq. p  c} et
 ’{c p  c, p  c}
CNFpp ’
fin tant que
si  alors retourner faux
sinon retourner vrai
Procédure de DP : un exemple

 = (a  c) (b  c)(d  c)(¬a  ¬b  ¬c) Éliminer la variable c

1 = (a  ¬a  ¬b)(b  ¬a  ¬b )(d  ¬a  ¬b )
= (d  ¬a  ¬b )  est satisfiable !
Méthode de résolution : sommaire
 exponentielle en temps et en espace
 preuve par réfutation  rôle en logique du premier ordre
 adaptée à certaines classes de problèmes
 difficulté de mise en œuvre
 de nombreuses variantes (améliorations ont été proposées )
 SL-Résolution [Kowalski-Kuehner:71]
 Directional résolution [Dechter:00]
 ...
 utilisation limitée en pratique
 des formes plus faibles sont souvent utilisées :
 générer des résolvantes de taille réduite (< k)
e.g. résolvantes binaires
Méthode des tableaux
 Recherche d ’un modèle de 
 appliquer récursivement les règles d’éliminations des
connecteurs
 si une branche contient Ai et Ai (i et i) pour un certain
i, la branche est dite fermée; sinon elle est dite ouverte
 si aucune règle ne peut être appliquée à une branche
ouverte, alors  est satisfiable
 si toute les branches sont fermées, alors  est insatisfiable
Méthode des tableaux: règle d’élimination

 1  2 (1  2) (1  2) (1  2)


1 1 1  1  2 -élimination
2 2 2 2  1

 -élimination

 1  2 (1  2)  1  2
1 2 1 2 1 2
-élimination
(1  2)
(1  2) (2  1)
Algorithme Tableau
Fonction Tableau () /*vrai si  est satisfiable; faux sinon*/
si Ai  et Ai  /* branche fermée */
alors retourner Faux
si (1  2) /* -élimination */
alors retourner Tableau ( {1, 2}\{ (1  2) } )
si ( 1) /*  -élimination */
alors retourner Tableau ( {1}\{( 1)} )
si (1  2) /* -élimination */
alors retourner Tableau ( {1}\{ (1  2) } ) ou
Tableau ( {2}\{ (1  2) } )
retourner vrai
Méthode des tableaux : exemple
  = ( (ab)  (a  b) )

( (ab)  (a  b) )
-élimination
( (ab)  (a  b) ) ( (a  b)  (ab))
-élimination -élimination

(ab) , (a  b) (a  b), (ab)


-élimination -élimination
a, (a  b) b, (a  b) a, (ab) b, (ab)
-élimination
a, a, b b, a, b a, a, b b, a, b
-élimination Toute les branches sont fermées
a, a, b b, a, b   est insatisfiable
Méthode des tableaux : sommaire

 séparation sur les disjonctions (branchement)

 opère sur des formules quelconques

 intuitive, modulaire facile à étendre

 préférée par les logiciens

 inefficace pas très utilisée par les informaticiens

 nécessite un espace polynomiale


Algorithmes complets

• Méthodes syntaxiques : basé sur la résolution

• Méthodes sémantiques : énumératives (backtracking)


Procédure de DPLL [62]
 Procédure Davis-Putnam-Logeman-Loveland [DPLL] ou [DLL]
construire récursivement un modèle de 
à chaque étape affecter une valeur à un atome
effectuer les choix déterministes (obligatoires) en premier

 Règles de DPLL :
1  (p)  2
règle littéraux unitaire
(1  2)[ p|T ]

p est pure
[ p|T ]
 règle séparation (split)
[ p|T ] [ p| ]
Procédure de DPLL [62]
Fonction DPLL (, ) /*vrai si est satisfiable; faux sinon*/
si  = T /* toute les clauses sont satisfaites */
alors retourner vrai

si  =  /* backtrak (retour arrière) */


alors retourner faux
si ( contient une clause unitaire (p) ) /* règle Unit */
alors retourner DPLL ([p|T],   p )

si ( contient un littéral pure (p) ) /* règle pure */


alors retourner DPLL ([p|T],   p )

p := choix-littéral ()/* Heuristique*/


retourner DPLL ([p|T],   p )  DPLL ([p|],   p ) /* split*/
Procédure de DPLL : un exemple
 Soit une formule CNF
 = (a  b  c)  (a  b)  (b  c)  (c  a)  (a  b  c)
 arbre binaire développé par DPLL
 avec choix des atomes dans l ’ordre lexicographique

a a
b c
c b
 
Procédure DPLL : sommaire
 Procède par énumération (affectation de valeurs aux atomes)
 retarde la séparation autant que possible
 nécessite une formule CNF en entrée (il existe des variantes pour des
formules quelconques)
 ignorée par les logiciens
 la plus efficace des techniques de résolution de SAT
 préférée par les informaticiens

 nécessite un espace polynomiale


 choix-littéral est critique pour l’efficacité !!
 de nombreuses variantes ont été proposées
DPLL : Heuristiques & optimisations
sat décider
non non
sat décider
résolu résolu
échec non déduire
non
résolu résolu
unsat backtrack échec
apprentissage
unsat backtrack

Recherche « naïve » Recherche « intelligente »


Quine DPLL [Relsat , Grasp, Sato, Zchaff …]
[CSAT, Tableau, POSIT, Satz, ..]
Prospective (look-ahead) : Rétrospective (look-back): apprendre
détecter de futures situations d ’échecs des situations d ’échecs
DPLL : améliorations
 De nombreuses améliorations ont été proposées, elle concernent généralement un des
points suivants :
 heuristiques de branchements (choix de la prochaine variable à affecter)
 heuristique de Jeroslow & wang
 heuristique UP ...
 traitements des échecs « apprentissage »
 analyse de conflit
 ajout de clauses «clause recording»
 retour arrière non chronologique
 «conflict-directed backtraking » (backjumping)
 partition du modèle « autarkness »
classique et généralisée ...
 simplifications de la formule
 effectuées sur la formule originale (pré-traitements)
 résolution restreinte, 2-simplifications, suppression de clauses bloquées,...
 effectuées en cours de résolution (traitement locaux)
 traitement par propagation unitaire
 exploitation des classes polynomiales, ...
Heuristiques de branchement
 La règle de séparation est source de non-déterminisme

Soit  une formule, et p atomes(),

 est satisfiable ssi [p|T]  [p|] est satisfiable

 Relation forte entre l’ordre d’affectation des variables et la taille de


l ’arbre de recherche !

 De nombreuses heuristiques de choix de variables ont été


proposées dans la littérature.
Heuristiques de branchement
 Une heuristique H est définie comme suit :
H : Atomes()  R

x  H(x) = f( w(x), w(x) ),

avec w(x) = poids associé à x, généralement calculé en utilisant des arguments syntaxique :
longueur des clauses, nombre d’occurrences,...

soit  = max { H(xi), xi  atomes() }

ChoixH = {xk Atomes(), H(xk) = },

la variable de branchement x* est choisie dans Choix H.

 - choix aléatoire,

- utilisation d’une autre heuristique H’ ( tie-breaker)


Exemple d’heuristiques
 Utilisation du nombre d ’occurrences des littéraux :
 w(x) = #occurrences du littéral x dans 
 w(x) = #occurrences du littéral x dans les clauses non-horn
 w(x) = #occurrences du littéral x dans les clauses binaires,...
 Heuristique MOM : choix de la variable apparaissant le plus souvent dans
les clauses les plus courts : « Maximum Occurrences in clauses of Minimal
length »
 Jeroslow & Wang : choix d’un littéral avec un poids maximum
n c
2
w(l )   w(c) , avec w(c)  n  2 , n  Atomes( )
c

lc & c 2


donne une estimation de la contribution de l à la satisfiabilité de 

2n-|c| = | {I, tq. I[c]= } |


2n = taille de l’espace de recherche
Exemple d’heuristiques
 Exemple de Hs :
 H1(x) = w(x) + w(x) [Jeroslow &Wang ]

 H2(x) = |w(x) - w(x)|

 Introduction d ’un facteur d ’équilibre des arbres

 H3(x) = w(x) + w(x) +  x min( w(x), w(x) ), =1.5 [Dubois-etal:93]

 H4(x) = w(x) + w(x)+  x w(x) x w(x),  =1024 [Freeman:96]

 - facteur
Heuristique UP :[Freeman:96, Li:97] d’équilibre
-  constante empirique
 w(x) = || - |’| , avec ’ la formule obtenue à partir [x|] par propagation unitaire, 
maximise l’effet de la propagation unitaire,
Exemple d’heuristiques
 soient w(x) = #occurrences de x dans , x1, x2  Atomes () tq.
W(x1)= 6, w(x1) = 6 et W(x2)= 8, w(x2) =4 alors
 H1(x1) = 6+6 = 12, H1(x2) = 12
 x1 ou x2 ?
 H3(x1) = 6+6+min(6,6) =18 , H3(x2) = 8+4 + min(8,4) = 16
 x1 est choisie
 H4(x1) = 6+6+36 = 48, H4(x2) = 8+4+ 32 = 44,
 x1 est choisie
 pourquoi équilibrer?
n-1 n+1
n n
2n-1
2 n
2 n
2n+1
2n + 2n = 2n+1 < 2n-1 + 2n+1 = 5/4 x 2n+1
Traitement des échecs
 Idée : lorsqu’un conflit (contradiction) est détecté :
1. déterminer un sous-ensemble de l’interprétation courante,
responsable du conflit «conflict-set »
2. Retour en arrière non-chronologique - saut au point responsable
de l ’échec.
 l’ensemble conflit est construit à partir de la clause falsifiée en ne gardant que
les littéraux affectés lors des points de choix.

 À chaque point de choix, un ensemble conflit est obtenu par résolution entre les
ensembles conflits des deux branches.

Permet d’éviter de nombreuses explorations redondantes.


Traitement des échecs : ajout de clauses
 Au cours de la recherche, créer pour chaque conflit une clause
permettant d’éviter l’apparition future du même conflit

 = (a  b)(¬b  c  d) (¬b  e)(¬d  ¬e  f)


Hypothèse (points de choix) I[c] =  et I[f] =  (¬c et ¬f)
Affecter ¬a et effectuer la PU : b, d et e
Conflit : (¬d  ¬e  f) est falsifié
¬a  ¬c  ¬f  ¬
 a c f
ajout d’une nouvelle clause: (a  c  f)
Traitement des échecs : ajout de clause
 Clause dérivée d’un conflit peut aussi être obtenue par
application restreinte de la résolution

 = (a  b)(¬b  c  d) (¬b  e)(¬d  ¬e  f)

résolution
(a  c  d) (a  e)

(a  c  ¬e  f)
La clause (a  c  f)
permet d’éviter le conflit !
(a  c  f) Clause unitaire : a
Traitement des échecs : ajout de clauses
 Le nombre de clauses ajoutées peut être très grand !

 limiter le nombre de clauses ajoutées.


 pour chaque conflit, une clause est ajoutée

 garder uniquement les clauses de taille  K

 les plus grande clauses active sont supprimées

 le nombre de clauses ajoutées est polynomial en K

 Relevance-based learning
 supprimer les clauses actives avec  M littéraux non affectés
Retour arrière non chronologique
«conflict-directed backtraking » (backjumping)
 Au cours de la recherche, et en présence de conflits retour
arrière vers l’une des causes du conflit.

 = (a  b)(¬b  c  d) (¬b  e)(¬d  ¬e  f)


 f)  g)(¬g  b)(¬h  j)(¬i  k)
(a  c (¬a

Hypothèse (points de choix) ¬c, ¬f, ¬h et ¬i


affectation de ¬a crée un conflit  clause (a  c  f) ajouté
(a  c  f) implique a
Un autre conflit est obtenu : (¬d  ¬e  f) est insatisfiable
a  ¬ c  ¬ f  ¬
  ¬a  c  f
nouvelle clause ajoutée: (¬a  c  f)
Retour arrière non chronologique
«conflit-directed backtraking » (backjumping)

c
Clauses ajoutées: (a  c  f) and (¬a  c  f)

Appliquer la résolution : f
nouvelle clause falsifiée (c  f)

 retour au plus récent h
point de choix: I[f] =  
i
 clauses ajoutées: 
(a  c  f), a
(¬a  c  f), et  T
(c  f)
(c  f)
«conflit-directed backtraking » : Exemple
 = (A1  A2)
(A1  A3  A9 )
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 )
(A1  A8)
(A7  A8  A13 )
...
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2)
(A1  A3  A9 )
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 )
(A1  A8)
(A7  A8  A13 )

{…, A9 , A10 , A11 , A12 , A13 , … } ( Interprétation initiale)
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2)
(A1  A3  A9 )
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 ) satisfaite
(A1  A8) satisfaite
(A7  A8  A13 )

{…, A9 , A10 , A11 , A12 , A13 , … , A1} (brancher sur A1)
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 ) satisfaite
(A1  A8) satisfaite
(A7  A8  A13 )

{…, A9 , A10 , A11 , A12 , A13 , … , A1, A2, A3 } (Unit A2, A3 )
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite
(A2  A3  A4 ) satisfaite
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 ) satisfaite
(A1  A8) satisfaite
(A7  A8  A13 )

{…, A9 , A10 , A11 , A12 , A13 , … , A1, A2, A3 , A4} (Unit A4 )
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite
(A2  A3  A4 ) satisfaite
(A4  A5  A10 ) satisfaite
(A4  A6  A11 ) satisfaite
(A5  A6) conflit
(A1  A7  A12 ) satisfaite
(A1  A8) satisfaite
(A7  A8  A13 )

{…, A9 , A10 , A11 , A12 , A13 , … , A1, A2, A3 , A4, A5, A6, } (Unit A5, A6)
«conflit-directed backtraking » : Exemple (suite)
A9
 = (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite A10
(A2  A3  A4 ) satisfaite
(A4  A5  A10 ) A11
satisfaite
(A4  A6  A11 ) A12 c4 A5
satisfaite
(A5  A6) conflit A13
c2 A3
c6 
c5 A6
(A1  A7  A12 ) satisfaite c3 A4
A2
(A1  A8) A1 c1
satisfaite
(A7  A8  A13 )
… Graphe d’implication
{…, A9 , A10 , A11 , A12 , A13 , … , A1, A2, A3 , A4, A5, A6, }
 ensemble conflit : {A9 , A10 , A11 , A1}
(A9  A10  A11  A1 )   ,
  (A9  A10  A11  A1)
nouvelle clause ajoutée: (A9  A10  A11  A1) retour arrière sur A1
«conflit-directed backtraking » : Exemple (suite)
= (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 )
(A1  A8)
(A7  A8  A13 )

{…, A9 , A10 , A11 , A12 , A13 , … ,A1 } ( brancher sur A1 )
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 ) satisfaite
(A1  A8) satisfaite
(A7  A8  A13 ) conflit

{…, A9 , A10 , A11 , A12 , A13 , … ,A1 , A7 , A8 }( Unit A7 , A8 )
«conflit-directed backtraking » : Exemple (suite)
A9
 = (A1  A2) satisfaite
(A1  A3  A9 ) A10
satisfaite
(A2  A3  A4 )
(A4  A5  A10 ) A11

(A4  A6  A11 ) A12 c9
(A5  A6)
A13
c7 A7
(A1  A7  A12 )
(A1  A8) satisfaite A8
(A7  A8  A13 ) satisfaite A1 c8
… conflit Graphe d’implication
{…, A9 , A10 , A11 , A12 , A13 , … ,A1 , A7 , A8 }
 ensemble conflit : {A12 , A13 , A1}
(A12  A13  A1 )   ,
  (A12  A13  A1)
nouvelle clause ajoutée: (A12  A13  A1)
«conflit-directed backtraking » : Exemple (suite)
 = (A1  A2) satisfaite
(A1  A3  A9 ) satisfaite
(A2  A3  A4 )
(A4  A5  A10 )
(A4  A6  A11 )
(A5  A6)
(A1  A7  A12 ) satisfaite
(A1  A8) satisfaite
(A7  A8  A13 ) conflit

{…, A9 , A10 , A11 , A12 , A13 , … ,A1 , A7 , A8 }
 clauses ajoutées:
(A9  A10  A11  A1)
(A9  A10  A11  A12  A13 ) Retour arrière sur A13
(A12  A13  A1)
Partition du modèle classique [Oxusoff-Rauzy:89]

i

  j  i


partition
i est SAT
ssi
 j est SAT

j
Partition du modèle généralisé [Mazure-etal:99]

i

 i *  j


partition
i est SAT
ssi
 j est SAT

j

|=* : conséquence logique restreinte à la PU


Partition du modèle : application

  (p)
Traitement rétrospectif
(p  ) (Look-back)


p p

  p   |=* 
Application du théorème
généralisé
Partition du modèle : application

  (p) Traitement prospectif
(p  ) p p (Look-ahead)


 
  p |=*    p |=*    p |=*  traitement
locale par PU
  p |=*    p |=*    p |=* 
Inconsistance locale Littéral impliqué Non application

  p   |=*    p   |=* 
généralisation
  p   |=*   p   |=* 
Élimination de la variable p Le littéral p est pur
Simplifications
 effectuées sur la formule originale (pré-traitements)
 Résolution restreinte :
- effectuer toutes les résolutions de longueur <=K (en général k <=2)
Exemple : - soient 1 = (¬a  b  c), 2 = (a  b)

ajouter r = (b  c )
- soient 1 = (¬a  b ), 2 = (a  b)

ajouter r = (b )
- effectuer des résolutions entre 1 et 2 si |r| <= max( |1|, |2|)

Exemple : soient 1 = (¬a  b  c), 2 = (a  d)

ajouter r = (b  c  d)
Simplifications
 Eliminer des clauses et des variables
 si (x  y) , (x  y)  , alors x et y sont équivalent, (x  y)
 eliminer y, et en le remplaçant par x
 supprimer les clauses satisfaites
 utiliser la sous-formule 2-CNF pour identifier des littéraux équivalents,
des littéraux impliqués,

(¬a  b)(¬b  c)(¬c  d)(¬d  b)(¬d  a) Graphe d’implication:


d
 (ab)(bc)(cd)(db)(da)

a, b, c et d sont équivalents deux à deux


 remplacer toutes les variables par a
a b c
Simplifications
Définition : Soit  une formule CNF, et c une clause de , c est dite
bloquée ssi il existe un littéral pc tq.  c’ avec ¬pc, res(c,c’, p) = T
(tautologique) [ou subsumé par une clause de ]

Théorème : soit  une formule CNF, et c une clause bloquée de ,alors


 est satisfiable ssi  \ c est satisfiable

 Exemple : c1 est bloquée par a


c1 = (a  b  c) c2 = (¬a  ¬b)
 = c2 = (¬a  ¬b) est SAT ssi \{c1} = c3 = (b  ¬c ) est SAT
c3 = (b  ¬c ) c4 = (¬b  c)
c4 = (¬b  c)
Algorithmes incomplets
Recherche locale (RL)
Configuration
initiale

Réparation
locale

sat indéterminé
RO : SAT/ CSP :
 Recuit simulé [Kirpatrick-et al.:83]  Inversion method [Dunham-Wang:76]
 Tabou [Glover:89]  SAT1 [Gu:87], QS [Minton:88]
 ...  SAD [Hansen-Juamard:90] (Max-Sat)
 SCORE [Chabrier-et al.:91],
 GSAT [Selman-et al.:92] , ...
...
Recherche locale : définitions de base
 Espace de recherche : l’ensemble des interprétations (complète)
 Deux interprétations sont dites voisines si elle différent sur la valeur d’une
variable (distance de Hamming = 1).

 La fonction d’évaluation d’une formule  étant donnée une


interprétation I est définie par le nombre de clauses falsifiés par I, notée :
(score(, I) )

 La score d’une variable x étant donnée une interprétation I et une


formule  (score(x, , I) ) est défini par la différence entre le score de I et le
score de I’ (obtenue à partir de I en inversant la valeur de vérité de x )
Recherche locale : schéma de base
 Recherche non systématique d’une solution
 génération aléatoire d’une interprétation (complète) initiale (1)

 déplacement vers la meilleure interprétation « voisine »,

 en essayant d ’éviter et/ou d ’échapper aux minima locaux :


 recommencer en (1),
 random walk,
 taboo, etc.
Minima locaux
Minimum globale

#clauses falsifiées

Interprétations
L’algorithme GSAT
Fonction GSAT()
for i:= 1 to maxTries do
:= randAssign()
for j:=1 to maxFlips do
if (score(, ) = 0)
then return true;
else bestFlips :=hillClimb(, );
Ai := randPick(bestFlips);
 :=flip(Ai, );
end
end
return « no satisfying assignement found »
GSAT : exemple
 Répéter maxTries fois:
 générer aléatoirement une interprétation complète
 répéter maxFlips fois (tant qu’il existe des clauses falsifiés ):
 « Flipper » une variable qui satisfait le maximum de clauses falsifiés
(max>=0)

 = (a + b)(¬a + c) (¬b + d)(¬c + d) Tirage aléatoire de I

 = (a + b)(¬a + c) (¬b + d)(¬c + d) Flipper d dans I

 = (a + b)(¬a + c) (¬b + d)(¬c + d) Instance est satisfiable !


GSAT : l ’espace de recherche
60

100 var
40

20

Remarque : pas de remontée


#clauses falsifiées

0
0 100 200 300 400 500

Flips

300

500 var
200

100

0
0 4 8 12 16 20

Flips x 1000
RL: Améliorations de l’algorithme de base

But: comment atteindre rapidement des plateaux (minima locaux) plus


bas?
Stratégies d ’échappement des minima locaux :
a) Random Walk
(Selman, Kautz , and Cohen 1993)
b) Méthode tabou
(Fred Glover 1989)
Random Walk

 Random walk SAT algorithm:


1) tirer aléatoirement une interprétation complète

2) Répéter jusqu à satisfaire toute les clauses :


Flipper aléatoirement une variable apparaissant dans une clauses falsifié

 Résout 2SAT en O(n ) flips. (Papadimitriou 1992)


 Inefficace sur k-SAT (k >= 3).
Random Walk modifié (RWS)

1) Avec une probabilité, “walk” , i.e.,


flipper une variable apparaissant dans une clause falsifié.

2) Avce une probabilité 1-p, “greedy move” , i.e.,


flipper une variable satisfaisant le maximum de clauses

falsifiées.
Résultats : 3-SAT aléatoire au seuil

GSAT
base RWS Sim. Ann.

vars temps(sc) temps(sc) temps(sc)

100 .4 .2 .6
200 22 4 21
400 122 7 75
600 1471 35 427
800 * 286 *
1000 * 1095 *
2000 * 3255 *
Random Walk > GSAT de base > DPLL
Autres variantes de GSAT
 HSAT : idem que GSAT de base : utilisation d ’une heuristique
pour départager les variables ayant le score max :
 donner moins de priorité à la variable la plus récemment « flippé »
 WSAT-G (p): tirer aléatoirement une clause falsifiée c :
1. avec une probabilité p flipper aléatoirement une variable de c
2. avec une probabilité 1-p, utiliser la stratégie de GSAT de base
(choix de la variable satisfaisant le max de clauses)
 WSAT-B (p): idem que WSAT-G, sauf pour le cas 2 :
 choix de la variable satisfaisant le maximum de nouvelles clauses
Autres variantes de GSAT
 Novelty (p) : tirer aléatoirement une clause c :
1. flipper une variable xi de c ayant le meilleur score, sauf si xi est la
variable la plus récemment flippé dans c.
2. Dans ce dernier cas :
 avec une probabilité p, flipper xi
 avec une probabilité 1-p, flipper xk la deuxième variable de c ayant le
meilleur score

 Novelty+ (p,q) : idem que Novelty , sauf le cas 1. à remplacer par :


 avec une probabilité q flipper une variable xi de c (au hasard) ...
 ...
Tabou pour SAT
[Mazure-Saïs-Grégoire:97]
 Objectifs
 Adapter efficacement des techniques de RL (RO) à la résolution de SAT
 Supprimer le caractère aléatoire (prédominant) dans GSAT-RWS
 Quelle méthode?  Tabou
 TSAT = GSAT + liste d’interdits (tabou) de taille fixée
la liste d ’interdits peut être vue comme une file d ’attente :
 à chaque étape, il est interdit de choisir dans la liste Tabou la prochaine variable à
flipper.
 À chaque étape, une variable (flippée) entre dans la file (liste d’interdits) et une autre
sort de la file.
 permet d’échapper des minima locaux, et d ’éviter des cycles,...
 Résultats
 Meilleurs performances par rapport à GSAT-RWS
 Taille optimale de la liste Tabou ?
3-SAT aléatoire (seuil)
GSAT+weight
 Observation :
 pour certaines classes de problèmes, différentes exécutions de GSAT mènent
vers les mêmes clauses falsifiées.
 Ou encore vers une exploration répétée des mêmes parties de l’espace de
recherche
 mise en œuvre une stratégie pour éviter ce problème?
 Réalisation :
 Pondération des clauses : associer un poids à chaque clause, initialement
poids ( c ) =1 pour toute clause de c
 Après chaque essai, incrémenter le poids des clauses falsifiées.
 Modifier la fonction de calcul du score : le score d’une variable étant donnée
une interprétation est pondéré par le poids des clauses
Recherche locale :sommaire
 Nécessite une formule CNF

 Incomplète : ne permet pas de prouver l ’insatisfiabilité

 très efficace sur certains problèmes (satisfiables)

 nécessite un espace polynomiale

 utilisé en intelligence artificielle (e.g. planification)

 de nombreuses variantes : GSAT-random walk, WSAT, …

 variantes proposées pour les formules non-CNF : NC-GSAT, DAG-SAT


Autres méthodes : « Randomization
& restart »
 Constatation:
 pour un problème donnée, les temps d ’exécutions varient
considérablement en fonction des heuristiques et/ou algorithmes

1
%runs
Distributions
0,9

0,8

0,7
g40 Distrib
Problème de vérification de circuit 0,6
- heuristiques randomisées
0,5
- 10000 exécutions
0,4

0,3
#noeuds
0 2000 4000 6000 8000 10000 12000
Autres méthodes : « Randomization
& restart »
 Stratégie :
 Randomizer l’heuristique de choix de variable
 Limiter le nombre de nœuds à explorer à chaque essai “backtrack cutoff
value”
 reprendre la recherche à chaque fois que le nombre de nœuds>cutoff
 utiliser une heuristique randomisé pour explorer différentes parties de l’espace de
recherche

Espace
de recherche cutoff cutoff
Autres méthodes : « Randomization
& restart »
 Possibilité de rendre l’algorithme complet
 augmenter la valeur “cutoff” après chaque essai

 On peut utiliser les technique de traitement des échecs


 très utiles pour prouver l ’ insatisfiabilité

 On peut utiliser différents algorithmes et/ou des configurations


d ’algorithmes
 Soit , exécuter K algorithms (ou une configurations d ’algorithmes)
 de manière concurrentes, avec différents processeurs, ou

 séquentiellement , avec un seul processeur

 Soit, à chaque essai, choisir un algorithme différent


Autres méthodes : « Randomization
& restart »
1
% runs

Distributions
0,9

0,8

0,7
g40 Distrib
g100 Distrib
0,6

0,5

0,4

0,3
# noeuds
0 10000 20000 30000 40000 50000
Méthodes mixtes
Méthodes mixtes
[Mazure-Saïs-Grégoire:95-97]

 Résolution de problèmes difficiles


 Pas de méthode générale et efficace
 Avantages /inconvénients  complémentaires

Hybridation de méthodes
(RO, PLC, …)

 Quelles méthodes ?
 Recherche locale / énumération

 Comment ?
 Avec ou sans coopération
Méthodes hybrides (mixtes)
 Schémas de coopération recherche
locale
non résolu
+
informations
sat décider

non résolu
non résolu
déduire
non résolu
échec
unsat backtrack

 Autres travaux
[Castell:97, Lobjois-Lemaître:97, ...]
Méthodes hybrides (mixtes)
 A chaque appel à l ’algorithme de recherche locale :
 comptabiliser pour chaque clause le nombre de fois qu’elle est
apparue fausse au cours de la recherche
 Utiliser cette information pour améliorer les heuristique de
choix de variable : e.g. choisir la variable ayant apparue le
plus sauvent fausse au cours de la recherche locale.
 Sommaire :
 Complétude des deux schémas proposés
 Moyen de localiser l’inconsistance
 Amélioration des techniques classiques sur de nombreux problèmes
Diagramme Binaire de Décision (BDD)
 Soit x y, z un opérateur « if-then-else » (ite) défini :
x y, z = (x  y)  (x  z)
 x y, z est vrai si x et y sont vrai ou x est faux et z est vrai
Les opérateurs logique peuvent être exprimés par des «ite» et
les deux constantes 0 et 1.
exemples :
 x par x  0, 1
 x y par x  (y  1, 0 ), 1
 x y par x  (y  1, 0 ), (y  0, 1 ),
 x  y par x  (y  1, 0 ), 0
 x  y par x  1, (y  1, 0 )
 ….
Remarque :
 les variables (sans négation) apparaissent uniquement dans la condition d’un ite. toute
formule peut être représenté par les « ite », 0 et 1
 Nouvelle forme normale!
Diagramme Binaire de Décision (BDD)
 La forme normale INF « If-then-else Normal Form » est une expression
booléenne construite avec uniquement des ite et les constantes 0 et 1,
avec les tests effectuées uniquement sur les variables.
 Si  est une formule booléenne et x une variable de  alors,
 = x [x|1], [x|0]
(théorème de Schanon)
 En appliquant récursivement le théorème de Schanon on
peut transformer toute formule booléenne sous forme INF

 toute formule booléenne est équivalente à une formule sous forme INF
Diagramme Binaire de Décision (BDD)
 Exemple 1 :
soit une formule booléenne  = (x1 y1) (x2 y2)
en appliquant récursivement le Th de Schanon sur les variables x 1 ,y1, x2 ,y2 dans
l’ordre on obtient l ’expression suivante:
 = x1  1, 0
0 = y1  0, 00
x1
1 = y1  11, 0 y1 y1
00 = x2  001, 000
11 = x2  111, 110
x2 x2
000 = y2  0, 1
y2 y2 y2 y2
001 = y2  1, 0
110 = y2  0, 1
1 0 0 1 0 0 1 0 0 1
111 = y2  1, 0
Un arbre de décision (AD)de 
Étiqueté par 1
Étiqueté par 0
Diagramme Binaire de Décision (BDD)
 Exemple 1 (suite) :
 chaque sous-formule peut être vue comme un neoud d ’un graphe.
 Chaque nœud est soit terminal (1 et 0) soit non-terminal
 un nœud non-terminal admet deux successeurs : la partie alors de
l ’ite et la partie sinon de l ’ite
x1
y1 y1

x2
Nombre de nœuds réduit de
9 (AD) à 6 (BDD)
y2 y2

0 1
Un BDD de  avec un ordre x1 < y1<x2 <y2
 aussi OBDD « Ordred Binary Decision Diagram »
Diagramme Binaire de Décision (BDD)
 Exemple 2 (OBDD avec des tests redondants)
x1

x2
x1 x1

x2 x3

1 1 1 0 1
a) OBDD pour 1 b) OBDD pour 1, c) OBDD pour 1, d) OBDD pour x1  x3,
avec 2 tests redondants avec 1 test redondant avec 1 test redondant

En éliminant les tests redondants dans un BDD


on obtient un ROBDD (Reduced BDD)
Diagramme Binaire de Décision (BDD)
 ROBDD : ordre et réductions

x x<y
x<z x x x

y
 Définitions : z
 un BDD est un graphe orienté acyclique (DAG) avec :
 un ou deux nœuds terminaux (avec degré extérieur nul ) étiquetés 0 ou 1, et

 un ensemble de nœuds variables (non-terminaux) (avec un degré extérieur 2). Chaque nœud est
étiqueté par une variable u, et chaque arc est étiqueté par 0 (ligne en pointillé) ou 1 (ligne pleine).
 Un BDD est dit ordonné (OBDD) si sur chaque chemin du graphe l’ordre x1<x2 < … <xn est
respecté. Un OBDD est réduit (ROBDD) si
 (unicité) il ne contient pas deux neuds différents étiqueté avec la même variable et ayant les
mêmes successeurs.
 (non-redondant) les successeurs d’un neoud sont différents
ROBDD
 Propriété (canonicité) : toute fonction booléenne est représenté
par exactement un seul ROBDD.
 une fois le ROBDD construit, :
 on peut tester en temps constant si la formule booléenne est valide
(ROBDD réduit au nœud 1), insatisfiable (ROBDD réduit au nœud 0),
satisfiable sinon;
 ordre des variables -> taille du ROBDD
Exemple :  = (x1 y1) (x2 y2)
x1
x1
x2 x2
y1 y1
y1 y1 y1 y1
x2
y2 y2
y2 y2
1 0
0 1
ROBDD () : ordre x < y <x <y ROBDD () : ordre x < x <y <y
OBDD (structure implicite)
 obdd(T,{…})= 1
 obdd( ,{…})=0
 obdd(, {A1,A2,…,An})=
if (A1)
then obdd([A1|1],{A1,A2,…,An})
else obdd([A1|0],{A1,A2,…,An})
OBDD (construction incrémentale)
 obdd(T,{…})= 1
 obdd( ,{…})=0
 obdd(1 op 2 , {A1,A2,…,An})=
obdd_merge( op,
obdd_build(1 , {A1,A2,…,An}),
obdd_build(2 , {A1,A2,…,An}),
{A1,A2,…,An}
)

 op  {, ,,}
(RO)BDD : sommaire
 Opère sur des formules booléennes quelconques
 trouve tout les modèles
 factorisation des partie commune de l ’arbre de recherche (DAG)
 nécessite un ordre statique (fixé) à priori (choix critique!!)
 très efficace pour certaines classes de problèmes (e.g. circuits)
 nécessite un espace exponentiel dans le pire cas
 très utilisé par la communauté conception de matériel, ignoré par les
logiciens, récemment introduite en IA
Structures & résolution
Structure : exploitation

 Structure?
 Intérêt ?
 Exploitation
 Comment la détecter ?
 Comment l’utiliser ?

 Exemples de structure
 Symétries, équivalences, etc.
Symétries (1)
[Benhamou-Saïs-Siegel:90-94, …]

 Définition : soient F une CNF et L l’ensemble de ses littéraux Une permutation 


définie sur L est une symétrie, si :
1) l  L,  (l )   (l )
2)  (F )  F
 Exemple : F = (a  b)  (a  b),
SymF = { a  a, b  b; a  b }

 Théorème : si l  l' dans F , alors


l a un modèle ssi l ' a un modèle
Symétries (2)
[Krishnamurty:85, Benhamou-Saïs-Siegel:90-94, …]

 Utilisation  dynamique
statique
 Détection  isomorphisme de graphes
 algorithme incomplet
 Résultats
 problème des pigeons, formules de Tseitin,
 instances du théorème de Ramsey, Shur, Erdös,
 puzzles logiques etc.

 Autres travaux

Projet Bahia [92-94], Logique du premier ordre [Crawford:92, ...],


CSP [Puget:93, ...], Premier ordre [Slaney:95, ...],...

Vous aimerez peut-être aussi