Algorytm de Ford-Fulkeson-Wikipédia

before-content-x4

Przykład wykonania algorytmu Forda-Fulkerson. Animacja wyświetla wykres resztkowy odpowiadający każdej iteracji.

W informatyce, Algorytm Forda-Fulkerson jest algorytmem problemu maksymalnego przepływu, klasycznego problemu optymalizacji w dziedzinie badań operacyjnych. Jest to spowodowane Lester Randolph Ford Junior i D. R. Fulkerson [[[ Pierwszy ] I jest to wariant algorytmu Busackera i Gowen.

Definicja problemu [[[ modyfikator |. Modyfikator i kod ]

Ten problem optymalizacji może być reprezentowany przez wykres z wejściem (po lewej) i wyjściem (po prawej). Przepływ reprezentuje krążenie wejścia do wyjścia, stąd użycie tego algorytmu w problemach sieciowych. Aplikacje są wiele: problemy komputerowe, drogi, koleje itp. Dotyczy to również wszystkich innych problemów transferowych, takich jak import/eksport, migracyjne, przepływy demograficzne, ale także na przepływach czysto cyfrowych, takich jak transfery finansowe. W przypadku bardzo dużych danych istnieje kilka bardziej wydajnych algorytmów do rozwiązania problemu maksymalnego przepływu.

Przykład aplikacji [[[ modyfikator |. Modyfikator i kod ]

after-content-x4

Firma towarowa ma trzy centra: jeden w Paryżu, drugi w Lyonie, trzeci w Marsylii. Możliwe są trzy miejsca: Polska, Szwecja, Grecja. Każde z centrów towarowych ma początkowe zapasy towarów (Paryż: 100; Lyon: 80; Marsylia: 150). Podobnie każdy kraj przybycia ma maksymalne żądanie importu (Polska: 120; Szwecja: 140; Grecja: 50).

Algorytm Forda-Fulkerson zoptymalizuje te przepływy za pomocą narzędzia do modelowania matematycznego. Podstawowa struktura jest reprezentowana przez zorientowany wykres, którego po lewej stronie symbolizuje początkowy zapas. Trzy łuki odchodzą, każde prowadzące do szczytu reprezentującego centrum towarowe. Ostatni szczyt symbolizuje koniec dostawy, do którego trzy łuki pochodzą ze szczytów reprezentujących cel dostawy.

W niniejszym przykładzie macierz sąsiedniej przenosi zatem w pierwszym wierszu wartości wspomnianych zapasów. I odwrotnie, pod koniec łańcucha powiązana macierz uwzględni w ostatniej kolumnie odpowiednie żądania cytowanych krajów. Pomiędzy szczytami „centrum towarowego” a „docelowym” szczytami można znaleźć na szczytach i pośrednie łuki, pojemności tych łuków odpowiadające maksymalnej frachcie od jednego punktu do drugiego.

Paris Polska
           / /
    100 --- ------- ... ------- ---- 120
       / 80 węzłów 140
Wyjazd ------- Lyon ----- Intermé- ---- Szwecja -------- End
                          Pamiętniki /
    150 --- ------- ... ------- --- 50
                  / /
           Marsylia Grecja 

Problem można uogólnić na krążenie w sieci (pojazdy, płyny, pieniądze itp.), Ilości matematyczne bezkrytycznie zastępują rzeczywiste fakty, które mają reprezentować.

Formalizowanie [[[ modyfikator |. Modyfikator i kod ]

Sieć [[[ modyfikator |. Modyfikator i kod ]

Lub sieć

G = ( S W A W C W S W T ) {DisplayStyle g = (s, a, c, s, t)}

z :

  • pojemność
  • ŹRÓDŁO S Sans Arcs uczestnicy;
  • Studnia T Bez wychodzących łuków.

Zakłada się, że nie ma anty-równoległych łuków, to znaczy, że istnienie łuku

( W W W ) {displayStyle (u, v)}

wyklucza istnienie ARC

after-content-x4
( W W W ) {displayStyle (v, u)}

.

Ładny [[[ modyfikator |. Modyfikator i kod ]

Przepływ sieci jest funkcją

F : S 2 R + {DisplayStyle f: s ^{2} rightarrow mathbb {r} ^{+}}

Kto sprawdza:

  • Dla wszystkich szczytów
  • na każdy szczyt

Wartość przepływu F Wschód

|. F |. = W S F ( S W W ) M Tipe Elle Yyleyy?

.

Jest to algorytm iteracyjny.
Z każdą iteracją obecne rozwiązanie jest przepływem, który spełnia ograniczenia pojemności (jest to zatem możliwy do osiągnięcia przepływ), a algorytm próbuje zwiększyć wartość tego przepływu.
Może to wymagać anulowania niewłaściwych wyborów. Aby to zrobić, definiujemy resztkowy wykres G i F co wskazuje możliwe modyfikacje (dodanie lub anulowanie): jest to wykres ważony

R F = ( S W A F W R F ) {DisplayStyle r_ {f} = (s, a_ {f}, r_ {f})}

gdzie mamy

I

A F = { ( W W W ) S × S |. R F ( W W W ) > 0 } {DisplayStyle A_ {f} = {(u, v) in STIMes S | r_ {f} (u, v)> 0}}

Pseudo kod [[[ modyfikator |. Modyfikator i kod ]

 Wejście Sieć  Wyjście Maksymalny przepływ F  Funkcjonować Ford_fulkerson ( ) Ładne zero Dopóki Istnieje prosta ścieżka z S ma T Na wykresie resztkowym :  Dla cała krawędź : I  :  W przeciwnym razie :  Odrzucać  F  

Algorytm nie określa, jak znaleźć każdą ścieżkę

C {DisplayStyle Gamma}

. Algorytm Edmonds-Karp, specjalizacja algorytmu Forda-Fulkersona, oferuje trasę szerokości.

Każda znaleziona ścieżka ma gwarancję zwiększenia wartości przepływu, ponieważ koniecznie zaczyna się od łuku opuszczającego lato źródła i kończy się łukiem, który dobrze wpisuje się na szczyt.

Przykład wykonania [[[ modyfikator |. Modyfikator i kod ]

Rozważamy sieć przepływu Wykres Fordfulk-residual-0.svg
4
Pierwszy
2
6
3
Ładny Fordfulk-flow-0.svg
0
0
0
0
0
Resztkowy wykres Fordfulk-residual-0.svg
4 0
Pierwszy 0
2 0
6 0
3 0
Załóżmy, że algorytm najpierw wybiera ścieżkę Poprawa ścieżki Fordfulk-path-1.svg
Ładny Fordfulk-flow-1.svg
3
0
0
3
3
Resztkowy wykres Fordfulk-residual-1.svg
Pierwszy 3
Pierwszy 0
2 0
3 3
0 3
Załóżmy, że algorytm wybiera poprawę ścieżki Poprawa ścieżki Fordfulk-path-2.svg
Ładny Fordfulk-flow-2.svg
3
Pierwszy
Pierwszy
3
2
Resztkowy wykres Fordfulk-residual-2.svg
Pierwszy 3
0 Pierwszy
Pierwszy Pierwszy
3 3
Pierwszy 2
Załóżmy, że algorytm ponownie wybiera ścieżkę Poprawa ścieżki Fordfulk-path-3.svg
Ładny Fordfulk-flow-3.svg
4
Pierwszy
Pierwszy
4
3
Resztkowy wykres Fordfulk-residual-3.svg
0 4
0 Pierwszy
Pierwszy Pierwszy
2 4
0 3
Tutaj tylko ścieżka Poprawa ścieżki Fordfulk-path-4.svg
Niezłe maksima Fordfulk-flow-4.svg
4
Pierwszy
2
5
3
Resztkowy wykres Fordfulk-residual-4.svg
0 4
0 Pierwszy
0 2
Pierwszy 5
0 3

Złożoność [[[ modyfikator |. Modyfikator i kod ]

Maksymalny przepływ jest osiągany, gdy nie można znaleźć więcej poprawy ścieżki. Nie ma jednak pewności, że ta sytuacja zostanie osiągnięta, ale odpowiedź będzie poprawna, jeśli algorytm się skończy. W przypadku, gdy algorytm działa w nieskończoność, przepływ może nawet nie zbiegać się w kierunku maksymalnego przepływu. Jednak sytuacja ta występuje tylko w przypadku irracjonalnych wartości powodziowych. [Ref. niezbędny] Gdy zdolności są liczbami całkowite, czas wykonania algorytmu Forda-Fulkersona jest ograniczony

O ( A F ) {DisplayStyle O (AF)}

(Zobacz notacje Landau), gdzie

A {DisplayStyle A}

to liczba krawędzi w sieci przepływu i

F {DisplayStyle f}

jest wartością maksymalnego przepływu. Rzeczywiście, każdą rosnącą ścieżką można znaleźć w

O ( A ) {DisplayStyle o (a)}

i zwiększa przepływ co najmniej całej ilości

Pierwszy {DisplayStyle 1}

z

F {DisplayStyle f}

jako górny terminal.

Wariantem algorytmu Forda-Fulkersona z gwarantowanym zakończeniem i czasem wykonania niezależnym od maksymalnej wartości przepływu jest algorytm Edmonds-Karp, który ma złożoność czasową

O ( S A 2 ) {DisplayStyle O (SA^{2})}

.

Zakończenie [[[ modyfikator |. Modyfikator i kod ]

Jeśli krawędzie krawędzi są całe, algorytm kończy się.

Absurd może to wykazać, zakładając, że algorytm się nie kończy. Biorąc pod uwagę kontynuację obliczonych fal, istnieje kilka właściwości:

  • Kontynuacja wzrasta ściśle;
  • Zwiększa go wartość maksymalnego przepływu;
  • Ma całe wartości.

Cały ten apartament jest nieskończony, zwiększony i ściśle rosnący, co jest absurdalne.

Przykład, dla którego algorytm nie kończy [[[ modyfikator |. Modyfikator i kod ]

Ford-Fulkerson forever.svg

Jesteśmy zainteresowani następującym wykresem, który ma źródło źródła

S {DisplayStyle s}

, dla studni

T {DisplayStyle T}

. Krawędzie

To jest Pierwszy {DisplayStyle e_ {1}}

W

To jest 2 {DisplayStyle e_ {2}}

I

To jest 3 {DisplayStyle e_ {3}}

mieć odpowiednie zdolności

Pierwszy {DisplayStyle 1}

W

R = ( 5 Pierwszy ) / 2 {DisplayStyle r = ({sqrt {5}}-1)/2}

I

Pierwszy {DisplayStyle 1}

. Pojemność innych krawędzi jest ustawiona

dziesięć {DisplayStyle 10}

. Wybraliśmy stałą

R {DisplayStyle r}

aby

R 2 = Pierwszy R {DisplayStyle r^{2} = 1-r}

. Rozważamy wykonanie algorytmu wybierającego następujące ścieżki, w których zauważamy

P Pierwszy = { S W W 4 W W 3 W W 2 W W Pierwszy W T } {DisplayStyle p_ {1} = {s, v_ {4}, v_ {3}, v_ {2}, v_ {1}, t}}

W

P 2 = { S W W 2 W W 3 W W 4 W T } {DisplayStyle P_ {2} = {S, V_ {2}, V_ {3}, v_ {4}, t}}

I

P 3 = { S W W Pierwszy W W 2 W W 3 W T } {DisplayStyle P_ {3} = {S, V_ {1}, v_ {2}, v_ {3}, t}}

.

Zauważamy, że po etapie 1 i 5 zdolności resztkowe krawędzi

To jest Pierwszy {DisplayStyle e_ {1}}

W

To jest 2 {DisplayStyle e_ {2}}

I

To jest 3 {DisplayStyle e_ {3}}

są odpowiednio w formie

R N {DisplayStyle r^{n}}

W

R N + Pierwszy {DisplayStyle r^{n+1}}

I

0 {DisplayStyle 0}

A dodany przepływ jest

R N {DisplayStyle r^{n}}

Lub

N N {DisplayStyle Nin Mathbb {n}}

. Zatem poprzez nawrót zawsze możemy powtórzyć pętlę drogową

P Pierwszy {DisplayStyle P_ {1}}

W

P 2 {DisplayStyle P_ {2}}

W

P Pierwszy {DisplayStyle P_ {1}}

I

P 3 {DisplayStyle P_ {3}}

jednocześnie dodając ściśle dodatni przepływ, ponieważ możliwości resztkowe zawsze pozostaną

R N {DisplayStyle r^{n}}

W

R N + Pierwszy {DisplayStyle r^{n+1}}

I

0 {DisplayStyle 0}

Na końcu egzekucji na ścieżkach. Algorytm nie kończy zatem na tym wpisie. Fakt, że mamy pojemność niezwiązaną z całością, ma kluczowe znaczenie, ponieważ pozwala on na ściśle rosnący i zwiększony nieskończony apartament przepływu. [[[ 2 ]

  1. (W) L. R. Bród i D. R. Fulkerson W Maksymalny przepływ przez sieć » W Canadian Journal of Mathematics W tom. 8, 1956/ed, P. 399–404 (ISSN 0008-414X I 1496-4279 , Doi 10.4153/CJM-1956-045-5 W Czytaj online , skonsultuałem się z )
  2. Typ Zwick « Najmniejsze sieci, na których procedura maksymalnego przepływu Forda – Fulkersona może nie zakończyć », Teoretyczna informatyka W tom. 148, N O 1, W P. 165–170 (Doi 10.1016/0304-3975 (95) 00022-O Accès libre)

Powiązany artykuł [[[ modyfikator |. Modyfikator i kod ]

  • Algorytm Edmonds-Karp jest specjalizacją w algorytmie Forda-Fulkersona do rozwiązania problemu maksymalnego przepływu w sieci.

Linki zewnętrzne [[[ modyfikator |. Modyfikator i kod ]

Bibliografia [[[ modyfikator |. Modyfikator i kod ]

O innych projektach Wikimedia:

  • Prosty algorytm znajdowania maksymalnych przepływów sieci i aplikacji do problemu zaczepowego (Ford L.R., Fulkerson D.R), Rand Report Rand Corporation, Santa Monica, .
  • Lester R. Bród ET Delbert R. Fulkerson « Maksymalny przepływ przez sieć », Canadian Journal of Mathematics W tom. 8, N O 3, W P. 399-404
  • Problem z transportem (Zamów A.), Nauka o zarządzaniu 2, 1956.
  • O niedoborze nieskończonej sieci (Berge C.), Raporty Akademii Nauk 245, 1957.
  • Zaproszenie na badania operacyjne (Kaufmann A., Faure R.) Dunod Entreprise, 1979.
  • Wkład teorii wykresów w badanie problemów związanych z zamawianiem (Roy B.) Międzynarodowy Kongres Badań Operacyjnych, 1960.
  • Lester Randolph Bród ET Delbert Ray Fulkerson W Przepływy w sieciach , Princeton, NJ, Princeton University Press,
  • Ravindra K. Ajuaha , Thomas L. Magnanti i James B. Orlin W Przepływy sieci – teoria, algorytmy i aplikacje , Prentice Hall,
  • Thomas H. Corm , Charles E. Leiseron , Ronald L. Ravest ET Clifford Stein W Wprowadzenie do algorytmów , Z prasą,
  • Jon Kleinberg Et Eva TARDOS W Projektowanie algorytmów , Pearson Education India,

after-content-x4