650 likes | 991 Views
Problème de flot maximal dans un réseau. Formulation du problème de flot maximal. Notions de coupe et de chaînes d’augmentation par rapport à un flot f. Algorithme de Ford et Fulkerson. Théorème d’intégrité. Généralisation au cas de
E N D
Problème de flot maximaldansun réseau Formulation du problème de flot maximal. Notions de coupe et de chaînes d’augmentation par rapport à un flot f. Algorithme de Ford et Fulkerson. Théorème d’intégrité. Généralisation au cas de plusieurs sources et plusieurs destinations. Présence de contraintes de capacité sur les arcs et les sommets. Détermination d’un flot réalisable. Problème de flot maximal
Introduction Une compagnie possède 6 postes T1, T2, T3, T4, T5 et T6 de retransmission des appels téléphoniques des Laurentides vers les Cantons de l’Est. 4 T2 T3 8 12 8 6 Cantons de l’Est Laurentides 6 T1 T6 9 6 3 11 9 T4 T5 4 Les capacités maximales en milliers d’appels par minute. Problème de flot maximal
Ce réseau de communication a été construit de telle façon qu’il satisfasse aux conditions suivantes : Chaque poste intermédiaire T2, T3, T4, T5 conserve les appels i.e. tout appel arrivant à l’un de ces postes est immédiatement acheminé vers un autre poste (il ne se perd pas d’appels à un poste donné). Le # d’appels passant entre 2 postes est évidemment une quantité non négative et est au plus égal à la capacité maximale des lignes téléphoniques reliant ces 2 postes. Les appels des Laurentides passent tous par le poste T1 qui les achemine vers les autres postes. Les appels arrivant au poste T6 sont tous acheminés dans les Cantons de l’Est. Problème: Soit v le # d’appels passant dans le réseau de T1 (la source) à T6 (la destination), comment répartir les appels dans le réseau de façon à maximiser v ?
Énoncé du problème de flot maximal Soit un réseau R = (N, A) où N représente les sommets du réseau et A l’ensemble des arcs. On désigne aussi par K(x, y) : capacité maximale de l’arc (x, y), (x, y) A, f(x, y) : quantité de flot passant par l’arc (x, y), (x, y) A. Le problème avec une source s et une destination d s’énonce alors comme suit : MAX v v si x = s f(x, y) f(y, x) - = 0 si x s, d (P) -v si x = d {y N | (x, y) A} {y N | (y, x) A} L(x, y) f(x, y) K(x, y), (x, y) A. Note : Sauf avis contraire par la suite, L(x, y) = 0 (x, y) A.
Problème de programmation linéaire En ajoutant un arc fictif (d, s) de capacité infinie, le problème devient : MAX f(d, s) f(x, y) f(y, x) - = 0 x N. {y N | (x, y) A'} {y N | (y, x) A'} L(x, y) f(x, y) K(x, y), (x, y) A' où A' = A {(d, s)}. Note : Cela nous ramène à un problème de flot à coût minimum. La méthode du simplexe peut être utilisée : - membre de droite nul, - vecteur de coût nul excepté pour la variable f(d, s). un algorithme spécialisé plus efficace que la méthode du simplexe.
Exemple : (0, 4) T2 T3 (8, 8) (12, 12) (6, 6) (6, 6) 29 29 (8, 8) T1 T6 (3, 9) (6, 6) (0, 3) (6, 11) (9, 9) T4 T5 0, 4 (f(x, y), K(x, y)) La valeur du flot passant dans ce réseau est v = 29. Problème de flot maximal
Définition de coupe Notation : Si X et Y sont 2 sous-ensembles de N, (X, Y) désigne {(x, y) A | x X, y Y}. On peut aussi définir une fonction g sur A et à valeurs réelles, comme suit : g(X, Y) = g(x, y) (x, y) (X, Y) Définition : Soit X N, un sous-ensemble de sommets contenant la source s, mais ne contenant pas la sortie d, la partition X, X = N – X génère une coupe C [X, X ] = (X, X) (X, X ) séparant la source s de la destination d. Problème de flot maximal
Définition : La capacité de la coupe C [X, X ] est égale à K(X, X) – L(X, X). Exemple : 1 1 4 1 2 1 s 2 1 1 1 1 3 d 2 Soit X = {s, 1}, alors C = {(s, 2), (1, 3), (1, d), (1, 2), (3, s), (d, s)}. Toute chaîne reliant s à d doit nécessairement contenir un arc dans chaque coupe [X, X ]. Note : Problème de flot maximal
Note : Si l’on enlève du réseau tous les arcs de la coupe [X, X ], il ne peut y avoir de chaînes reliant s à d. La valeur du flot pouvant passer dans le nouveau réseau ainsi obtenu est nulle. Étant donné qu’une coupe bloque toutes les chaînes reliant s à d, il s’ensuit que la valeur du flot f passant dans le réseau ne peut pas excéder la capacité d’une coupe, quelque soit celle-ci. La valeur v d’un flot quelconque de s à d est inférieure ou égale à la capacité de toute coupe séparant s et d. Lemme : Soient un flot f de s à d dans le réseau R = (N, A) et v la valeur de ce flot. Si [X, X ] est une coupe dans R séparant s et d, alors v = f(X, X) – f(X, X) K(X, X) – L(X, X). Problème de flot maximal
Démonstration du lemme : Étant donné que f est un flot, f satisfait les équations : f(s, N) – f(N, s) = v f(d, N) – f(N, d) = - v f(x, N) – f(N, x) = 0 si x s et x d. Additions ces équations pour x X, vu que s X et d X, on a : v = (f(x, N) – f(N, x) ) = f(X, N) – f(N, X). x X Sachant que N = X X, on obtient : v = f(X, X X) – f(X X, X) v = f(X, X) + f(X, X) – f(X, X) – f(X, X) = f(X, X)– f(X, X). Puisque f(X, X) L(X, X) et f(X, X) K(X, X), alors v = f(X, X) – f(X, X) K(X, X) – L(X, X). CQFD
Corollaire du lemme : vmax = Max v(f) Min K(X, X) – L(X, X) {f est un flot réalisable de s à d} X N s X, d X c’est-à-dire, que la valeur maximale du flot est toujours inférieure ou égale à la coupe minimale des capacités. Problème de flot maximal
Exemple : 1 L(x, y) = 0 (x, y) A. 2,3 1,1 3 v = 3. 3 0,1 1,1 s d 1,1 2,3 X 2 X (f(x, y), K(x, y)) La coupe C = {(s, 1), (2, 1), (2, d), (1, 2)} a aussi une capacité égale à 1 + 1 + 1 - 0 = 3. D’après ce qui précède, le flot est maximal et la coupe est minimale. Problème de flot maximal
Théorème (flot max – coupe min) : Pour n’importe quel réseau donné, la valeur maximale du flot reliant la source s à la destination d est égale à la capacité minimale des coupes séparant s et d dans le réseau. Démonstration : Laissée en exercice. Les définitions suivantes et les corollaires de ce théorème vont nous permettre d’élaborer un procédé pour parvenir à un flot maximal. Problème de flot maximal
Définition : Une chaîne W reliant la source s à la destination d est dite une chaîne d’augmentation par rapport au flot f si f(x, y) < K(x, y) (x,y) de cette chaîne tel que (x,y) A et f(x, y) > L(x, y) (x,y) de cette chaîne tel que (y,x) A. Les arcs de W parcourus dans le sens de leur orientation. Les arcs de W parcourus dans le sens inverse de leur orientation. Problème de flot maximal
Exemple : 1 0,3 1,1 Il existe une chaîne d’augmentation : (s,2) - (1,2) – (1,d). 1 1 1,1 s d 1,1 0,3 2 On peut faire passer une unité de flot à travers cette chaîne. (f(x, y), K(x, y)) 1 1,3 1,1 2 2 0,1 s d 1,1 1,3 2 Problème de flot maximal
Définition : Un arc (x, y) est saturé par rapport à f si f(x, y) = K(x, y). Un arc (u, v) est dit minimal par rapport à f si f(u, v) = L(u, v). Corollaire : Un flot f est maximal si et seulement si il n’existe pas de chaîne d’augmentation par rapport à celui-ci. Corollaire : Une coupe [X, X] est minimale si et seulement si, pour tout flot maximal f, les arcs de (X, X) sont saturés par rapport à f et ceux de (X, X) sont minimaux par rapport à f. Appliquons maintenant ces résultats à l’exemple suivant où à chaque itération, nous tenterons de construire une chaîne d’augmentation. Problème de flot maximal
Exemple : 0,3 2 3 0,7 0,6 0,6 0,2 0 0 0,2 s d 0,3 0,1 0,4 0,9 4 Déterminons d’abord un flot au jugé en saturant le plus grand nombre possible de chemins reliant s à d. I. s - 2 - 3 - d : 3 unités pour obtenir une saturation. Problème de flot maximal
3,3 2 3 3,7 3,6 0,6 0,2 3 3 0,2 s d 0,3 0,1 0,4 0,9 4 II. s - 2 - 3 - 4 - d : déjà saturé. III. s - 2 - 4 - 3 - d : 2 unités pour obtenir une saturation. Problème de flot maximal
3,3 2 3 5,7 5,6 0,6 2,2 5 5 2,2 s d 0,3 0,1 0,4 0,9 4 IV. s - 2 - 4 - d : déjà saturé. V. s - 3 - d : 2 unités pour obtenir une saturation. Problème de flot maximal
3,3 2 3 7,7 5,6 2,6 2,2 7 7 2,2 s d 0,3 0,1 0,4 0,9 4 VI. s - 3 - 4 - d : 1 unité pour obtenir une saturation. Problème de flot maximal
3,3 2 3 7,7 5,6 3,6 2,2 8 8 2,2 s d 0,3 1,1 0,4 1,9 4 VII. s - 4 - 2 - 3 - d : déjà saturé. VIII. s - 4 - 3 - d : déjà saturé. IX. s - 4 - d : 4 unités pour obtenir une saturation. Problème de flot maximal
3,3 2 3 7,7 5,6 3,6 2,2 12 12 2,2 s d 0,3 1,1 4,4 5,9 4 Pour déterminer une chaîne d’augmentation reliant s à d (si elle existe), on doit opter pour une procédure de marquage : Soit Z = {(s, pred(s) = •, = +)}, pour chaque sommet (x, pred(x), ) Z non traité, si f(x, y) < K(x, y) ajouter (y, x, min{, K(x, y) – f(x, y)}) à Z sinon si f(y, x) > L(y, x) ajouter (y, x, min{, f(y, x) – L(y, x)}) à Z.
3,3 2 3 7,7 5,6 3,6 2,2 12 12 2,2 s d 0,3 1,1 4,4 5,9 4 Z = {(s, •,+)} Z = {(s, •,+), (2, s, 1), (3, s, 3)} Z = {(s, •,+), (2, s, 1), (3, s, 3), (4, 3, 2)} Z = {(s, •,+), (2, s, 1), (3, s, 3), (4, 3, 2), (d, 4, 2)} Il existe une chaîne d’augmentation reliant s à d où l’on peut faire passer 2 unités de flot. À l’aide de Z, on peut retracer la chaîne d’augmentation. Problème de flot maximal
3,3 2 3 7,7 5,6 5,6 0,2 14 14 2,2 s d 0,3 1,1 4,4 7,9 4 Répétons la procédure de marquage : Z = {(s, •,+)} Z = {(s, •,+), (2, s, 1), (3, s, 1)} Z = {(s, •,+), (2, s, 1), (3, s, 1)} Il n’est pas possible d’atteindre la sortie d; par conséquent, le flot est maximal.
3,3 2 3 7,7 5,6 5,6 0,2 14 14 2,2 s d 0,3 1,1 4,4 7,9 4 X = {s, 2, 3} (X, X) = {(s, 4), (2, 4), (3, 4), (3, d)} (X, X) = {(4, 2), (4, 3)} v = 14 = f (X, X) - f (X, X) = K(X, X) – L(X, X). Donc, le flot est optimal. Problème de flot maximal
Algorithme de Ford & Fulkerson Marquage des sommets Étape A Cela conduit soit : à la fin de l’algorithme, à la découverte d’une chaîne d’augmentation. Un sommet peut être dans l’un des 3 états suivants : non marqué marqué et examiné marqué et non encore examiné À chaque sommet x marqué est associé un quadruplet (x, pred(x), m(x), p(x)). Le sommet qui a permis le le marquage de x. La qté de flot supplém. que l’on peut faire passer dans la chaîne de s à x. + ou – selon que x a été marqué grâce à l’arc (pred(x), x) ou (x, pred(x)). Modifie le flot le long de la chaîne d’augmentation. Étape B
Description complète de l’algorithme de Ford & Fulkerson Étape A 1. Initialisation. La source s est marquée et non encore examinée : (s, •, •, ). Les autres sommets sont non marqués. 2. Marquage. Choisir un sommet x marqué et non encore examiné : (x, pred(x), m(x), p(x)). sommet y non marqué tel que (x, y) A, si f(x, y) < K(x, y), alors marquez y non encore examiné : (y, x, +, min{p(x), K(x, y) – f(x, y)}) sommet y non marqué tel que (y, x) A, si f(y, x) > L(y, x), alors marquez y non encore examiné : (y, x, -, min{p(x), f(y, x) – L(y, x)}) x est maintenant marqué et examiné.
Si la destination d est marquée et non encore examinée, aller à l’étape B. Si tous les sommets marqués ont été examinés, c’est terminé (il n’y a pas de chaînes d’augmentation et le flot est maximal). Autrement, répéter cette opération de marquage avec un nouveau sommet marqué et non encore examiné. Problème de flot maximal
Étape B Changement de flot dans une chaîne d’augmentation. La destination d a été marquée : (d, pred(d), m(d), p(d)). Si m(d) = + alors f(pred(d), d) = f(pred(d), d) + p(d) sinon f(d, pred(d)) = f(d, pred(d)) – p(d). Posons y = pred(d). Tant et aussi longtemps que y est différent de s { soit le quadruplet associé à y : (y, pred(y), m(y), p(y)), si m(y) = + alors f(pred(y), y) = f(pred(y), y) + p(d) sinon f(y, pred(y)) = f(y, pred(y)) – p(d); poser y = pred(y). }. On efface les marques des sommets et on retourne à l’étape A. Problème de flot maximal
Construction d’une coupe minimale À la fin de l’algorithme de Ford & Fulkerson, on peut construire une coupe minimale comme suit : Poser U = {i N| le sommet i est marqué}, V = {j N| le sommet j est non marqué}, Alors la coupe minimale est [U, V] et v = K(U, V) – L(V, U). Problème de flot maximal
Exemple : 3 0,5 0,2 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 0 0,8 0 0,6 8 1 5 0,3 0,8 0,1 0,4 0,16 0,2 0,1 7 0,7 6 Effectuons un premier marquage. Problème de flot maximal
(1,+,10) 3 0,5 0,2 (1,+,4) 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 (1,+,8) 0 0,8 0 0,6 8 1 5 (•,•,) (5,+,6) 0,3 0,8 0,1 0,4 0,16 0,2 0,1 7 (1,+,3) 0,7 6 (1,+,4) Ajoutons 6 unités dans la chaîne d’augmentation.
3 0,5 0,2 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 6 6,8 6 6,6 8 1 5 0,3 0,8 0,1 0,4 0,16 0,2 0,1 7 0,7 6 Effectuons un 2ième marquage.
(1,+,10) 3 0,5 (1,+,4) 0,2 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 (1,+,2) 6 6,8 6 6,6 8 1 5 (•,•,) (7,+,3) 0,3 0,8 0,1 0,4 0,16 0,2 0,1 7 (1,+,3) 0,7 6 (1,+,4) Ajoutons 3 unités dans la chaîne d’augmentation.
3 0,5 0,2 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 9 6,8 9 6,6 8 1 5 3,3 0,8 0,1 0,4 3,16 0,2 0,1 7 0,7 6 Effectuons un 3ième marquage.
(1,+,10) 3 0,5 (1,+,4) 0,2 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 (1,+,2) 9 6,8 9 6,6 8 1 5 (•,•,) (7,+,2) 3,3 0,8 0,1 0,4 3,16 0,2 0,1 7 (5,+,2) 0,7 6 (1,+,4) Ajoutons 2 unités dans la chaîne d’augmentation.
3 0,5 0,2 2 0,9 4 0,3 0,8 0,4 0,2 0,10 0,3 11 8,8 11 6,6 8 1 5 3,3 2,8 0,1 0,4 5,16 0,2 0,1 7 0,7 6 Effectuons un 4ième marquage.
(1,+,10) 3 0,5 (1,+,4) 0,2 2 (3,+,2) 0,9 4 0,3 0,8 0,4 0,2 0,10 (4,+,2) 0,3 11 8,8 (3,+,9) 11 6,6 8 1 5 (•,•,) 3,3 2,8 0,1 0,4 5,16 0,2 0,1 7 0,7 6 (1,+,4) Ajoutons 2 unités dans la chaîne d’augmentation.
3 0,5 2,2 2 0,9 4 0,3 2,8 0,4 0,2 2,10 0,3 13 8,8 13 6,6 8 1 5 3,3 2,8 0,1 0,4 5,16 0,2 0,1 7 0,7 6 Effectuons un 5ième marquage.
3 (1,+,8) 0,5 (1,+,4) 2,2 2 0,9 4 0,3 2,8 0,4 0,2 2,10 0,3 (6,+,2) 13 8,8 13 6,6 8 1 5 (•,•,) (7,+,4) 3,3 2,8 0,1 0,4 5,16 0,2 0,1 7 (6,+,4) 0,7 6 (1,+,4) Ajoutons 4 unités dans la chaîne d’augmentation.
3 0,5 2,2 2 0,9 4 0,3 2,8 0,4 0,2 2,10 0,3 17 8,8 17 6,6 8 1 5 3,3 2,8 0,1 4,4 9,16 0,2 0,1 7 4,7 6 Effectuons un 6ième marquage.
(1,+,8) 3 0,5 (1,+,4) 2,2 2 0,9 4 0,3 2,8 0,4 0,2 2,10 0,3 (2,+,3) 17 8,8 17 6,6 8 1 5 (•,•,) (7,+,3) 3,3 2,8 0,1 4,4 9,16 0,2 0,1 7 (5,+,3) 4,7 6 Ajoutons 3 unités dans la chaîne d’augmentation.
3 0,5 2,2 2 0,9 4 3,3 2,8 3,4 0,2 2,10 0,3 20 8,8 20 6,6 8 1 5 3,3 5,8 0,1 4,4 12,16 0,2 0,1 7 4,7 6 Effectuons un 7ième marquage.
(1,+,8) 3 0,5 (1,+,1) 2,2 2 0,9 4 3,3 2,8 3,4 0,2 2,10 0,3 (3,+,8) 20 8,8 20 6,6 8 1 5 (•,•,) (7,+,3) 3,3 5,8 0,1 4,4 12,16 0,2 0,1 7 (5,+,3) 4,7 6 (5,+,1) Ajoutons 3 unités dans la chaîne d’augmentation.
3 0,5 2,2 2 3,9 4 3,3 2,8 3,4 0,2 5,10 0,3 23 8,8 23 6,6 8 1 5 3,3 8,8 0,1 4,4 15,16 0,2 0,1 7 4,7 6 Effectuons un 8ième marquage.
(1,+,5) 3 0,5 (1,+,1) 2,2 2 3,9 4 3,3 2,8 3,4 0,2 5,10 0,3 (3,+,5) 23 8,8 23 6,6 8 1 5 (•,•,) (7,+,1) 3,3 8,8 0,1 4,4 15,16 0,2 0,1 7 (6,+,1) 4,7 6 (5,+,1) Ajoutons 1 unité dans la chaîne d’augmentation.
3 0,5 2,2 2 4,9 4 3,3 2,8 3,4 0,2 6,10 0,3 24 8,8 24 6,6 8 1 5 3,3 8,8 0,1 4,4 16,16 0,2 1,1 7 5,7 6 Effectuons un 9ième marquage.
(1,+,4) 3 0,5 (1,+,1) 2,2 2 4,9 4 3,3 2,8 3,4 0,2 6,10 0,3 (3,+,4) 24 8,8 24 6,6 8 1 5 (•,•,) 3,3 8,8 0,1 4,4 16,16 0,2 1,1 7 5,7 6 Il n’est pas possible d’atteindre le sommet 8; le flot est donc optimal. En prenant X = {1, 2, 3, 5}, la coupe minimale des capacités est [X, X] et la valeur du flot est 24.
Théorème d’intégrité Si les capacités K(x, y) et les bornes inférieures L(x, y) sont toutes entières, il existe toujours un flot maximal à valeurs entières. Si le flot initial est à valeurs entières et que les capacités le sont aussi, le flot maximal obtenu de l’algorithme sera aussi à valeurs entières car la découverte d’une chaîne d’augmentation entraîne un changement de flot conduisant à un minimum de nombres entiers. Problème de flot maximal
Extension au cas de plusieurs sources et / ou destinations On peut toujours se ramener au cas d’une source et d’une destination. Supposons que les sommets N du réseau R = (N, A) sont partitionnés comme suit : S : l’ensemble des sources, D : l’ensemble des destinations, X : l’ensemble des sommets intermédiaires. Le problème s’énonce comme suit : Max v f(x, N) – f(N, x) = 0 x X L(x, y) f(x, y) K(x, y) (x, y) A f(S, N) – f(N, S) = v f(D, N) – f(N, D) = - v Problème de flot maximal