A maximum flow Der Algorithmus von Ford und Fulkerson Technische Universität München
ahuja

Der maximale s-t Fluss hat den Wert 6

Das Max-Flow Problem

Eine typische Anwendung von Graphen ist, sie zur Modellierung von Transportnetzwerken wie beispielsweise Pipelines, Stromtrassen oder Datennetzwerken zu verwenden. Häufig ist es dabei nötig, die Kanten der Netzwerke mit Kapazitäten auszustatten, welche die maximale Menge der darüber transportierbaren Ressource angeben.

Eine interessante Eigenschaft von diesen Netzwerken ist nun die maximale Menge der von einem Punkt zu einem anderen Punkt transportierbaren Ressource. Dies wird das Max-Flow Problem genannt.

Dieses Applet stellt den Algorithmus von Ford und Fulkerson vor, welcher in einem gegebenen Netzwerk den maximalen s-t Fluss berechnet.

Was möchtest du zuerst tun?


Legende

node Knoten
edge Kante mit Kapazität 10

Legende

Auf welchem Graph soll der Algorithmus ausgeführt werden?

Nimm ein fertiges Beispiel!

Ändere den Graphen nach deinen Vorstellungen:

  • Um einen Knoten zu erstellen, mache einen Doppelklick in das Zeichenfeld.
  • Um eine Kante zu erstellen, klicke zunächst auf den Ausgangsknoten und dann auf den Zielknoten.
  • Das Kantengewicht kann mit einem Doppelklick auf die Kante verändert werden.
  • Ein Rechtsklick löscht Kanten und Knoten.

Lade den veränderten Graphen herunter:

Download

Lade einen existierenden Graphen hoch:

Ein

trat auf beim Lesen der Datei:

Fehlerbeschreibung:

                    

Was nun?

Legende

node Knoten
node S/T Knoten
edge Kante mit Kapazität 10 und Fluss 7.
edge Kante im Residualgraphen.
edge Kante auf augmentierendem Pfad.

Legende

Status des Algorithm

Wähle zuerst eine Quelle

Klicke auf einen Knoten, um ihn als Quelle/Startknoten s auszuwählen

Wähle nun eine Senke

Klicke auf einen Knoten, um ihn als Senke/Zielknoten t auszuwählen

Algorithmus von Ford und Fulkerson

Der Algorithmus beginnt nun. Klicke auf Nächster Schritt, um ihn zu starten

Initialisiere den Fluss

Setze den Fluss f(e) = 0 für alle Kanten des Graphen.

Beginne die Hauptschleife

Die Hauptschleife sucht wiederholt nach einem augmentierenden Pfad und erhöht entlang von ihm den Fluss, um so den Gesamtfluss zu vergrößern.

Check path

Check if the search is finished. Either finish by expanding t expanded, run out of nodes, or continue expaning.

Expand current node

Pick the next node from the queue to expand and mark the neighbours. Unvisited neighbours are added to the expansion list.

Init path reconstruction

Clear the path and start reconstructing from t.

Erhöhe entlang augmentierendem Pfad

Der Fluss wird entlang des augmentierenden Pfades so lange erhöht, bis die Kapazitätsgrenze einer Kante auf dem Pfad erreicht ist (d.h. sie ist saturiert).

Fertig

Der Algorithmus hat einen maximalen Fluss mit folgendem Wert berechnet:

s ← wähle(v)

t ← wähle(v)

BEGIN

(* Initialisere Fluss *)

FOR { e ∈ E } DO

f(e) ← 0

(* Hauptschleife *)

WHILE augm. Pfad könnte existieren DO

FOR {e ∈ Pfad}

flow(e) ← flow(e) + Anpassung

END

Variablen

Pfad Anpassung
{} 0

Beim Wechsel des Tabs wird der Algorithmus abgebrochen.

Du kannst die Anwendung in einem anderen Browserfenster öffnen, um parallel einen anderen Tab zu lesen.