La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Un algorithme simple et rapide pour le problème de Flot Maximum R.K.Ahuja & James B.Orlin (1988)

Présentations similaires


Présentation au sujet: "Un algorithme simple et rapide pour le problème de Flot Maximum R.K.Ahuja & James B.Orlin (1988)"— Transcription de la présentation:

1 Un algorithme simple et rapide pour le problème de Flot Maximum R.K.Ahuja & James B.Orlin (1988)

2 Jadis, naguère, autrefois,... Fulkerson & Dantzig ( )Fulkerson & Dantzig ( ) Multiples approchesMultiples approches –Augmentations de flots [Ford/Fulkerson 1956] –Préflots et réseau par couches [Karzanov 1974] –Arbres dynamiques (pires cas) [Sleator/Tarjan 1983] –Préflots (couches) et pousse flots plus près du puits en terme de distance étiquetée [Goldberg/Tarjan 1985] Meilleurs résultats (pour graphes épars) grâce à une excellente utilisation des arbres dynamiquesMeilleurs résultats (pour graphes épars) grâce à une excellente utilisation des arbres dynamiques 2 IFT A07 - Présentation - Nicola Grenon

3 Mal de tête... 3 IFT A07 - Présentation - Nicola Grenon

4 Faudrait pas zoublier! s, t, n, m, U, etc.s, t, n, m, U, etc. On assume quelques bases s.p.g., dont:On assume quelques bases s.p.g., dont: –Pas de chemin de capacité infinie (teste en O(m)) –Si un u ij infini, on peut poser = autres u ij U, un entier et O(n k )U, un entier et O(n k ) Basé sur Goldberg & Tarjan [1985]Basé sur Goldberg & Tarjan [1985] Approche par phases (scaling) [Edmonds/Karp]... utilisé pour flot à coût minimum ( )Approche par phases (scaling) [Edmonds/Karp]... utilisé pour flot à coût minimum ( ) Arc admissible si d(i)=d(j)+1Arc admissible si d(i)=d(j)+1 –Où la définition de la fonction de distance d est: d(t)=0 et d(i) d(j)+1 (i,j) A où r ij >0 4 IFT A07 - Présentation - Nicola Grenon

5 L'eau à la bouche... O(nm+n 2 logU)O(nm+n 2 logU) Facile à implanterFacile à implanter Faible coût constant (overheads)Faible coût constant (overheads) S'implante bien en parallèleS'implante bien en parallèle 5 IFT A07 - Présentation - Nicola Grenon

6 Poussée de préflots (Preflow-Push Algorithm) Premier algorithme

7 Cest quoi lidée? Lalgorithme va agir ainsi: À chaque itération, sauf la première et la dernière, il y aura toujours au moins un noeud actif (un i s,t avec un excès positif), on va donc conserver un préflot à chaque itération.À chaque itération, sauf la première et la dernière, il y aura toujours au moins un noeud actif (un i s,t avec un excès positif), on va donc conserver un préflot à chaque itération. On va pousser les excès présents à chaque noeud «vers» le puits.On va pousser les excès présents à chaque noeud «vers» le puits. Si on n'arrive pas à «rapprocher» du flot d'un noeud en excès, on va reétiqueter celui-ci comme étant un pas plus loin.Si on n'arrive pas à «rapprocher» du flot d'un noeud en excès, on va reétiqueter celui-ci comme étant un pas plus loin. 7 IFT A07 - Présentation - Nicola Grenon

8 8 Pseudotruc procedure poussée_de_préflot (entrée: G=(V,A); sortie: x) début {initialisation} pour tout i V, s,t d(i):=1 et e(i):=0{possible un peu mieux} d(s):=n d(t):=0 pour tout (s,j) V + (s) x sj :=u sj {ajuster e(j)} {corps} tant que e(i)>0 où i s,t{noeud actif} début choisir un noeud actif si il y a un arc admissible dans V + (i) début choisir un arc (i,j) admissible pousser =min{e(i),r ij } sur (i,j){ajuster x ij, e(i), e(j)} fin sinon d(i):=min{d(j)+1|(i,j) V + (i) et r ij >0}{r ij du graphe résiduel} fin IFT A07 - Présentation - Nicola Grenon

