Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir...
Transcript of Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir...
![Page 1: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/1.jpg)
INSTITUT D’ÉLECTRONIQUEET D’INFORMATIQUEGASPARD-MONGE
Méthodes et modélisation pour l’optimisation
M1 informatique, 2018–2019 05 — Modélisation SAT
![Page 2: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/2.jpg)
‣ Trois étudiants Jean, Paulette et Nicolas sont accusés d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent ceci :
‣ Jean: “C'est Paulette qui l'a fait et Nicolas est innocent.”
‣ Paulette: “Si Jean est coupable, alors Nicolas l'est aussi.”
‣ Nicolas: “Ce n'est pas moi. C'est un des deux autres ou peut-être les deux.”
1. Est-ce que les trois déclarations sont contradictoires ? 2. Supposons qu'ils soient tous coupables, qui a menti ? 3. Supposons que personne n'ait menti, qui est innocent
et qui est coupable ?
Mystère
![Page 3: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/3.jpg)
‣ Variable booléenne : x prend la valeur 1 (vrai) ou 0 (faux) ‣ Formule propositionnelle : expression constituée de
‣ variables x ‣ négations ¬x “NON x” ‣ conjonctions x ∧ y “x ET y” ‣ disjonctions x ⋁ y “x OU y” ‣ implications x ➝ y “SI x, ALORS y”
‣ Une affectation satisfaisante d’une formule est une affectation de variables aux valeurs (1 ou 0) qui rend la formule vraie (1)
‣ Une formule est satisfaisable si elle a une affectation satisfaisante
Vocabulaire
![Page 4: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/4.jpg)
‣ Littéral : x, ¬x ‣ Clause (disjonction de littéraux) : x ⋁ y ⋁ ¬z ‣ Formule en forme normale conjonctive (CNF)
(conjonction de clauses) : (x ⋁ y ⋁ ¬z) ⋀ (¬x ⋁ ¬y ⋁ ¬z)
Exercice : quelles formules sont en CNF ? A. (¬x ⋁ ¬y) ⋀ (¬z ⋁ ¬w) B. x ➝ y C. ¬x ⋀ y D. (x ⋀ y) ⋁ (z ⋀ w) E. (¬(x ⋁ y)) ⋀ (z ⋁ w)
Forme normale conjonctive
![Page 5: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/5.jpg)
‣ Distributivité : x ⋁ (y ⋀ z) ⇔ (x ⋁ y) ⋀ (x ⋁ z)
‣ de Morgan : ¬(x ⋁ y) ⇔ ¬x ⋀ ¬y
‣ Implication : (x ➝ y) ⇔ ¬x ⋁ y
‣ Associativité : x ⋁ (y ⋁ z) ⇔ (x ⋁ y) ⋁ z ⇔ x ⋁ y ⋁ z
Exercice : mettez les formules suivantes en CNF
A. (x ⋀ y) ⋁ (z ⋀ w) B. ¬(x ➝ y) C. (¬(x ⋁ y)) ⋀ (z ➝ w)
Mise en forme CNF
![Page 6: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/6.jpg)
‣ Le problème de trouver une affectation satisfaisante à une formule CNF ou de démontrer qu’il n’y en a aucune s’appelle SAT (satisfaisabilité booléenne)
‣ SAT est NP-difficile ; tout problème dans NP peut être exprimé comme une (relativement) petite formule en CNF
‣ On décrit souvent l’entrée à SAT par un ensemble de clauses : (x1 ⋁ ¬x2), (¬x1 ⋁ x3), (¬x2 ⋁ ¬x3) au lieu de la formule (x1 ⋁ ¬x2) ⋀ (¬x1 ⋁ x3) ⋀ (¬x2 ⋁ ¬x3)
‣ Alors, SAT est le problème de trouver une affectation aux variables qui rend toutes les clauses vraies simultanément
Le problème SAT
![Page 7: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/7.jpg)
Mystère en CNF
xP, ¬xN
“C'est Paulette qui l'a fait et Nicolas est innocent.”
“Si Jean est coupable, alors Nicolas l'est aussi.”
¬xJ ⋁ xN
“Ce n'est pas moi. C'est un des deux autres ou peut-être les deux.”
¬xN, xP ⋁ xJ
La CNF a 4 clauses xP, ¬xN, ¬xJ ⋁ xN,
xP ⋁ xJ
![Page 8: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/8.jpg)
4 reines ♕
Est-ce qu'il est possible de placer les 4 reines de manière à ce qu'aucune d'entre elles ne soit en prise ?
‣ Modéliser ce problème par une formule CNF ‣ C-à-d, trouver une formule CNF telle que chaque solution
satisfaisante correspond à un placement valide de 4 reines
![Page 9: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/9.jpg)
4 reines ♕
1. Au moins une reine dans chaque colonne
2. Il n’y a pas deux reines à (a,b) et à (c,d) si une reine à (a,b) peut attaquer (c,d)
‣ Variables xijintention : xij = 1 si la reine i est en rang i, colonne j
(x1j ⋁ x2j ⋁ x3j ⋁ x4j) j = 1, …, 4 (4 clauses)
(¬xab ⋁ ¬xcd) (beaucoup de clauses)
![Page 10: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/10.jpg)
4 reines ♕‣ Quand est-ce qu’une reine à (a,b) peut attaquer (c,d) ?
Attaque horizontale : a = c, b ≠ d
Attaque verticale : a ≠ c, b = d
Attaque diagonale : |a - c| = |b - d|, (a,b) ≠(c,d)
![Page 11: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/11.jpg)
4 reines en Python
for a in range(1,5):! for b in range(1,5):! for c in range(1,5):! for d in range(1,5):! if (a,b) < (c,d): # ordre lexicographique! if ((a == c) or # horizontale! (b == d) or # verticale! (abs(a-c) == abs(b-d))): # diagonale! clause = [neg(var(a,b)),neg(var(c,d))]! cnf.append(clause)
for j in range(1,5):! clause = [var(i,j) for i in range(1,5)]! cnf.append(clause)
1. Il y a au moins une reine dans chaque colonne
2. Il n’y a pas deux reines à (a,b) et à (c,d) si une reine à (a,b) peut attaquer (c,d)
![Page 12: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/12.jpg)
Coloration de graphe
v1
v2
v3 v5
v4
v6
‣ Le graphe a-t-il une coloration avec 3 couleurs ? ‣ Couleurs : 1, 2, 3 ‣ Introduire une variable xic pour toute i = 1, …, 6 et c = 1, 2, 3 ‣ La variable xic = 1 indique que le sommet vi prend la couleur c
![Page 13: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/13.jpg)
Coloration de graphe‣ Variables xic
intention : xic = 1 si le sommet vi prend la couleur c
1. Chaque sommet i = 1, …, 6prend au moins une couleur
2. Chaque sommet i = 1, …, 6prend au plus une couleur
(xi1 ⋁ xi2 ⋁ xi3)
(¬xic ⋁ ¬xjc)
(¬xi1 ⋁ ¬xi2), (¬xi1 ⋁ ¬xi3), (¬xi2 ⋁ ¬xi3)
v1
v2
v3 v5
v4
v6
3. Les deux sommets d’une arête (vi, vj) ne prennent pas la même couleur c
![Page 14: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/14.jpg)
“Macros”Il y a au moins une variable parmi x1, x2, …, xn qui est vraie
AtLeastOne(x1, x2, …, xn) ⇔
(x1 ⋁ x2 ⋁ … ⋁ xn)
Il y a au plus une variable parmi x1, x2, …, xn qui est vraie
AtMostOne(x1, x2, …, xn) ⇔
(¬x1 ⋁ ¬x2), (¬x1 ⋁ ¬x3), …, (¬xn-1 ⋁ ¬xn)
![Page 15: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/15.jpg)
Coloration de graphe‣ xic = 1 si le sommet vi prend la couleur c
1. Chaque sommet i = 1, …, 6prend au moins une couleur
2. Chaque sommet i = 1, …, 6prend au plus une couleur
AtLeastOne(xi1, xi2, xi3)
AtMostOne(xic, xjc)
AtMostOne(xi1, xi2, xi3)
v1
v2
v3 v5
v4
v6
3. Les deux sommets d’une arête (vi, vj) ne prennent pas la même couleur c
On se permet d’utiliser les macros AtLeastOne et AtMostOne au td et à l’examen.
![Page 16: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/16.jpg)
Coloration de graphe en Python
3. Les deux sommets d’une arête (vi, vj) ne prennent pas la même couleur c
1. Chaque sommet i = 1, …, 6prend au moins une couleur
2. Chaque sommet i = 1, …, 6prend au plus une couleur
for i in nodes:! lst = [var(i,0),var(i,1),var(i,2)]! clauses = at_least_one(lst)! cnf.extend(clauses)! clauses = at_most_one(lst)! cnf.extend(clauses)
for e in edges:! i, j = e! for c in range(3):! clauses = at_most_one([var(i,c), var(j,c)])! cnf.extend(clauses)
v1
v2
v3 v5
v4
v6
![Page 17: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/17.jpg)
‣ On a souvent besoin de formaliser une application
‣ affecter les reines aux colonnes ‣ affecter les sommets aux couleurs
‣ Variables de décision intention : xij = 1 si (i,j) ∈ f ‣ Pour que f soit une application (et non pas seulement une
relation binaire), on introduit des contraintes qui disent
Formaliser des applications
f : {1, …, n} → {1, …, m}
AtLeastOne(xi1, xi2, …, xim)AtMostOne(xi1, xi2, …, xim)
… …
i j
“pour tout i, il y a exactement un j t.q. (i,j) ∈ f”
f
![Page 18: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/18.jpg)
‣ Parfois, l’application f : {1, …, n} → {1, …, m} est injective ‣ pas deux reines dans une même colonne
‣ Pour imposer cette condition supplémentaire sur f, on introduit des contraintes qui disent
Formaliser des injections
… …
i j
“pour tout j, il y a au plus un i t.q. (i,j) ∈ f”
AtMostOne(x1j, x2j, …, xnj) f
![Page 19: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/19.jpg)
Emploi du tempsLun Mar Mer Jeu Ven
08h30 10h30
10h45 12h45
14h00 16h00
16h15 18h15
Cours EnseignantMMPO CM Thapper
Complexité CM Nicaud
MMPO TD1 Hubard
Compression CM Nicaud
… …
Disponibilités
Thapper lun, mar, mer 10h45-16h00Hubard lun, ven
… …
j=123
i=123
séances i = 1, …, n
créneaux j = 1, …, m
![Page 20: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/20.jpg)
Emploi du temps‣ Variables xij
intention : xij = 1 si la séance i est affectée au créneau jOn modélise une injection f : { séance } → { créneau }
2. Soit j(1), …, j(d) les disponibilités de l’enseignant de la séance i = 1, …, n. La séance i doit avoir lieu sur un de ces créneaux :
AtLeastOne(xij(1), …, xij(d))
1. La séance i = 1, …, n doit avoir lieu au plus une fois :
3. Le créneau j = 1, …, m doit concerner au plus une séance :
AtMostOne(xi1, …, xim)
AtMostOne(x1j, …, xnj) (injectivité)
![Page 21: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/21.jpg)
‣ Comment peut-on exprimer qu’au plus 2 d‘entre les variables x, y, z, u, v sont vraies ?
‣ “Si je sélectionne 3 d’entre elles, au moins 1 est fausse”
‣ Combien de clauses ?
‣ Combien de clauses pour n variables ?
AtMost-k(…), k > 1
AtMost-2(x, y, z, u, v) ⇔
(¬x ⋁ ¬y ⋁ ¬z), (¬x ⋁ ¬y ⋁ ¬u), (¬x ⋁ ¬y ⋁ ¬v), …, (¬z ⋁ ¬u ⋁ ¬v)
sélection de 3 parmi 5 = (5×4×3)/(3×2×1) = 10
sélection de 3 parmi n = n(n-1)(n-2)/6 = O(n3)
![Page 22: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/22.jpg)
‣ On peut utiliser moins de clauses en introduisant n×k variables auxiliaires yij pour i = 1, …, n et j = 1, …, k
‣ L’idée est de poser xi → yi1 ⋁ yi2 ⋁ … ⋁ yik
‣ Au plus k parmi les yij peuvent être vraies ‣ au plus 1 dans chaque colonne
AtMost-k(x1, …, xn), k > 1
AtMostOne(y1j, y2j, …, ynj)
y11 y12 … y1j … y1k y21 y22 … y2j … y2k … … … … yi1 yi2 … yij … yik yn1 yn2 … ynj … ynk
![Page 23: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/23.jpg)
‣ n×k variables auxiliaires ‣ k×AMO(n) + n = O(k×n2) clauses ‣ AMO(n) = le nombre de clauses de AtMostOne(x1, …, xn)
AtMost-k(x1, …, xn), k > 1
AtMostOne(y1j, y2j, …, ynj)
xi → yi1 ⋁ yi2 ⋁ … ⋁ yik
y11 y12 … y1j … y1k y21 y22 … y2j … y2k … … … … yi1 yi2 … yij … yik yn1 yn2 … ynj … ynk
![Page 24: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/24.jpg)
‣ On introduit n×k variables auxiliaires yij pour i = 1, …, n, j = 1, …, k et on pose yi1 ⋁ yi2 ⋁ … ⋁ yik → xi
‣ Au moins k rangs doivent être non-zéro ‣ au moins 1 yij vraie dans chaque colonne ‣ au plus 1 yij vraie dans chaque rang
AtLeast-k(x1, …, xn), k > 1
AtLeastOne(y1j, y2j, …, ynj)
AtMostOne(yi1, yi2, …, yik)
y11 y12 … y1j … y1k y21 y22 … y2j … y2k … … … … yi1 yi2 … yij … yik yn1 yn2 … ynj … ynk
![Page 25: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/25.jpg)
AtLeast-k(x1, …, xn), k > 1
AtLeastOne(y1j, y2j, …, ynj)
AtMostOne(yi1, yi2, …, yik)
‣ n×k variables auxiliaires ‣ k + n×AMO(k) + n×k = O(n×k2) clauses ‣ 3n+2 clauses pour k = 2
yi1 ⋁ yi2 ⋁ … ⋁ yik → xi
y11 y12 … y1j … y1k y21 y22 … y2j … y2k … … … … yi1 yi2 … yij … yik yn1 yn2 … ynj … ynk
![Page 26: Méthodes et modélisation pour l’optimisationthapper/teaching/mmpo/2018/05-slides.pdf · d'avoir introduit un virus dans la salle informatique. Pendant leur audition, ils prétendent](https://reader035.fdocument.pub/reader035/viewer/2022063014/5fd1236a5c23207a982cea44/html5/thumbnails/26.jpg)
‣ Cette construction utilise n(n-1)/2 = O(n2) clauses ‣ Il y a d’autres constructions de AtMostOne qui utilisent
moins de clauses en introduisant des variables auxiliaires ‣ Exercice au td : O(n) clauses, O(n) variables auxiliares
‣ ⇒ O(n×k) clauses et O(n×k) variables auxiliares pour
AtMost-k(x1, …, xn) et AtLeast-k(x1, …, xn)
AMO(n)
AtMostOne(x1, x2, …, xn) ⇔
(¬x1 ⋁ ¬x2), (¬x1 ⋁ ¬x3), …, (¬xn-1 ⋁ ¬xn)