1 Modélisation en programmation par contraintes 2 Sudoku

Transcription

1 Modélisation en programmation par contraintes 2 Sudoku
INF580 – Programmation par contraintes
Christoph Dürr
examen écrit final — mars 2013
Les documents distribués dans le cadre du cours et les notes personnelles sont autorisés.
1
Modélisation en programmation par contraintes
On veut paver une grille de dimension 3 × 3 par quatre tuiles dont les dimensions sont les
suivantes.
tuile largeur hauteur
1
1
1
2
1
2
2
1
3
4
2
2
Concrètement les tuiles doivent être placées sur la grille, sans rotation possible, sans
déborder du bord, et sans chevauchement mutuel.
Modélisez ce problème comme un problème de satisfaction de contraintes.
2
Sudoku
Voici une instance d’un jeu de Sudoku simplifié. Il s’agit d’une grille 4 × 4, avec des cellules
numérotées de 0 à 15. Chaque cellule i fait partie d’une ligne, d’une colonne et d’un bloc de
dimension 2 × 2. Le domaine de chaque variable xi est Di := {1, 2, 3, 4}.
x0 x1
x4 x5
x8 x9
x12 x13
x2 x3
x6 x7
x10 x11
x14 x15
Les contraintes unaires sont x3 = 3, x4 = 1, x13 = 1. Les contraintes binaires sont xi 6= xj
pour tout i 6= j, tel que les cellules i et j sont dans une même ligne, une même colonne ou
un même bloc. On note Rij := {(u, v) : 1 ≤ u, v ≤ 4, u 6= v}, cette relation.
1. Rendez l’instance sommet-consistante, c’est à dire réduisez le domaine des variables
aux valeurs permises par les contraintes unaires. Par exemple le domaine de x3 devient
D3 = {3}.
2. Rendez l’instance arc-consistante, c’est-à-dire réduisez le domaine de toute variable xi
aux valeurs u ∈ Di , tel que pour tout variable xj avec laquelle i est en relation binaire,
il existe une valeur v ∈ Dj avec u 6= v. Par exemple il faut enlever la valeur 3 du
domaine de D2 .
1
3. Rendez l’instance fortement chemin-consistante. Ça veut dire qu’elle doit être à la fois
arc-consistante et chemin-consistante. Pour la dernière propriété il faut renforcer les
contraintes binaires, tel que pour chaque triplet de variables xi , xj , xk , et tout couple
de valeurs (u, v) ∈ Rij , il existe une valeur w ∈ Dk , tel que (u, w) ∈ Rik et (v, w) ∈ Rjk .
Précisez seulement le résultat de chaque étape, sans détailler les opérations qui y ont menées.
3
SAT
Simplifiez la formule suivante en utilisant les règles 1-5, puis appliquez la résolution (règle
6) sur par exemple la variable x7 , et simplifiez de nouveau avec les règles 1-5.
Précisez à chaque étape quelle règle vous appliquez.
x1 ∨ x1 ∨ x3
x4 ∨ x4 ∨ x5
x4 ∨ x2 ∨ x5
x4 ∨ x6 ∨ x7
x4 ∨ x6 ∨ x5
x8
x6 ∨ x7 ∨ x8
4
Propagation de contraintes
Considérons le programme linéaire à variables entières suivant.
X
X
S = {x ∈ {0, 1}|P |+|N | :
aj x j −
aj xj ≤ b},
j∈P
j∈N
où aj > 0 pour tout j ∈ P ∪ N et P ∩ N = ∅.
Donnez des conditions suffisantes et nécessaires pour chacune des propriétés, avec k, ` ∈
P ∪ N fixé et k 6= `.
• S = {}
• S = {0, 1}|P |+|N |
• xk = 0 pour tout x ∈ S
• xk = 1 pour tout x ∈ S
• xk + x` ≤ 1 pour tout x ∈ S
• xk ≤ x` pour tout x ∈ S
• xk + x` ≥ 1 pour tout x ∈ S
2
Utilisez ces conditions pour résoudre le programme linéaire à variables binaires suivant
sans énumérer toutes les 25 affectations.
max 16x1 + 8x2 + 4x3 + 2x4 + 1x5
7x1 + 3x2 + 9x3 − 2x4 + 2x5 ≤ 7
−6x1 + 2x2 − 3x3 + 4x4 + 9x5 ≤ −2
5
Programmation linéaire
Montrez que la solution x1 = 1.2, x2 = 1.4, x3 = 0 est optimale pour le programme linéaire
suivant.
maxx1 + x2 + x3
s.t. x1 + 2x2 + 2x3 ≤ 4
2x1 − x2 ≤ 1
− x2 + 2x3 ≤ 1
x1 , x2 , x3 ≥ 0
6
Vertex Cover
Le problème de Vertex Cover est le suivant. On vous donne un graphe G à m arêtes, et un
entier k, et il faut décider s’il existe un ensemble S de k sommets, tel que pour chaque arête
(u, v) au moins un des sommets u, v appartient à S. Ce problème est NP-dur.
Figure 1: Une couverture d’ensembles de taille k = 6 (Notez que k n’est pas optimal).
Donnez un algorithme exponentiel pour ce problème dont la complexité est T (m, k), et
qui satisfait la récursion suivante pour k, m > 0
T (m, k) ≤ T (m − 1, k − 1) + T (m − 2, k − 2) + O(m).
Indice, votre algorithme devrait distinguer deux cas. Un premier cas où la réponse est
triviale, puis un deuxième cas où deux appels récursifs sont nécessaires.
3
7
Radio européenne
Une radio Internet diffuse en 12 pays européens de la musique tout au long de l’année. Pour
la programmation musicale, l’année est divisée en 12 mois, les musiques sont groupées en 12
genres, et dans chaque pays, chaque mois est consacré à un genre, pendant lequel seule de
la musique de ce genre est diffusée.
Écrivez un programme linéaire à variables entières, qui permette de trouver une programmation qui satisfait les contraintes suivantes.
1. La France (pays 1) doit diffuser au moins 50% de variété française (genre 1).
2. Il faut diffuser au moins 20% de Jazz (genre 2) tout pays confondu au cours de l’année.
3. Si dans un pays deux mois de suite le même genre de musique a été diffusé, alors
pendant le mois suivant il faut diffuser un autre genre.
4. Pour éviter une programmation trop monotone, on veut minimiser le nombre maximum
de couples (pays,mois) pendant lequel un même genre est diffusé.
8
Ordonnancement d’atélier
Pour ce problème on dispose de m machines et de n tâches. Chaque tâche j est composée
d’une opération par machine. La durée d’exécution de l’opération de la tâche j sur la
machine i est p(i, j). Ces opérations doivent être exécutées dans un certain ordre donnée
σ(j, 1), . . . , σ(j, m), où σ(j, r) est la machine où doit s’exécuter la r-ème opération de la tâche
j. Les valeurs p et les permutations σ(i, ·) sont données.
machines
1
1,1
4,1
2
3
2,2
1,2
2,1
4,2
3,1
3,3
2,3
4,3
3,2
1,3
temps
Figure 2: Un exemple d’ordonnancement d’atélier à 3 machines et 4 tâches. Par exemple
σ(2, 1) = 3.
Un ordonnancement est spécifié par une date de début tij pour chaque opération i de
chaque tâche j. Il y a deux contraintes importantes à respecter.
Pour tout tâche j et 1 ≤ r < m, si σ(j, r) = a et σ(j, r + 1) = b, alors taj + p(a, j) ≤ tbj .
De plus pour toute machine i et tâches j, k, les intervalles [tij , tij + p(i, j)) et [tik , tik +
p(i, k)) sont disjoints. Notez que les intervalles sont fermés au début et ouvert à la fin.
4
Le temps de complétude d’une tâche j est maxi tij + p(i, j). Le but est de trouver
un ordonnancement qui respecte ces contraintes et qui minimise le temps de complétude
maximal.
Modélisez ce problème par un programme linéaire à variables entières. Ce problème n’est
pas facile, alors ne soyez pas surpris si le nombre de variables entières est grand, tout en
étant polynomial en n et m.
5
A
A.1
Corrections
Modélisation en programmation par contraintes
On spécifie une solution, par des variables indiquant le décalage de chaque tuile par rapport
au bord gauche (x) et par rapport au bord haut (y). Il y a un couple de variables pour
chaque tuile i — de dimension `i × hi . Ces variables sont entiers, car dans toute solution, ces
décalages sont des combinaisons de largueurs et hauteurs qui eux sont entiers. La contrainte
que les tuiles ne doivent pas déborder la grille se code dans le domaine des variables
xi ∈ {0, 1, . . . , 4 − `i }, yi ∈ {0, 1, . . . , 4 − hi }.
Ensuite pour chaque couple de tuiles i, j avec i 6= j, il y a la contrainte de non-chevauchement
[xi , xi + `i ) × [yi , yi + hi ) ∩ [xj , xj + `j ) × [yj , yj + hj ) = ∅.
Notez les intervales demi-ouverts.
A.2
Sudoku
Après avoir rendu l’instance consistante avec
suivants.
1234 1234
1
1234
1234 1234
1234
1
les contraintes unaires, les domaines sont les
1234
3
1234 1234
1234 1234
1234 1234
Après avoir rendu arc-consistant les domaines sont les suivants.
24 24 124
3
1 234 24
24
234 234 1234 124
234 1
234 24
Soit Q la contrainte binaire qui interdit les couples (2, 4) et (4, 2). Alors pour rendre
x2 , x7 , x6 chemin-consistant, il faut renforcer R27 par R27 ∩ Q. Si ensuite on rend x2 , x7 arcconsistant, le domaine de x2 est restreint à D2 = {1}. Résultat des courses après application
aux autres triplets de variables, on obtient les domaines
24 24
1
3
234 24
234 1
1
3
24 24
234 1
234 24
où en plus la contrainte Q est appliquée aux couples (x8 , x12 ), (x8 , x10 ), (x12 , x14 ) et x10 , x14 .
6
A.3
SAT
Simplifiez la formule suivante en utilisant les règles 1-5, en précisant à chaque étape quelle
règle vous appliquez.
x 1 ∨ x1 ∨ x3
x 4 ∨ x4 ∨ x5
x 4 ∨ x2 ∨ x5
x4 ∨ x6 ∨ x7
x 4 ∨ x6 ∨ x5
x8
x 6 ∨ x7 ∨ x8
(1)
(1)
(2)
T
x4 ∨ x5
suppr.
x4 ∨ x6 ∨ x7
x 4 ∨ x6 ∨ x5
(4)
x8 := T
(3)
x6 ∨ x7
Puis la résolution sur x7 donne
x 4 ∨ x5
(5) x4 := F
x4 ∨ x6 ∨ x6 (1)
T
x4 ∨ x6 ∨ x5 (5) x6 := T
En conclusion la formule est satisfiable par exemple par x4 := F, x6 := T, x8 := T (et
valeurs quelconques pour les autres variables).
A.4
Propagation de contraintes
P
P
Notons aP := j∈P aj et aN := j∈N aj . Alors le côté gauche de l’inégalité est toujours
entre −aN et aP .
Donc
• S = {} ssi aN + b < 0
• S = {0, 1}|P |+|N | ssi aP ≤ b
Si xk = 0 pour tout x ∈ S, c’est que forcément k ∈ P , car pour tout indice dans N ,
changer la variable correspondante de 0 en 1 préserve l’inégalité. Pour la contraposé, si tous
les vecteurs x avec xk = 1 violent l’inégalité, alors c’est en particulier le cas pour le vecteur x
avec xk = 1, qui minimise la partie de gauche. Et elle a la valeur ak − aN . Ceci nous amène
à la caractérisation suivante. Les autres sont similaires.
• xk = 0 for all x ∈ S ssi ak > aN + b et k ∈ P
• xk = 1 for all x ∈ S ssi ak > aN + b et k ∈ N
• xk + x` ≤ 1 for all x ∈ S ssi ak + a` > aN + b et k, ` ∈ P
• xk ≤ x` for all x ∈ S ssi ak + a` > aN + b et k ∈ P, ` ∈ N
• xk + x` ≥ 1 for all x ∈ S ssi ak + a` > aN + b et k, ` ∈ N
7
Pour la première inégalité aN + b = 9 (si on utilise le formalisme précédent), ce qui
implique les contraintes suivantes
x3 + x5 ≤ 1
x1 + x2 ≤ 1
x1 + x3 ≤ 1
x2 + x3 ≤ 1
x3 ≤ x4 .
Alors que pour la deuxième inégalité aN + b = 7 et on obtient les contraintes suivantes
x5 = 0
x1 + x3 ≥ 1
x1 ≥ x4
ainsi que d’autres contraintes impliquant x5 mais qui sont inintéressantes par x5 = 0.
En combinant ces inégalités on obtient aussi x1 + x3 = 1, et x1 ≥ x4 ≥ x3 , ce qui force
x1 = 1 et x3 = 0, ainsi que x2 = 0, alors que x4 reste libre. Mais pour maximizer l’objectif
il faut poser x4 = 1 et obtenir la valeur optimale de 18.
A.5
Programmation linéaire
Une manière simple de prouver l’optimalité est de considérer le programme linéaire dual
min4y1 + y2 + y3
s.t.y1 + 2y2 ≥ 1
s.t.2y1 − y2 − y3 ≥ 1
s.t.2y1 + 2y3 ≥ 1
y1 , y2 , y3 ≥ 0
On va donner une solution optimale y pour le PL dual. Par les conditions de complementary
slackness il faut que les deux première contraintes du dual soient saturées, et y3 = 0.
En posant l’égalité entre les parties gauche des deux première contraintes on obtient
y1 = 3y2 , et on retrouve un programme linéaire à une seule variable qu’on peut résoudre
facilement. La solution optimale est y1 = 0.6, y2 = 0.2, y3 = 0.
Les conditions de complementary slackness impliquent optimalité.
Un argument plus simple était d’additioner les deux premières contraintes avec coefficients
3/5 et 1/5 respectivement pour obtenir
6
13
x1 + x2 + x3 ≤
= 2, 6.
5
5
Comme la partie de droite domine membre par membre l’objectif, il s’avère que 2,6 est une
borne supérieure pour l’optimum, ce qui établi l’optimalité de la solution donnée.
8
A.6
Vertex Cover
Si tous les sommets ont degré 1 au plus, l’algorithme devrait retourner Vrai ssi k ≥ m, car
le graphe est alors constitué de m arêtes sommets disjoints, pour lesquels il faut bien m
sommets pour les couvrir.
Sinon soit u un sommet de degré d ≥ 2. S’il existe une solution à ce problème, soit u fait
partie de la solution, soit u ne fait pas partie. Dans le dernier cas, tous les voisins N (u) de
u doivent faire partie de la solution. Donc l’algorithme A devrait retourner A(k − 1, E 0 ) ∨
A(k − d, E 00 ), où E 0 est l’ensemble de toutes les arêtes ne contenant pas u et E 00 l’ensemble
de toutes les arêtes ne contenant pas N (u). Comme le travail à effectuer à chaque étape est
essentiellement trouver le sommet de degré maximum, sa complexité est d’ordre O(m), et la
complexité T (k, m) suit la récursion demandée.
A.7
Radio européenne
Le modèle comporte les variables binaires Xpmg pour chaque pays p, mois m et genre g avec
1 ≤ p, m, g ≤ 12.
Les contraintes sont faciles à coder :
P
1. ∀p, m : g Xpmg = 1 — exactement un genre chaque mois dans chaque pays
P
2.
m X1m1 ≥ 6 — variété française
P
3.
p,m Xpm2 ≥ d12 ∗ 12 · 20%e = 29 — Jazz
4. ∀p, ∀g, ∀m ≤ 9 : Xp,m,g + Xp,m+1,g + Xp,m+2,g ≤ 2 — pas trois fois le même genre à la
suite
P
5. Minimiser k avec ∀g : m,p Xpmg ≤ k — sans cette variable k, pas de forme linéaire
possible
A.8
Ordonnancement d’atélier
Notre modèle comporte deux types de variables. Xrj indique le début de la r-ème opération
de la tâche j, et c’est une variable non-négative. Puis pour i, j, k, avec j 6= k, Yijk est une
variable booléenne qui indique si sur la machine i la tâche j s’exécute avant la tâche k.
Le fait que les opérations d’une tâche s’exécutent dans l’ordre sans chevauchement s’exprime
comme
∀j∀r < m : Xrj + p(σ(j, r), j) ≤ Xr+1,j .
Le fait que j et k s’exécutent dans un certain ordre sur une machine i s’exprime comme
∀i∀j∀k, j 6= k : Yijk + Yikj = 1.
9
Puis le non-chevauchent des opérations s’exprime avec
P les contraintes suivantes, pour M une
constante suffisamment grande, par exemple M := i,j p(i, j).
∀j, k, r, `, i, j 6= k, σ(j, r) = σ(k, `) = i :X`,k + p(i, k) − Xr,j ≤ M Yijk
Xr,j + p(i, j) − X`,k ≤ M Yikj .
Finalement l’objectif est de minimiser un temps T avec
∀r, j, i, σ(j, r) = i : Xrj + p(i, j) ≤ T.
10