9 9 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=1 e=0 d=1 e=0 d=0d=n=4 [7] [4][5] [3] flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

10 10 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=1 e=7 d=1 e=4 d=0d=4 [7] [4][5] [3] flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij } 7 4

11 11 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=1 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

12 12 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=1 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

13 13 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=1 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

14 14 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=2 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

15 15 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=2 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

16 16 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=2 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

17 17 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=2 e=7 d=1 e=4 d=0d=4 3 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

18 18 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=2 e=4 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

19 19 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=3 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

20 20 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=3 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

21 21 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

22 22 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

23 23 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

24 24 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=1 e=7 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

25 25 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=1 e=2 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

26 26 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=1 e=2 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

27 27 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=5 e=2 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

28 28 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=5 e=2 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

29 29 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=5 e=2 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

30 30 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=5 e=0 d=5 e=0 d=0d=4 0 flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

31 31 Tits dessins... IFT A07 - Présentation - Nicola Grenon TS 2 1 d=1 e=0 d=1 e=0 d=0d=4 [7] [4][5] [3] flot [capacité] d=distance e=excès Actif:e(i)>0 Admissible:d(i)=d(j)+1 reétiquetage:d(i):=min{d(j)+1 de V + (i)|r ij >0} Poussée: :=min{e(i),r ij }

32 Propriétés et compagnie Cet algorithme générique maintient des étiquettes de distance valides et toujours croissantes.Cet algorithme générique maintient des étiquettes de distance valides et toujours croissantes. –L'initialisation créé des étiquettes valides. Pendant la poussée, un arc de G(x) peut disparaître (pas d'impact) ou apparaître, et alors, puisqu'il était admissible, la condition reste remplie. Et lors du reétiquetage, on augmente d(i) au min des d(j)+1... En tout temps de lalgorithme, il y a un chemin depuis chaque noeud en excès vers s (dans G(x)).En tout temps de lalgorithme, il y a un chemin depuis chaque noeud en excès vers s (dans G(x)). –En décomposant les préflots dans G en trois types: les chemins de s vers t, ceux de s vers un i en excès et ceux formant des cycles. Seuls ceux de s vers un i en excès peuvent expliquer cet excès. Ils sont donc présents dans le graphe résiduel. Pour tout i V, d(i)<2n.Pour tout i V, d(i)<2n. –Juste avant le dernier reétiquetage de i, il avait un excès, donc G(x) contenait un chemin de i vers s (long dau plus n-1). Comme d(s)=n et d(i) d(j)+1 si r ij >0, alors d(i) d(s)+(n-1) 0, alors d(i) d(s)+(n-1)<2n. 32 IFT A07 - Présentation - Nicola Grenon

33 Propriétés... second épisode. Il y a moins de 2n 2 reétiquetagesIl y a moins de 2n 2 reétiquetages –Chaque reétiquetage augmente la distance d'au moins 1... et on vient de voir qu'on ne pouvait reétiqueter plus de 2n fois. Il n'y a pas plus que nm poussées saturantes.Il n'y a pas plus que nm poussées saturantes. –Supposons que (i,j) devient saturé. Alors pour pouvoir renvoyer du flot sur (i,j), il faut d'abord que du flot soit poussé sur (j,i). À ce moment, d'(j)=d'(i)+1 d(i)+1=d(j)+2*. Donc, au maximum il y aura n saturations (2n/2)… pour m arcs. *Ça vous rappelle quelque chose? Il n'y a pas plus de 2n 2 m poussées non-saturantes.Il n'y a pas plus de 2n 2 m poussées non-saturantes. L'algorithme s'arrête sur un flot maximum.L'algorithme s'arrête sur un flot maximum. –Comme plus aucun noeud (s,t) n'a d'excès, le flot est réalisable. –Comme d(s)=n, d(t)=0 et d(i) d(j)+1 si r ij >0, alors il ny a plus de chemin de s vers t. 33 IFT A07 - Présentation - Nicola Grenon

