Cours 6: Algorithmes approchés Algorithme 1/2-approché pour COUVRANT-MIN Donnée: Un graphe G non-orienté Problème: Trouver un ensemble de sommets qui couvre les arêtes. Algorithme: F := E; Y := ∅ Tant que F est non vide: Choisir une arête f dans E ajouter ses 2 extrémités dans Y et supprimer de F toutes les arêtes couvertes. • Algorithmes approchés • Schémas d’approximation • Bin-packing: approximable. Remarque: si G est un couplage |G| < |C| pour tout couvrant C. Or les arêtes utilisées pour former Y forment un couplage: |Y |/2 < |C| < |Copt | D’où ε = 3-1 |Y |−|Copt | |Y | ≤ 1 , 2 ou encore θ = |Y | |Copt | ≤ Gilles Schaeffer • Sac-à-dos : très bien approximable • Voyageur de commerce : non approximable 1 . 2 • Backtracking, branch and bound INF-551-6: Algorithmes approchés 1-1 Rangement optimal et approximation Problème: Trouver parmi les solutions d’un problème celle qui optimise une fonction f . Problème: Ranger les objets dans un nombre minimum de boites. avec 2 boites: 61+40+19=120 P = 120 Un algorithme est ε-approché s’il donne un X qui satisfait 41+49+20+19=120. f (Xopt )−f (X) f (Xopt ) Algorithme glouton: ranger les objets p1 ≥ p2 ≥ . . . ≥ pn , puis mettre successivement les objets dans la première boite possible: 61 + 41 + 20 Théorème: L’algorithme glouton utilise Exemple: 40 + 40 + 19 au plus 1 + 23 Nopt boites. 19 Preuve: • Si tous les objets ont poids ≥ P/3, alors glouton est optimum: p1 ≥ . . . ≥ pi ≥ 23 P ≥ pi+1 ≥ . . . ≥ pj ≥ 21 P ≥ pj+1 ≥ . . . ≥ pn ≥ 31 P • Si chaque boite contient un objet de poids > 1 P 3 INF-551-6: Algorithmes approchés Algorithmes approchés Données: n objets de poids p1 , . . . , pn , et des boites de capacité P . Exemple: 61, 41, 40, 40, 20, 19, 19 Gilles Schaeffer ≤ε si Xopt maximise f On veut ε proche de 0. f (X)−f (Xopt ) f (X) ≤ε si Xopt minimise f Un algorithme approche l’optimum à un facteur θ si max alors glouton optimum. f (Xopt ) f (X) , f (Xopt ) f (X) ≤θ On veut θ proche de 1. • Sinon toutes les boites sauf une sont remplies à plus des 2/3. 4-1 Gilles Schaeffer INF-551-6: Algorithmes approchés 2-1 Gilles Schaeffer INF-551-6: Algorithmes approchés Voyageur du commerce et inapproximabilité Données: un graphe G et une valuation des arêtes (”distances entre villes”) Problème: Trouver un ordre de visite des villes qui minimise la distance. Théorème: algo polynomial ε < 1 approché pour le voyageur de commerce ⇒ algorithme polynomial pour Hamiltonien ⇒ P = N P. Problème Hamiltonien: étant donné un graphe, trouver un cycle qui visite une et une seule fois les sommets. N P-complet (cf poly) Rangement optimal et limite de l’approximabilité Théorème: algorithme polynomial ε < 13 approché pour RangeOpt ⇒ algorithme polynomial pour Partition ⇒ P = N P. Problème Partition:Ptrouver uneP partition S1 , S2 d’un ensemble fini d’entiers S telle que s∈S1 s = s∈S2 s = S/2. Preuve que Partition est N P-complet: clairement dans N P Réduction de SommePartielle à Partition. Preuve du théorème: soit G un graphe (instance de Hamiltonien) 1 et on constuit la valuation: • On pose k entier ≥ 1−ε v(x, y) = 1 si (x, y) arête de G, v(x, y) = nk + 1 sinon. Preuve du théorème: E = {e1 , e2 , . . . , en } une instance de Partition P On considère le problème RangOpt avec P = 21 ei • Si on a une ε-approx de valuation n alors G admet un cycle hamiltonien, sinon la valuation trouvée est x ≥ (n − 1) + (nk + 1) et o comme n+nk−C ≤ ε, on a Co ≥ n(1 + k)(1 − ε) > n. n+nk 7-1 Gilles Schaeffer INF-551-6: Algorithmes approchés et on suppose d’y appliquer un algorithme ε < 5-1 Gilles Schaeffer INF-551-6: Algorithmes approchés Gilles Schaeffer INF-551-6: Algorithmes approchés Sac à dos et schéma d’approximation Données: des poids p1 , . . . , pn , des gains a1 , . . . , ap et la capacité P `P ´ P Problème: Trouver max i a i xi | i pi xi ≤ P, xi ∈ {0, 1} Donnée: un problème de décision à résoudre (par exemple une formule SAT) Algorithme générique: • à chaque étape on a un ensemble S de pbs, il faut en résoudre un • choisir un des problèmes P de S, le décomposer en union de plusieurs problèmes P1 , . . . , Pk tels que résoudre l’un des Pi résoud P – si l’un des problèmes Pi a une solution facile, la donner – éliminer les Pi trivialement sans solution et remplacer P par les autres • recommencer jusqu’à ce que S soit vide ou qu’on ait trouvé une solution. 8-1 approché. • si la réponse est 2, il y a une solution à Partition • sinon, la réponse est 3 ou plus et il n’y a pas de solution avec 2 boites > ε), et donc pas de solution à Partition (car 3−2 3 Exploration arborescente ou backtracking Remarque: la façon habituelle de générer les Pi est de partitionner l’espace de recherche en imposant des contraintes aux solutions. ⇒ programmation par contrainte Exemple pour 3-SAT: • dans S on prend une formule avec une clause à 1 ou 2 variables, ou sinon une formule avec un petit nombre de clause • on remplace la formule courante par 2 formules, obtenue en mettant l’une des variables à Vrai ou Faux (choisir la variable ”la plus” contrainte) 1 3 Théorème (Schéma d’approximation polynomial): Pour tout ε il existe un algorithme ε-approché pour le problème Sac-à-dos de complexité O(n3 /ε). Idée: • On utilise la programmation dynamique sur des données arrondies: ai On pose bi = ⌊ 10 k ⌋ pour un k bien choisi. Par programmation dynamique, on obtient l’optimum {x′i } du problème 2 arrondi en temps O(n2 M ′ ) = O( n10M k ) où M = max(ai ). • On compare l’approximation du problème exact donnée par {x′i } à un optimum {xi }: P P P P P k ′ ′ k k k i 10 bi xi ≥ i a i xi ≥ i ai xi − n10 i (ai − 10 )xi ≥ i 10 bi xi ≥ Si k ≥ log10 6-1 Gilles Schaeffer Ao ε n ≥ log10 Mε , n 3 on a une ε-approximation en temps O( nε ). INF-551-6: Algorithmes approchés Partition équitable d’un graphe Séparation-évaluation ou branch and bound Données: un graphe G, une valuation v des arêtes Problème: trouver une partition X1 , XX 2 des sommets tq v(x, y) minimal |X1 | = |X2 | ± 1, et Donnée: un problème d’optimisation sous contraintes, dont on connait une solution faisable Branch On constuit un arbre d’exploration des solutions faisables x∈X1 ,y∈X2 Modélisation quasi-linéaire: une variable xi par sommet, à valeur {0, 1} P P n/2 − 1 ≤ i xi ≤ n/2 + 1, minimiser (i,j)∈E vi,j |xi − xj | Bound: Ne pas explorer les sous-arbres dont on peut dire qu’ils ne donneront pas de solution plus intéressante que celle qu’on a déjà. Branch and bound ? il faut les ingrédients suivants... • une solution initiale heuristique ! influe beaucoup sur l’efficacité pour PartitionÉquitable: démarrer avec X1 := {x1 } ⇒ il faut une fonction qui borne la valeur des solutions dans un sous-arbre. Pour i de 1 à n/2, ajouter à X1 le sommet y dont la somme des distances aux éléments de X1 est maximale. 11-1 Gilles Schaeffer INF-551-6: Algorithmes approchés Gilles Schaeffer 9-1 Partition équitable d’un graphe INF-551-6: Algorithmes approchés Partition équitable d’un graphe Données: un graphe G, une valuation v des arêtes Problème: trouver une partition X1 , XX 2 des sommets tq v(x, y) minimal |X1 | = |X2 | ± 1, et Données: un graphe G, une valuation v des arêtes Problème: trouver une partition X1 , XX 2 des sommets tq v(x, y) minimal |X1 | = |X2 | ± 1, et x∈X1 ,y∈X2 x∈X1 ,y∈X2 Modélisation quasi-linéaire: une variable xi par sommet, à valeur {0, 1} P P n/2 − 1 ≤ i xi ≤ n/2 + 1, minimiser (i,j)∈E vi,j |xi − xj | Modélisation quasi-linéaire: une variable xi par sommet, à valeur {0, 1} P P n/2 − 1 ≤ i xi ≤ n/2 + 1, minimiser (i,j)∈E vi,j |xi − xj | Branch and bound ? il faut les ingrédients suivants... • un moyen de diviser le problème P en sous problèmes P1 , . . . , Pk tels que l’ensemble des solutions de P soit couvert On divise l’espace des solutions en ajoutant des contraites: le plus simple est d’instancier des variables bien choisies pour PartitionÉquitable: on choisit une variable xj et on divise le problème en deux, suivant que xj ∈ X1 ou xj ∈ X2 . Branch and bound ? il faut les ingrédients suivants... • une solution initiale • une stratégie de parcours de l’arbre (choix du P à décomposer) • un moyen de diviser le problème P en sous problèmes P1 , . . . , Pk tels que l’ensemble des solutions de P soit couvert • une fonction g(Pi ) qui donne une bonne borne sur l’optimum dans Pi . idée: à chaque étape on élimine les Pi tels que g(Pi ) est moins bon que la meilleure solution trouvée jusqu’ici. 12-1 Gilles Schaeffer INF-551-6: Algorithmes approchés 10-1 Gilles Schaeffer INF-551-6: Algorithmes approchés Partition équitable d’un graphe Données: un graphe G, une valuation v des arêtes Problème: trouver une partition X1 , XX 2 des sommets tq v(x, y) minimal |X1 | = |X2 | ± 1, et x∈X1 ,y∈X2 Modélisation quasi-linéaire: une variable xi par sommet, à valeur {0, 1} P P n/2 − 1 ≤ i xi ≤ n/2 + 1, minimiser (i,j)∈E vi,j |xi − xj | Branch and bound ? il faut les ingrédients suivants... • une fonction g(Pi ) qui donne une bonne borne sur l’optimum dans Pi . c’est le problème le plus délicat dans la méthode... pour PartitionÉquitable: On a affecté partiellement X1 et X2 , et les sommets de Y restent, et on pose p = |X1 |, q = |X2 |. Alors le coût minimal d’une solution de ce type sera au moins la somme du − q plus petite entre coût des arêtes suivantes: entre X1 et X2 ; les n 2 n chaque élément de X1 et Y ; les 2 − p plus petites entre chaque élément de X2 et Y , les ( n − p)( n 2 − q) plus petites entre les éléments de Y . 2 / 13-1 Gilles Schaeffer INF-551-6: Algorithmes approchés