Algorithmes d’approximation et Big Data Lionel Eyraud-Dubois et Olivier Beaumont 2015-2016 Dans ce cours : Algorithmes d’approximation I Définition I Algorithmes gloutons : Vertex Cover, TSP, Bin Packing I Approximation pour l’ordonnancement I À base de programmes linéaires I Schémas d’approximation : Sac à Dos I Énumération partielle : Problèmes d’optimisation Définition : (problème d’optimisation) Un problème d’optimisation est défini par un ensemble d’instances I, et pour chaque instance I ∈ I : I un ensemble de solutions valides S(I ) I Une fonction objective f : S(I ) → Q (ou N) Définition : (problème de décision associé) Le problème de décision associé à un problème d’optimisation P est DecP défini par : I IDecP = IP × Q I + IDec = {(I , v )/∃s, fI (s) ≤ v } P (≥ v si maximisation) Algorithmes d’approximation Définition : (approximation relative) Un algorithme A est une ρ-approximation d’un problème P si : 1. Il résoud P : ∀I ∈ IP , A(I ) ∈ SP (I ) 2. En temps polynomial : ∃p poly, ∀I ∈ IP , temps(A, I ) ≤ p(|I |) 3. De manière approchée : ∀I ∈ IP , ∀s ∈ SP (I ), f (A(I )) ≤ ρf (s) (≥ si maximisation) I Valeur optimale de f pour l’instance I : Opt(I ) = mins∈S(I ) f (s), parfois notée f ∗ (I ) I Alors (3) devient ∀I ∈ IP , f (A(I )) ≤ ρOpt(I ). I Ratio d’approximation de A : le plus petit ρ tel que A est une ρ-approximation. I Approximation additive : ∀I ∈ IP , f (A(I )) ≤ Opt(I ) + µ Plan du cours Algorithmes gloutons Vertex Cover I Présentation de la notion d’algorithme glouton Problème VertexCover I = {graphes}, S(G ) = {couvertures de G }, f (G , s) = card(s) I Étant donné un graphe, donner une couverture de taille minimale Algorithme glouton qui n’est pas une approximation Vertex Cover I Présentation de la notion d’algorithme glouton Problème VertexCover I = {graphes}, S(G ) = {couvertures de G }, f (G , s) = card(s) I Étant donné un graphe, donner une couverture de taille minimale Algorithme glouton qui n’est pas une approximation Random choisir un nœud au hasard jusqu’à avoir une couverture Vertex Cover I Présentation de la notion d’algorithme glouton Problème VertexCover I = {graphes}, S(G ) = {couvertures de G }, f (G , s) = card(s) I Étant donné un graphe, donner une couverture de taille minimale Algorithme glouton qui n’est pas une approximation Random choisir un nœud au hasard jusqu’à avoir une couverture DegMax rajouter un nœud de degré maximal jusqu’à avoir une couverture Vertex Cover I Présentation de la notion d’algorithme glouton Problème VertexCover I = {graphes}, S(G ) = {couvertures de G }, f (G , s) = card(s) I Étant donné un graphe, donner une couverture de taille minimale Algorithme glouton qui n’est pas une approximation Random choisir un nœud au hasard jusqu’à avoir une couverture DegMax rajouter un nœud de degré maximal jusqu’à avoir une couverture I Algorithme glouton 2-approché Vertex Cover I Présentation de la notion d’algorithme glouton Problème VertexCover I = {graphes}, S(G ) = {couvertures de G }, f (G , s) = card(s) I Étant donné un graphe, donner une couverture de taille minimale Algorithme glouton qui n’est pas une approximation Random choisir un nœud au hasard jusqu’à avoir une couverture DegMax rajouter un nœud de degré maximal jusqu’à avoir une couverture I Algorithme glouton 2-approché Super rajouter les deux extrémités d’une arête jusqu’à avoir une couverture Bonus : DegMax n’est pas une approximation Pour k fixé, soit G = (U ∪ V , E ) le graphe biparti suivant : I I U contient k nœuds V est divisé en k parties Vi I I Chaque nœud de Vi est connecté à i nœuds de U Donc card(Vi ) = ki , et deg(u) ≤ k pour u ∈ U U V1 V2 P k ≥ V3 Pk k i=1 ( i I card(V ) = I Donc card(V ) ≥ k(log k − 1) i i V4 V5 V6 V7 V8 V9 V10 − 1) = k Pk 1 i=1 i −k Bonus : DegMax n’est pas une approximation I card(V ) ≥ k(log k − 1) I deg(v ) = i pour v ∈ Vi , et deg(u) ≤ k pour u ∈ U U V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 I U est une couverture de taille k. I Il est possible que Glouton prenne tous les nœuds de V : après avoir pris Vk , Vk−1 , . . . , Vi−1 , le degré restant des nœuds de U est ≤ i. I Donc ∀k ∈ N, ∃I ∈ I, f (Glouton(I )) ≥ (log k − 1)f ∗ (I ) Bonus : DegMax est une O(ln n)-approximation Théorème : Pour tout m, DegMax est une (1 + ln m)-approximation pour VertexCover restreint aux graphes à au plus m arêtes. Preuve : I Soit Ei = {arêtes non couvertes après i itérations} I Soit f ∗ la taille optimale d’une couverture de G I À l’étape i, on peut couvrir toutes les arêtes avec f ∗ nœuds I Donc le degré max. d’un nœud est au moins I Donc |Ei+1 | ≤ (1 − I |Ei | ≤ (1 − 1 i f∗) |E | f ∗ (ln m 1 f ∗ ) |Ei | ∗ ≤ e −i/f |Ei | f∗ |E | + 1), |Ej | < 1 I Pour j = I Donc DegMax termine en au plus f ∗ (1 + ln m) itérations. Bin Packing Problème BinPacking I Instance : n entiers ai , taille de boı̂te B, avec ∀i, ai ≤ B I Solution : partition de [1, n] en (Bj )1≤j≤k telles que P ∀j, i∈Bj ai ≤ B I Objectif : minimiser le nombre de boı̂tes k. I Le problème de décision associé à BinPacking est NP-complet. Algorithme glouton : NextFit S ← ∅ ; B ← ∅; pour chaque objet i faire si ai rentre dans B alors B ← B ∪ {i}; sinon S ← S ∪ B ; B ← {i} ; fin retourner S; I Bin Packing : NextFit NextFit Pour chaque objet, le rajouter dans la boı̂te courante s’il peut y entrer. Sinon, ouvrir une nouvelle boı̂te. Théorème : NextFit est une 2-approximation pour BinPacking. Preuve : Bin Packing : NextFit NextFit Pour chaque objet, le rajouter dans la boı̂te courante s’il peut y entrer. Sinon, ouvrir une nouvelle boı̂te. Théorème : NextFit est une 2-approximation pour BinPacking. Preuve : I Soit I une instance, S = P i ai . Clairement, Opt(I ) ≥ S B . Bin Packing : NextFit NextFit Pour chaque objet, le rajouter dans la boı̂te courante s’il peut y entrer. Sinon, ouvrir une nouvelle boı̂te. Théorème : NextFit est une 2-approximation pour BinPacking. Preuve : I I P ai . Clairement, Opt(I ) ≥ P Soit (B1 , . . . , Bk ) = NextFit(I ), et Sj = i∈Bj ai Soit I une instance, S = i S B . Bin Packing : NextFit NextFit Pour chaque objet, le rajouter dans la boı̂te courante s’il peut y entrer. Sinon, ouvrir une nouvelle boı̂te. Théorème : NextFit est une 2-approximation pour BinPacking. Preuve : I I I P ai . Clairement, Opt(I ) ≥ P Soit (B1 , . . . , Bk ) = NextFit(I ), et Sj = i∈Bj ai Soit I une instance, S = i S B . Les objets contenus dans deux boı̂tes consécutives ne tiennent pas dans une boı̂te : ∀j < k, Sj + Sj+1 > B Bin Packing : NextFit NextFit Pour chaque objet, le rajouter dans la boı̂te courante s’il peut y entrer. Sinon, ouvrir une nouvelle boı̂te. Théorème : NextFit est une 2-approximation pour BinPacking. Preuve : I I I I P ai . Clairement, Opt(I ) ≥ P Soit (B1 , . . . , Bk ) = NextFit(I ), et Sj = i∈Bj ai Soit I une instance, S = i S B . Les objets contenus dans deux boı̂tes consécutives ne tiennent pas dans une boı̂te : ∀j < k, Sj + Sj+1 > B P P En sommant, on a (k − 1)B < k−1 j=1 Sj + Sj+1 ≤ 2 j Sj Bin Packing : NextFit NextFit Pour chaque objet, le rajouter dans la boı̂te courante s’il peut y entrer. Sinon, ouvrir une nouvelle boı̂te. Théorème : NextFit est une 2-approximation pour BinPacking. Preuve : I I I I I P ai . Clairement, Opt(I ) ≥ P Soit (B1 , . . . , Bk ) = NextFit(I ), et Sj = i∈Bj ai Soit I une instance, S = i S B . Les objets contenus dans deux boı̂tes consécutives ne tiennent pas dans une boı̂te : ∀j < k, Sj + Sj+1 > B P P En sommant, on a (k − 1)B < k−1 j=1 Sj + Sj+1 ≤ 2 j Sj S S Donc k − 1 < 2 B , d’où k ≤ 2 B ≤ 2Opt(I ) Bin Packing : NextFit Théorème : Le ratio d’approximation de NextFit est exactement 2. Preuve : I Pour tout n, on considère l’instance In qui contient 2n objets : (1, n, 1, n, . . . , 1, n), avec B = n. I ∀n, Opt(In ) = n + 1 I NextFit met chaque objet dans des boı̂tes différentes I Donc kNF (In ) = 2n I limn→+∞ I NextFit n’est pas une ρ-approximation pour tout ρ < 2. kNF (In ) Opt(In ) =2 Bin Packing : First Fit Decreasing Autre algorithme très connu : FirstFitDecreasing Trier les ai dans l’ordre décroissant; ∀j, Bj ← ∅; pour chaque objet i dans l’ordre faire Soit ji le plus petit j tel que ai rentre dans Bj ; Bji ← Bji ∪ {i} ; fin retourner {Bj |Bj non vide}; Théorème FirstFitDecreasing est une 23 -approximation asymptotique : 3 ∀I , kFFD (I ) ≤ Opt(I ) + 1 2 Bin Packing : First Fit Decreasing Théorème ∀I , kFFD (I ) ≤ 32 Opt(I ) + 1 Preuve : I 4 catégories d’objets : A = {ai > 23 } B = { 23 ≥ ai > 21 } C = { 12 ≥ ai > 31 } D = { 31 ≥ ai } Bin Packing : First Fit Decreasing Théorème ∀I , kFFD (I ) ≤ 32 Opt(I ) + 1 Preuve : I I 4 catégories d’objets : A = {ai > 23 } B = { 23 ≥ ai > 21 } C = { 12 ≥ ai > 31 } D = { 31 ≥ ai } S’il existe dans FFD(I ) une boı̂te incluse dans D : I I Pour toute boı̂te Bj (sauf la dernière), Sj > 23 B. Donc BS > 23 · (kFFD − 1) Bin Packing : First Fit Decreasing Théorème ∀I , kFFD (I ) ≤ 32 Opt(I ) + 1 Preuve : I I 4 catégories d’objets : A = {ai > 23 } B = { 23 ≥ ai > 21 } C = { 12 ≥ ai > 31 } D = { 31 ≥ ai } S’il existe dans FFD(I ) une boı̂te incluse dans D : I I I Pour toute boı̂te Bj (sauf la dernière), Sj > 23 B. Donc BS > 23 · (kFFD − 1) Sinon, soit I 0 = I \D. Alors kFFD (I 0 ) = kFFD (I ) I I I I Clairement, Opt(I 0 ) ≤ Opt(I ) FFD est optimal pour I 0 . Dans toute solution : Les objets de A sont seuls, au plus un objet de B par boı̂te, au plus 2 objets de B ∪ C par boı̂te FFD apparie optimalement les objets de C et de B. Bin Packing : autres résultats I Si on ne trie pas les objets avant, on obtient FirstFit. I I 17 10 Si P 6= NP, il n’existe pas de ρ-approximation pour BinPacking avec ρ < 32 . I I Ratio d’approximation de FirstFit : Pourquoi ? On peut montrer ∀I , kFFD (I ) ≤ 11 9 Opt(I ) + 1 [Yue, 1991] Voyageur de commerce Tsp I Instance : une matrice de distance d(i, j) pour i, j ≤ n I Solution : un parcours de toutes les villes, i.e. une permutation σ de [1, n] I Objectif : minimiser la distance du parcours σ, i.e. P n−1 i=1 d(σ(i), σ(i + 1)) + d(σ(n), σ(1)) I La version de décision TspDec est NP-complet. Si P 6= NP, il n’existe pas d’algorithme ρ-approché pour tout ρ ≥ 1. Pourquoi ? I I Problème TriangleTsp : restreint aux matrices qui vérifient l’inégalité triangulaire ∀i, j, k ∈ [1, n], d(i, k) ≤ d(i, j) + d(j, k) Voyageur de commerce avec inégalité triangulaire TriangleTsp Tsp tel que ∀i, j, k ∈ [1, n], d(i, k) ≤ d(i, j) + d(j, k) Algorithme ApproxTsp Calculer un MST T de G ; Choisir arbitrairement une racine u; Parcourir T depuis u en profondeur; Renvoyer l’ordre obtenu; I Théorème : ApproxTsp est une 2-approximation pour TriangleTsp Voyageur de commerce avec inégalité triangulaire TriangleTsp Tsp tel que ∀i, j, k ∈ [1, n], d(i, k) ≤ d(i, j) + d(j, k) Algorithme ApproxTsp Calculer un MST T de G ; Choisir arbitrairement une racine u; Parcourir T depuis u en profondeur; Renvoyer l’ordre obtenu; I Théorème : ApproxTsp est une 2-approximation pour TriangleTsp I Si T est un arbre couvrant de poids minimum, alors P e=(i,j)∈T d(i, j) ≤ OptTriangleTsp