A maximum flow Der Cycle Cancelling Algorithmus Technische Universität München
ahuja

Der kostenminimale Fluss nutzt nicht die teure Kante mit Kosten 3.

Das Min-Cost Flow Problem

Die Planung von Straßennetzen, Pipelines or Datennetzwerken sind die Motivation für die Flussprobleme genannte Klasse von Optimierungsproblem. Der charakterisierende Aspekt der zu planenden Netzwerke ist, dass eine Art Ressource durch die Kanten eines Netzwerks transportiert werden muss, welche jedoch nur eine bestimmte Menge an Fluss zulassen. Für manche der Optimierungsprobleme haben diese Transportkanten noch weitere Eigenschaften, welche es zum Beispiel motivieren, den Kanten Kosten zuzuweisen - beispielsweise Mautgebühren für die Nutzung von Straßen.

In solch einer Problemstellung ist es interessant, wie ein bestimmter Fluss mit minimalen Kosten durch das Netzwerk geschickt werden kann. Diese Problem wird das Min-Cost Flow Problem genannt.

Dieses Applet präsentiert den Cycle-Cancelling Algorithmus, welcher in einem gegebenen Netzwerk einen kostenminimalen Fluss berechnet.

Was möchtest du zuerst tun?


Legende

node Knoten
edge Kante mit Kapazität 10 und Kosten 1

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 Fluss 7, Kapazität 10 und Kosten 1
edge Kante im Residualnetzwerk, Kosten 1
edge Kante auf negativem Kreis, Kosten 1

Legende

Algorithm status

Wähle zuerst einen Quellknoten aus

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

Wähle nun eine Senke aus

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

Der Cycle Cancelling Algorithmus

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

Initialisiere den Fluss

Der Algorithmus berechnet den maximalen Fluss ohne Berücksichtigung der Kantenkosten

Beginne die Hauptschleife

Die Hauptschleife sucht in jeder Iteration nach negativen Kreisen im Residualgraphen

Suche einen negativen Kreis

Durch den Bellman-Ford Algorithmus suchen wir im Residualgraphen nach negativen Kreisen

Eliminiere Kreis

Der negative Kreis wird aus dem Residualgraphen entfernt, indem wir mindestens eine seiner Kanten saturieren (das heißt mit Fluss auffüllen)

Fertig

Der Algorithmus ist fertig!

s ← wähle(v)

t ← wähle(v)

BEGIN

(* Initialisiere max. Fluss *)

BERECHNE MAX FLOW

(* Hauptschleife *)

WHILE negativer Kreis evtl. vorhanden DO

FÜHRE BELLMAN-FORD AUS

IF negativer Kreis gefunden

IDENTIFIZIERE Kreiskanten

Anpassung ← min(cost[e] |

e ∈ Kreiskanten)

FOR e ∈ Kreiskanten

flow[e] += Anpassung

END

Variablen

Kreis Anpassung
- -

Beim Wechsel des Tabs wird der Algorithmus abgebrochen.

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