34 Cest long... On remarque que le nombre de poussées saturantes est donc limité comparativement au nombre de poussées non-saturantes. Le problème vient principalement du fait que lors des poussées non-saturantes, il ny a pas les changements de structures aisément restreints quoccasionnent les poussées saturantes.On remarque que le nombre de poussées saturantes est donc limité comparativement au nombre de poussées non-saturantes. Le problème vient principalement du fait que lors des poussées non-saturantes, il ny a pas les changements de structures aisément restreints quoccasionnent les poussées saturantes. Dans un FIFO de base, il peut y en avoir O(n 3 ).Dans un FIFO de base, il peut y en avoir O(n 3 ). On peut toutefois se rendre à O(n 2 logU/loglogU) ou à O(n 2 (logU) 1/2 ). (Structures complexes d'arbres et facteur multiplicatif plus important)On peut toutefois se rendre à O(n 2 logU/loglogU) ou à O(n 2 (logU) 1/2 ). (Structures complexes d'arbres et facteur multiplicatif plus important) Ici, avec par l'approche par phases, nous allons atteindre O(n 2 logU).Ici, avec par l'approche par phases, nous allons atteindre O(n 2 logU). 34 IFT A07 - Présentation - Nicola Grenon

35 Par réduction d'échelle des excès (Excess Scaling Algorithm) Second algorithme

36 Quoi encore? Lalgorithme cette fois va agir ainsi: Pour réduire le nombre de poussées non saturantes à O(n 2 logU), on utilise un qui pour chaque phase va descendre dune puissance de 2 (en débutant à )* et on va garantir quà chaque poussée non saturante, au moins /2 unités de flot seront poussées. Pour réussir ceci, on ne va que considérer les sommets ayant au moins cet excès.Pour réduire le nombre de poussées non saturantes à O(n 2 logU), on utilise un qui pour chaque phase va descendre dune puissance de 2 (en débutant à )* et on va garantir quà chaque poussée non saturante, au moins /2 unités de flot seront poussées. Pour réussir ceci, on ne va que considérer les sommets ayant au moins cet excès. Ensuite, en prenant le sommet le plus près du puits, cela nous assure que le sommet de destination a un «faible» excès.Ensuite, en prenant le sommet le plus près du puits, cela nous assure que le sommet de destination a un «faible» excès. Lastuce pour choisir efficacement un sommet ayant un excès de plus de /2 sera de maintenir une série de listes de sommets en fonction de leurs distances, ainsi quune variable de niveau.Lastuce pour choisir efficacement un sommet ayant un excès de plus de /2 sera de maintenir une série de listes de sommets en fonction de leurs distances, ainsi quune variable de niveau. Finalement, pour chaque sommet, on conserve une liste fixée des arcs incidents vers lextérieur et un pointeur vers larc courant. On va examiner cette liste séquentiellement pour trouver un arc admissible où pousser du flot. Cela évite de revisiter un arc avant un reétiquetage.Finalement, pour chaque sommet, on conserve une liste fixée des arcs incidents vers lextérieur et un pointeur vers larc courant. On va examiner cette liste séquentiellement pour trouver un arc admissible où pousser du flot. Cela évite de revisiter un arc avant un reétiquetage. 36 IFT A07 - Présentation - Nicola Grenon

37 37 Pseudotruc, le retour... IFT A07 - Présentation - Nicola Grenon procédure flot_max_par_phases (entrée: G=(V,A); sortie: x) début {initialisation} mêmes initialisations que pour le précédent algorithme :=2 logU {corps} tant que 1 début pour i V si e(i)> /2 alors ajouter i à LISTE(d(i)) niveau:=1 tant que niveau<2n si LISTE(niveau)= alors niveau:=niveau+1 sinon début choisir un sommet i dans LISTE(niveau) pousser_ou_reétiqueter(i) fin := /2 fin

