Chapitre 8 : Flots dans les réseaux Algorithmique de graphes Sup Galilée-INFO2 Sylvie Borne 2011-2012 Chapitre 8 : Flots dans les réseaux - 1/57 Plan 1 Flot réalisable 2 Le problème du flot maximum Exemple Plusieurs sources, plusieurs puits Flot maximum et programmation linéaire 3 Chaı̂nes augmentantes 4 Algorithme de Ford et Fulkerson (1961) Procédure de marquage (labelling) Algorithme de la chaı̂ne augmentante Algorithme de Ford et Fulkerson 5 La coupe minimum Implémentation et complexité de l’algorithme de Ford et Fulkerson 6 Chapitre 8 : Flots dans les réseaux - 2/57 Problème de flot Problème de plus court chemin → une personne seule de la source à la destination. Problème de flot → acheminement d’une quantité de marchandises (divisibles : on peut acheminer nos marchandises par des routes différentes) de la source vers la destination. Chapitre 8 : Flots dans les réseaux - 3/57 Problème de flot : Applications Applications : logistique : transport de marchandises : train, camion, bateau,. . . distribution d’eau (canalisations) transport de pétrole : réseauè de pipelines énergie : réseau EDF, centrales → clients information : réseau téléphonique, réseau d’entreprises, internet. Chapitre 8 : Flots dans les réseaux - 4/57 Réseau de transport Définition : réseau de transport ~ ), s, t, c) est formé Un réseau de transport noté R = (G = (V , E de : ~ ) un graphe orienté G = (V , E s ∈ V appelé sommet source t ∈ V appelé sommet destination ou puits ~ → N, Q+ fonction capacité (à chaque arc (i, j) ∈ E ~ est c :E associée une capacité c(i, j) ≥ 0). Remarque : s et t sont deux sommets particuliers de G . Chapitre 8 : Flots dans les réseaux - Flot réalisable 5/57 Flot réalisable Définition : flot réalisable ~ ), s, t, c) un réseau. Un flot f dans R est Soit R = (G = (V , E une application f :→ N, Q+ . Un flot f est réalisable dans R si 1 contrainte de capacité ~ 0 ≤ f (i, j) ≤ c(i, j) ∀(i, j) ∈ E 2 contraintes de conservation de flot (Loi de Kirschoff) X X f (i, j) − f (j, k) = 0 ∀j ∈ V \{s, t} ~ i | (i,j)∈E ~ k | (j,k)∈E (quantité qui entre dans j = quantité qui sort de j) Chapitre 8 : Flots dans les réseaux - Flot réalisable 6/57 Flot réalisable Exemple : v1 ( ?) capacité s (5) 5 (4) x 3 flot t (2) 2 7 (7) 5 (6) v2 Le flot est réalisable. Chapitre 8 : Flots dans les réseaux - Flot réalisable contraintes de capacité Ok contraintes de conservation de flot Ok en v1 : 5-2-3=0 en v2 : 5+2-7=0 7/57 Valeur d’un flot Définition : valeur d’un flot ~ ), s, t, c) un réseau. Soit R = (G = (V , E La valeur d’un flot f réalisable entre s et t est la quantité de flot envoyéeX de s à t. On la X note F et F = f (s, i) − f (j, s) = ~ Xi | (s,i)∈E f (i, t) − ~ i | (i,t)∈E ~ Xj | (j,s)∈E f (t, j) ~ j | (t,j)∈E Exemple : Ici, la valeur du flot est de 10. (F = 5 + 5 = 3 + 7 = 10). Chapitre 8 : Flots dans les réseaux - Flot réalisable 8/57 Arc saturé Définition : arc saturé Un arc (i, j) est dit saturé pour un flot f si f (i, j) = c(i, j). Exemple : v1 ( ?) capacité s (5) 5 (4) x 3 t (2) 2 5 (6) flot 7 (7) v2 Ici, les arcs (s, 1), (1, 2) et (2, t) sont saturés. Les arcs (s, 2) et (1, t) ne le sont pas. Chapitre 8 : Flots dans les réseaux - Flot réalisable 9/57 Arc retour Remarque : Pour que la contrainte de conservation de flot soit vérifiée en tout sommet (y compris (s et t), on ajoute un arc artificiel (t, s) de capacité infinie et appelé arc de retour. v1 s (5) 5 (4) 3 t (2) 2 5 (6) 7 (7) Si aucun autre arc n’entre en s, la valeur F du flot f est alors donnée à f (t, s). v2 F = 10 (+∞) Chapitre 8 : Flots dans les réseaux - Flot réalisable 10/57 Le problème du flot maximum Problème : ~ ), s, t, c). Soit un réseau R = (G = (V , E Le problème du flot maximum consiste à déterminer un flot réalisable entre s et t qui soit de valeur maximum. Chapitre 8 : Flots dans les réseaux - Le problème du flot maximum 11/57 Le problème du flot maximum : exemple Exemple : On remarque que le flot donné dans le réseau précédent n’est pas maximum. En effet, on peut trouver un flot de valeur 11. v1 s (5) 5 (4) 4 t (2) 1 11 11 6 (6) 7 (7) v2 Ce nouveau flot est maximum. En effet, on remarque qu’au mieux il peut rentre 11 unités de flot dans t à cause des capacités 4 et 7 sur les arcs entrants. Chapitre 8 : Flots dans les réseaux - Le problème du flot maximum 12/57 Plusieurs sources, plusieurs puits Remarque : Le problème du flot maximum peut être généralisé de la manière suivante : Supposons qu’il existe un ensemble de sommets sources et un ensemble de puits. On désire déterminer un flot max qui peut être envoyé de toutes les sources aux différents puits. Ce problème peut être ramené au problème précédent en ajoutant une super-source s0 et un super-puits t0 . On relie la super-source à toutes les sources avec des arcs de capacité infinie et on relie le super-puits aux différents puits avec des arcs de capacité infinie. Le problème se ramène alors à un problème de flot max de s0 à t0 . Chapitre 8 : Flots dans les réseaux - Le problème du flot maximum 13/57 Plusieurs sources, plusieurs puits Exemple : sources : v1 et v2 et puits : v4 et v5 v1 (+∞) s0 v4 (4) (1) v2 Chapitre 8 : Flots dans les réseaux - (4) v3 (2) (+∞) (+∞) (2) (3) (+∞) (1) 1 Le problème du flot maximum t0 v5 14/57 Flot maximum et PL ~ Soient f (i, j) = flot transitant sur l’arc (i, j) ∀(i, j) ∈ E F = valeur du flot f Le problème du flot maximum entre s et t peut se formuler de la manière suivante : Max s.c. F −F 0 f (i, j) − f (j, k) = F i | (i,j)∈~ E k | (j,k)∈~ E X X 0 ≤ f (i, j) ≤ c(i, j) si j = s si j = 6 s, t si j = t ∀j ∈ V ~ ∀(i, j) ∈ E ~ | + 1 variables Ce programme linéaire a |E ~ | + |V | contraintes. et 2|E Chapitre 8 : Flots dans les réseaux - Le problème du flot maximum 15/57 Chaı̂nes augmentantes Exemple : v1 (5) s (4) t (2) (7) (6) v2 Pour déterminer un flot maximum dans ce réseau, on peut commencer par envoyer du flot sur des chemins de s à t. Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 16/57 Chaı̂nes augmentantes → Par exemple, on peut commencer par envoyer un flot de 2 sur le chemin (s, 1, 2, t). v1 (5) s (4) t (2) (7) (6) v2 Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 17/57 Chaı̂nes augmentantes → Vu qu’il y a une réserve de capacité de 3 sur le chemin (s, 1, t), on peut envoyer 3 unités de flot. v1 s (5) 2 (4) 0 t (2) 2 2 0 (6) 2 2 (7) v2 Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 18/57 Chaı̂nes augmentantes → Vu qu’il reste une réserve de 5 sur le chemin (s, 2, t), on peut envoyer un flot de 5 sur ce chemin. v1 s (5) 5 (4) 3 t (2) 2 5 5 2 0 (7) (6) v2 Mais ce flot n’est pas maximum. Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 19/57 Chaı̂nes augmentantes Considérons la chaı̂ne v1 (4) 3 s (2) 2 t 5 (6) v2 On remarque que l’on peut : augmenter le flot de 1 sur (s, 2), diminuer le flot de 2 sur (1, 2), augmenter le flot de 1 sur (1, t). Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 20/57 Chaı̂nes augmentantes Donc en augmentant le flot de 1 sur les arcs (s, 2) et (1, t) et en le diminuant de 1 sur l’arc (1, 2) on aura le flot réalisable suivant : v1 s (5) 5 (4) 3 t (2) 2 10 10 7 5 (7) (6) v2 Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 21/57 Chaı̂nes augmentantes Les contraintes de conservation de flot sont respectées. v1 v1 +1 -1 t s -1 +1 v2 Chapitre 8 : Flots dans les réseaux - v2 Chaı̂nes augmentantes 22/57 Chaı̂nes augmentantes Définition : chaı̂ne augmentante Une chaı̂ne C entre s et t est dite augmentante par rapport à un ~ ) réalisable entre s et t si flot f = (f (i, j), (i, j) ∈ E ~ ) arc conforme) f (i, j) < c(i, j) si (i, j) ∈ C + ((i, j) ∈ E ~ ) arc non conforme) f (i, j) > 0 si (i, j) ∈ C − ((j, i) ∈ E où C + est l’ensemble des arcs de C rencontrés dans le bon sens et C − est l’ensemble des arcs de C rencontrés dans le sens contraire. Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 23/57 Chaı̂nes augmentantes Exemple : v1 (4) s (2) t (6) v2 arcs conformes arcs non conformes 5 < 6, 2 > 0, 3 < 4 La chaı̂ne (s, 2, 1, t) est bien une chaı̂ne augmentante. Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 24/57 Chaı̂nes augmentantes Lemme : ~ ) réalisable entre s et t. Soit f = (f (i, j), (i, j) ∈ E S’il existe une chaı̂ne augmentante par rapport à f entre s et t, alors f n’est plus maximum. Preuve : Chapitre 8 : Flots dans les réseaux - Chaı̂nes augmentantes 25/57 Procédure de marquage Cette procédure permet, étant donné un flot réalisable, de déterminer si elle existe, une chaı̂ne augmentante par rapport à f . Cette procédure est basée sur 2 opérations de marquage dits : marquage direct et marquage indirect. Chapitre 8 : Flots dans les réseaux - Algorithme de Ford et Fulkerson (1961) 26/57 Marquage direct Marquage direct : Si pour un arc (i, j) on a * i f (i, j) < c(i, j) j i marqué j non marqué f (i, j) < c(i, j) alors on marque j et on pose δ(j) =min(δ(i), c(i, j) − f (i, j)) δ(j) est la quantité max avec laquelle on peut augmenter le flot de s à j. (δ(i) est une valeur associée à i, elle est initialisée à l’infini pour s.) Chapitre 8 : Flots dans les réseaux - Algorithme de Ford et Fulkerson (1961) 27/57 Marquage indirect Marquage indirect : Si pour un arc (j, i) on a * i f (j, i) > 0 j i marqué j non marqué f (j, i) > 0 alors on marque j et on pose δ(j) =min(δ(i), f (j, i)) Chapitre 8 : Flots dans les réseaux - Algorithme de Ford et Fulkerson (1961) 28/57 Algorithme de la chaı̂ne augmentante Supposons que l’on dispose d’un flot réalisable ~ ) entre s et t. f = (f (i, j), (i, j) ∈ E Étape 1 : Étape 2 : Chapitre 8 : Flots dans les réseaux - (initialisation) Marquer s par (s, +). Poser δ(s) = +∞. Répéter les opérations suivantes jusqu’à ce que t soit marqué ou qu’il ne soit plus possible de marquer. Algorithme de Ford et Fulkerson (1961) 29/57 Algorithme de la chaı̂ne augmentante Opération a) Si il existe un arc (i, j) tel que i marqué j non marqué f (i, j) < c(i, j) Alors Marquer j par (i, +) Poser δ(j) = min(δ(i), c(i, j) − f (i, j)) Chapitre 8 : Flots dans les réseaux - Algorithme de Ford et Fulkerson (1961) 30/57 Algorithme de la chaı̂ne augmentante Opération b) Si il existe un arc (j, i) tel que i marqué j non marqué f (j, i) > 0 Alors Marquer j par (i, −) Poser δ(j) = min(δ(i), f (j, i)) Chapitre 8 : Flots dans les réseaux - Algorithme de Ford et Fulkerson (1961) 31/57 Algorithme de la chaı̂ne augmentante Étape 3 : Chapitre 8 : Flots dans les réseaux - Si t est marqué Alors une chaı̂ne augmentante C entre s et t est détectée et on pose = δ(t) Sinon le flot f est maximum. Algorithme de Ford et Fulkerson (1961) 32/57 Algorithme de la chaı̂ne augmentante Exemple : Considérons le réseau suivant où le flot de départ est nul (donc uniquement marquage direct possible). 2 (5) (3) (1) (1) (7) 1 3 (4) 5 (9) 7 (1) (4) (2) (1) (5) (6) (4) 4 Chapitre 8 : Flots dans les réseaux - 6 Algorithme de Ford et Fulkerson (1961) 33/57 Algorithme de Ford et Fulkerson ~) On suppose que l’on dispose d’un flot initial f = (f (i, j), (i, j) ∈ E entre s et t (on peut prendre f = 0). Étape 1 : Appliquer l’algorithme de la chaı̂ne augmentante à f. Si t est marqué, STOP f est optimal. Sinon une chaı̂ne augmentante C est détectée, aller à l’étape 2. Étape 2 : Changer le flot f comme suit : si (i, j) 6∈ C f (i, j) f (i, j) + si (i, j) ∈ C + f (i, j) = f (i, j) − si (i, j) ∈ C − Aller à l’étape 1. Chapitre 8 : Flots dans les réseaux - Algorithme de Ford et Fulkerson (1961) 34/57 Algorithme de Ford et Fulkerson Exemple : 2 (5) 1 (1) 4 (7) 1 3 (4) 3 5 9 (3) 0 (1) 4 0 (4) (2) 0 2 (5) (9) 5 7 (1) 1 1 (1) 7 9 2 (6) (4) 4 Chapitre 8 : Flots dans les réseaux - 2 6 Algorithme de Ford et Fulkerson (1961) 35/57 Algorithme de Ford et Fulkerson Exemple : 2 (5) 1 (1) 4 (7) 1 3 (4) 3 7 11 (3) 0 (1) 4 0 (4) (2) 2 2 (5) (9) 5 7 (1) 1 1 (1) 7 11 4 (6) (4) 4 Chapitre 8 : Flots dans les réseaux - 2 6 Algorithme de Ford et Fulkerson (1961) 36/57 Algorithme de Ford et Fulkerson Exemple : 2 (5) 1 (1) 4 (7) 1 3 (4) 3 7 13 (3) 0 (1) 4 2 (4) (2) 2 2 (5) (9) 5 7 (1) 1 1 (1) 7 13 6 (6) (4) 4 Chapitre 8 : Flots dans les réseaux - 4 6 Algorithme de Ford et Fulkerson (1961) 37/57 Algorithme de Ford et Fulkerson Exemple : 2 (5) 1 (1) 4 (7) 1 3 (4) 3 7 14 (3) 0 (1) 4 3 (4) (2) 3 1 (5) (9) 5 8 (1) 0 1 (1) 7 14 6 (6) (4) 4 Chapitre 8 : Flots dans les réseaux - 4 6 Algorithme de Ford et Fulkerson (1961) 38/57 Coupe Définition : coupe Étant donné un graphe G = ~ ) et un sous-ensemble S de (V , E sommets de V , on appelle coupe associée à S, et on la note δ(S), l’ensemble des arcs (i, j) tels que i ∈ S et j ∈ V \S. Chapitre 8 : Flots dans les réseaux - La coupe minimum 39/57 Coupe Exemple : 2 1 5 3 4 δ({1, 3, 4}) = {(1, 2), (1, 5), (3, 2), (4, 5)} Chapitre 8 : Flots dans les réseaux - La coupe minimum 40/57 Coupe Définition : sépare Étant donnés deux sommets s et t de G et une coupe δ(S), on dit que δ(S) sépare s et t si s ∈ S et t ∈ V \S. Exemple : 2 1 5 3 La coupe ci-contre sépare 1 et 5. Elle sépare aussi 3 et 2. 4 Chapitre 8 : Flots dans les réseaux - La coupe minimum 41/57 Capacité d’une coupe Définition : capacité d’une coupe ~ ) est un système de capacités associé aux Si c = (c(i, j), (i, j) ∈ E ~ ) et si δ(S) est une coupe du graphe arcs du graphe G = (V , E alors la capacité de δ(S) est définie par X C (δ(S)) = c(i, j). (i,j)∈δ(S) Chapitre 8 : Flots dans les réseaux - La coupe minimum 42/57 Flots et coupes Théorème : ~ ), s, t, c). Soit un réseau R = (G = (V , E ~ ) est un flot réalisable entre s et t de Si f = (f (i, j), (i, j) ∈ E valeur F et si δ(S) est une coupe qui sépare s et t alors F ≤ C (δ(S)). Preuve : Chapitre 8 : Flots dans les réseaux - La coupe minimum 43/57 Th du flot max - coupe min Théorème : Th du flot max - coupe min La valeur maximum d’un flot réalisable entre s et t est égale à la capacité minimum d’une coupe séparant s et t. Preuve : Chapitre 8 : Flots dans les réseaux - La coupe minimum 44/57 Th du flot max - coupe min Exemple : 2 (5) 1 (1) 4 (7) 1 3 (4) 3 7 14 (3) 0 (1) 4 3 (4) (2) 3 1 (5) (9) 5 8 (1) 0 1 (1) 7 14 6 (6) (4) 4 4 6 Remarque : Tous les arcs appartenant à la coupe sont saturés et la valeur du flot sur ces arcs est bien de 3+4+1+6=14. Chapitre 8 : Flots dans les réseaux - La coupe minimum 45/57 Flots entiers Remarque : Si les capacités sont entières alors le flot max a des valeurs entières. Chapitre 8 : Flots dans les réseaux - La coupe minimum 46/57 Graphe d’écart Définition : graphe d’écart ~ ), s, t, c) un réseau. Soit f un flot sur R. Soit R = (G = (V , E ~ ~ : Gf = (V , Ef ) est le graphe d’écart de f avec pour (i, j) ∈ E f (i, j) < c(i, j) ⇒ (i, j) ∈ E~f (arc conforme) f (i, j) > 0 ⇒ (j, i) ∈ E~f (arc non conforme) Chapitre 8 : Flots dans les réseaux - Implémentation et complexité de l’algorithme de Ford et Fulkerson 47/57 Graphe d’écart Exemple : 2 (5) 1 (1) 4 (7) 1 13 0 (1) (3) 3 (4) 3 2 (4) (2) 2 (9) 5 4 7 2 (5) 7 7 (1) 1 13 6 (1) 1 (6) (4) 4 6 4 Chapitre 8 : Flots dans les réseaux - Implémentation et complexité de l’algorithme de Ford et Fulkerson 48/57 Graphe d’écart Exemple : 2 arcs conformes arcs non conformes 3 5 (5) 4 1 4 Chapitre 8 : Flots dans les réseaux - 7 6 Implémentation et complexité de l’algorithme de Ford et Fulkerson 49/57 Graphe d’écart Exemple : 1 (7) 2 arcs conformes arcs non conformes 3 5 7 7 4 Chapitre 8 : Flots dans les réseaux - 6 Implémentation et complexité de l’algorithme de Ford et Fulkerson 50/57 Graphe d’écart Exemple : arcs conformes arcs non conformes 2 (1) 0 1 5 3 4 Chapitre 8 : Flots dans les réseaux - 7 6 Implémentation et complexité de l’algorithme de Ford et Fulkerson 51/57 Graphe d’écart Exemple : arcs conformes arcs non conformes 2 1 5 3 4 Chapitre 8 : Flots dans les réseaux - 7 6 Implémentation et complexité de l’algorithme de Ford et Fulkerson 52/57 Graphe d’écart Remarque : La recherche d’une chaı̂ne augmentante se ramène à un parcours en profondeur dans le graphe d’écart à partir s. Exemple : arcs conformes arcs non conformes 2 1 5 3 4 Chapitre 8 : Flots dans les réseaux - 7 6 Implémentation et complexité de l’algorithme de Ford et Fulkerson 53/57 Graphe d’écart Remarque : On calcule ensuite les capacités résiduelles sur la chaı̂ne de s à t. Exemple : arcs conformes arcs non conformes 2 =1 1 5 3 7 2 2 2 3 1 4 Chapitre 8 : Flots dans les réseaux - 6 Implémentation et complexité de l’algorithme de Ford et Fulkerson 54/57 Complexité 1 Complexité d’une itération : O(m) recherche d’une chaı̂ne augmentante parcours en profondeur :O(m) 2m arcs au plus calcul de la capacité résiduelle pour la chaı̂ne trouver le minimum d’au plus n − 1 capacités résiduelles O(n) calcul du nouveau flot : O(n) construction du nouveau graphe d’écart : au max 2 × (n − 1) arcs qui changent : O(n) 2 Nombre max d’itérations de Ford / Fulkerson Chapitre 8 : Flots dans les réseaux - Implémentation et complexité de l’algorithme de Ford et Fulkerson 55/57 Complexité 1 Complexité d’une itération : O(m) 2 Nombre max d’itérations de Ford / Fulkerson hypothèses : c ∈ N et le flot de départ est entier. Les capacités résiduelles sont entières. ⇒ la suite des flots est entière. ⇒ la valeur du flot augmente au moins de 1 à chaque itération. ⇒ au P plus F ∗ itérations avec F ∗ =valeur du flot max. ∗ F ≤ j c(s, j) ≤ (n − 1)C avec C = max(i,j)∈E~ c(i, j) donc au pire, (n − 1)C itérations. Complexité dans le pire des cas de Ford / Fulkerson : O(n.m.C ) Chapitre 8 : Flots dans les réseaux - Implémentation et complexité de l’algorithme de Ford et Fulkerson 56/57 Améliorations de Ford et Fulkerson Idée 1 : Choisir une chaı̂ne augmentante de capacité résiduelle maximum. → pas de garantie que les augmentations suivantes → ce n’est plus un parcours mais la recherche d’un chemin de débit maximum Idée 2 : Choisir une chaı̂ne augmentante la plus courte possible en termes de nombre d’arcs. → parcours en largeur Chapitre 8 : Flots dans les réseaux - Implémentation et complexité de l’algorithme de Ford et Fulkerson 57/57