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