38 38 Pseudotruc, la fin! procédure pousser_ou_reétiqueter (entrée: i, LISTE, G, x; sortie: LISTE, G, x) début trouvé:=faux (i,j):=courant(i){Larc courant du sommet i} tant que trouvé=faux et (i,j) vide si d(i)=d(j)+1 et r ij >0 alors trouvé:=vrai sinon (i,j):=larc suivant parmi le V + (i) fixé. («vide» si terminé) si trouvé=vrai début pousser =min{e(i),r ij, -e(j)} sur (i,j){ajuster x ij, e(i) et e(j)} si e(i) /2 alors LISTE(d(i)):=LISTE(d(i))\{i} si j s,t et e(j)> /2 alors début LISTE(d(j)):=LISTE(d(j)) {j} niveau:=niveau-1 fin sinon{fin de la liste des arcs de i} début{reétiquetage} LISTE(d(i)):=LISTE(d(i))\{i} d(i):=min{d(j)+1|(i,j) V + (i) et r ij >0} LISTE(d(i)):=LISTE(d(i)) {i} courant(i):=premier arc de V + (i) fixé fin 2 IFT A07 - Présentation - Nicola Grenon

39 Quest-ce que je gagne? Lalgorithme agit un peu comme un glouton, mais que lon aurait calmé un peu. En effet : On sassure de pousser au moins /2 (si non saturant)On sassure de pousser au moins /2 (si non saturant) Aucun excès n'augmente à plus deAucun excès n'augmente à plus de –Comme on pousse min{e(i), r ij, -e(j)} Ceci nous permet de conserver le niveau de complexité voulu. 39 IFT A07 - Présentation - Nicola Grenon

40 Hmmm... Le total des poussées non saturantes est alors au maximum de 8n 2.Le total des poussées non saturantes est alors au maximum de 8n 2. –e(i) et d(i) 2n, Donc, prenons F= e(i)d(i)/ 2n 2. Alors, quand on examine i : Soit, plus dadmissible reétiquetage F augmente, mais la valeur maximale de d(i) étant 2n, F ne peut augmenter de plus de 2n 2 fois de cette manière.Soit, plus dadmissible reétiquetage F augmente, mais la valeur maximale de d(i) étant 2n, F ne peut augmenter de plus de 2n 2 fois de cette manière. Soit on effectue une poussée et F diminue dau moins la moitié.Soit on effectue une poussée et F diminue dau moins la moitié. –Au total, F ne pourra donc augmenter de plus de 4n 2. Ce qui donne 8n 2 augmentations au maximum. 40 IFT A07 - Présentation - Nicola Grenon

41 Bingo! On obtient finalement O(n 2 logU) poussées non saturantes.On obtient finalement O(n 2 logU) poussées non saturantes. –Comme 2U et quon le divise par 2 après chaque phase qui a nécessité au maximum 8n 2 poussées non saturantes… La complexité totale est donc de O(nm+n 2 logU).La complexité totale est donc de O(nm+n 2 logU). –La complexité dépend du nombre dexécutions de la boucle «tant que». À chaque itération, soit niveau augmente, soit on «pousse ou reétiquette». Si on pousse, on a calculé le nombre de poussées non saturantes à O(n 2 logU) et il y a O(nm) poussées saturantes.Si on pousse, on a calculé le nombre de poussées non saturantes à O(n 2 logU) et il y a O(nm) poussées saturantes. On ne peut augmenter niveau que O(n) fois pour chaque sommet. Ce qui donne O(n 2 ), négligeable ici.On ne peut augmenter niveau que O(n) fois pour chaque sommet. Ce qui donne O(n 2 ), négligeable ici. –Lensemble des autres opérations est aussi négligeable. 41 IFT A07 - Présentation - Nicola Grenon

42 Ça achève... Petites améliorations possibles : Changer le ratio de dune phase à lautre.Changer le ratio de dune phase à lautre. –Ne change pas la complexité, mais peut être efficace selon les cas. Ça ajoute un facteur multiplicatif à la complexité, mais les poussées sont plus efficaces. Permettre des petites poussées non saturantes.Permettre des petites poussées non saturantes. –En pressant le citron dun sommet, même si lalgorithme nous demande de le sortir de G(x) jusquà ce quil nait plus dexcès ou quon réalise une poussée de /2. En essayant, de temps en temps, déliminer les sommets déconnectés du puits dans G(x) par une recherche en largeur...En essayant, de temps en temps, déliminer les sommets déconnectés du puits dans G(x) par une recherche en largeur IFT A07 - Présentation - Nicola Grenon

43 Cest assez!


Télécharger ppt "Un algorithme simple et rapide pour le problème de Flot Maximum R.K.Ahuja & James B.Orlin (1988)"

Présentations similaires


Annonces Google