Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Netzwerke und Flüsse Ein Flussnetzwerk ist ein gerichteter Graph G = (V, E, q, s, c) mit zwei ausgewählten Knoten q, s ∈ V und einer Kapazitätsfunktion c : E → N. Die Quelle q hat Eingangsgrad 0 und die Senke s hat Ausgangsgrad 0. Kapitel 1: Flussalgorithmen Wir definieren n = |V |, m = |E| und nehmen an, jeder Knoten ist von q erreichbar. Es gilt n − 1 ≤ m ≤ n(n − 1). Ein Fluss in einem Netzwerk G ist eine realwertige Funktion f : E → R+ 0 mit den Eigenschaften Hilfreiche Literatur: • Ahuja, Magnanti, Orlin: Network Flows: Theory, Algorithms, and Applications, Prentice Hall, 1993. • Cormen, Leiserson, Rivest: Introduction to Algorithms, First Edition. MIT Press, 1990. • Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms, Second Edition. MIT Press, 2001. • Ottmann, Widmayer: Algorithmen und Datenstrukturen. BI-Wiss.-Verl. 1990. 1 a) Flusserhaltung: ∀u ∈ V \ {q, s} : X X f (v, u) = v : (v,u)∈E | {z fin (u) f (u, v) . v : (u,v)∈E } | {z fout (u) } b) Kapazitätsbeschränkung: ∀e ∈ E : f (e) ≤ c(e). Der Wert des Flusses f ist definiert als w(f ) = fout (q). Wegen der Flusserhaltung gilt somit auch w(f ) = fin (s). 2 Berthold Vöcking, RWTH Aachen, 23. April 2008 Problem 1 (Maximaler Fluss) Gegeben sei ein Flussnetzwerk G. Berechne einen maximalen Fluss auf G, d.h. einen Fluss mit größtmöglichem Wert. Berthold Vöcking, RWTH Aachen, 23. April 2008 Die Ford-Fulkerson-Methode Der folgende algorithmische Rahmen zur Berechnung eines maximalen Flusses f auf einem Flussnetzwerk G = (V, E, q, s, c) geht zurück auf Ford und Fulkerson, 1957. Beachte, wir haben angenommen, dass die Kantenkapazitäten ganzzahlig sind. Das ist keine besondere Einschränkung, denn bei rationalen Kapazitäten können wir immer alle Zahlen mit dem Hauptnenner multiplizieren und somit ein Flussproblem mit rationalen Kapazitäten in ein Problem mit ganzzahligen Kapazitäten transformieren. Die Algorithmen zur Berechnung von maximalen Flüssen, die wir im Folgenden vorstellen werden, haben zahlreiche praktische Anwendungen, die auf den ersten Blick nicht immer unbedingt unmittelbar an Flussprobleme erinnern. In den Übungen präsentieren wir dazu einige, teilweise überraschende Beispiele, wie z.B. das Meisterschaftsproblem. 3 Ford-Fulkerson-Methode: 1 ∀e ∈ E : f (e) = 0; 2 Solange es einen fv-Weg W gibt 3 erhöhe den Fluss f entlang von W maximal; 4 Ausgabe von f . fv-Weg“ steht für flussvergrößernder Weg“. Dabei handelt ” ” es sich um Wege im sogenannten Restnetzwerk“. ” 4 Berthold Vöcking, RWTH Aachen, 23. April 2008 Das Restnetzwerk Gf zu einem Netzwerk G = (V, E, q, s, c) und einem Fluss f ist wie folgt definiert. • O.B.d.A. nehmen wir an, dass das Netzwerk G keine entgegengesetzten Kanten hat, d.h. (u, v) ∈ E ⇒ (v, u) 6∈ E . • Für alle Paare (u, v) ∈ V 2 setze c(u, v) − f (u, v) (u, v) ∈ E restf (u, v) = f (v, u) (v, u) ∈ E 0 sonst Berthold Vöcking, RWTH Aachen, 23. April 2008 Max-Flow = Min-Cut Die Korrektheit der Ford-Fulkerson-Methode beruht auf dem Max-Flow=Min-Cut“-Theorem. ” Ein Cut oder Schnitt (Q, S) in einem Flussnetzwerk G ist eine Partionierung der Knotenmenge V = Q ∪˙ S mit q ∈ Q, s ∈ S. • Die Kapazität des Schnitts (Q, S) ist definiert durch X c(u, v) . c(Q, S) = (u,v)∈E u∈Q,v∈S • Der Fluss über den Schnitt (Q, S) ist definiert durch X X f (v, u) . f (u, v) − f (Q, S) = (v,u)∈E v∈S,u∈Q (u,v)∈E u∈Q,v∈S • Gf hat die Knotenmenge V und die Kantenmenge Ef = {(u, v) ∈ V 2 | restf (u, v) > 0} . Ein fv-Weg ist ein einfacher Weg von q nach s im Restnetzwerk Gf . (einfacher Weg = Weg auf dem jede Kante höchstens einmal vorkommt) 5 Lemma 2 [Max-Flow≤Min-Cut] Für jeden Fluss f und jeden Schnitt (Q, S) gilt w(f ) = f (Q, S) ≤ c(Q, S). ⊓ ⊔ Dieses Lemma folgt direkt aus der Flusserhaltung. Formal zeigt man w(f ) = f (Q, S) per Induktion über die Größe der Menge Q (vgl. Übungen). 6 Berthold Vöcking, RWTH Aachen, 23. April 2008 Satz 3 (Max-Flow=Min-Cut) Die folgenden Aussagen sind äquivalent. a) f ist ein maximaler Fluss. b) Das Restnetzwerk Gf enthält keinen fv-Weg. c) Es gibt einen Schnitt (Q, S) mit w(f ) = c(Q, S). Berthold Vöcking, RWTH Aachen, 23. April 2008 aus b) folgt c): • Aussage b) sagt, dass Gf keinen fv-Weg hat • Definiere Q = {v ∈ V | ∃ Weg von q nach v in Gf } und S = V \ Q. • Da Gf keinen fv-Weg hat, folgt s ∈ S. Also ist (Q, S) ein wohldefinierter Schnitt mit q ∈ Q und s ∈ S. • Für jede Kante (u, v) ∈ E mit u ∈ Q und v ∈ S gilt f (u, v) = c(u, v), weil sonst restf (u, v) > 0 und somit v ∈ Q wäre. Beweis von Satz 3: aus a) folgt b): • Zum Zwecke des Widerspruchs, sei f ein maximaler Fluss und W ein fv-Weg in Gf . • Dann kann f entlang von W vergrößert werden. Dies ist ein Widerspruch zur Maximalität von f . • Für jede Kante (v, u) ∈ E mit v ∈ S und u ∈ Q gilt f (v, u) = 0, weil sonst restf (u, v) > 0 und somit wiederum v ∈ Q wäre. • Wir erinnern uns an die Definitionen von c(Q, S) und f (Q, S) und erhalten Aussage c), weil X c(u, v) c(Q, S) = (u,v)∈E u∈Q,v ∈S aus c) folgt a): = Aus Lemma 2 folgt X f (u, v) − (u,v)∈E u∈Q,v∈S w(f ) = c(Q, S) ≥ Min-Cut ≥ Max-Flow , = f (Q, S) und somit gilt w(f ) = Max-Flow. 7 X f (v, u) (v,u)∈E v∈S,u∈Q Lemma 2 = w(f ) . ⊓ ⊔ Satz 3 8 Berthold Vöcking, RWTH Aachen, 23. April 2008 Die Ford-Fulkerson-Methode terminiert, sobald kein fv-Weg mehr vorhanden ist. Aus der Äquivalenz der Aussagen in Satz 3a) und b) folgt somit, dass der berechnete Fluss f maximal ist. Satz 4 (Korrektheit) Die Ford-Fulkerson-Methode berechnet einen maximalen Fluss. Wir haben angenommen, dass die Kantenkapazitäten natürliche Zahlen sind. Unter dieser Annahme ist auch der durch die Ford-Fulkerson-Methode berechnete Fluss ganzzahlig, d.h. auf jeder Kante wird der Wert des Flusses durch eine natürliche Zahl beschrieben. Korollar 5 (Ganzzahligkeit) Für jeden maximalen Fluss gibt es einen ganzzahligen Fluss mit gleichem Wert, und die Ford-Fulkerson-Methode berechnet einen derartigen ganzzahligen maximalen Fluss. Diese bemerkenswerte Eigenschaft ist nützlich für vielerlei Anwendungen (vgl. Übungen). 9 Berthold Vöcking, RWTH Aachen, 23. April 2008 Laufzeit der Ford-Fulkerson-Methode fv-Wege können beispielsweise durch Tiefen- oder Breitensuche im Restnetzwerk gefunden werden. Damit dauert eine Iteration der Ford-Fulkerson-Methode nur Zeit O(m). Sei P C = e∈E c(e). Da der Fluss in jeder Iteration um mindestens eine Einheit erhöht wird und C eine obere Schranke für den Wert des maximalen Flusses ist, können wir die Laufzeit der Ford-Fulkerson-Methode durch O(mC) abschätzen und erhalten damit eine pseudopolynomielle Laufzeitschranke. Im Allgemeinen hat die Ford-Fulkerson-Methode keine polynomielle Laufzeit. Im Folgenden werden wir jedoch sehen, dass die Berechnung der fv-Wege mittels einer Breitensuche eine polynomielle Laufzeit garantiert. Eine Breitensuche findet kürzeste fv-Wege, d.h. solche Wege zwischen q und s im Restnetzwerk, die eine minimale Anzahl Kanten enthalten. Satz 6 (Edmonds und Karp, 1969) Die Laufzeit der FordFulkerson-Methode mit Breitensuche ist O(m2 n) = O(n5 ). Zum Beweis dieses Satzes müssen wir zeigen, dass der Algorithmus nach O(mn) Iterationen terminiert. 10 Berthold Vöcking, RWTH Aachen, 23. April 2008 Lemma 7 Von Iteration zu Iteration verringert sich die Distanz von q zu einem Knoten v ∈ V im Restnetzwerk nicht. Beweis: Entlang des fv-Weges können durch die Erhöhung des Flusses Kanten verschwinden und entstehen. Es gibt zwei Arten von Veränderungen. • Für jede Kante (u, v) auf dem fv-Weg verringert sich restf (u, v). Kanten mit minimaler Restkapazität auf dem fv-Weg, sogenannte Flaschenhalskanten, verschwinden aus dem Restnetzwerk, denn ihre Restkapazität wird auf 0 gesetzt. • Gleichzeitig erhöht sich für jede Kante (u, v) auf dem fv-Weg die entgegengesetzte Restkapazität restf (v, u). Falls restf (v, u) zuvor den Wert 0 hatte entsteht eine neue Kante im Restnetzwerk. Zum Zwecke des Beweises, verändern wir das Restnetzwerk in zwei Schritten und fügen zunächst nacheinander alle neuen Kanten hinzu und entfernen erst dann die Flaschenhalskanten. 11 Berthold Vöcking, RWTH Aachen, 23. April 2008 Hinzufügen von neuen Kanten: Kann das Hinzufügen der neuen Kanten Distanzen von der Quelle zu anderen Knoten verringern? – Nein! Begründung: Eine Kante (v, u) wird nur dann eingefügt, wenn die Kante in umgekehrter Richtung – also die Kante (u, v) – auf einem flussvergrößerndem Weg liegt. Flussvergrößernde Wege sind aber kürzeste Weg im Restnetzwerk. Wenn u also die Distanz ℓ von der Quelle hat, so hat v die Distanz ℓ + 1 von der Quelle. Die neue Kante verbindet also einen Knoten mit Distanz ℓ + 1 von der Quelle mit einem Knoten mit Distanz ℓ. Um aber die Distanz von der Quelle zu irgendeinem Knoten zu verringern, müsste man eine gerichtetete Kante von einem Knoten mit Distanz k, für irgendein k ≥ 0, zu einem Knoten mit Distanz k + i, für irgendein i > 1, einfügen. Entfernen von Flaschenhalskanten: Offensichtlich können Kantenlöschungen keine Distanzen verringern. ⊓ ⊔ Lemma 7 12 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Beweis von Satz 6: Der Algorithmus von Dinitz, 1970 • Wenn eine Kante (u, v) zur Flaschenhalskante wird, verschwindet sie aus dem Restnetzwerk. Sei ℓ die Distanz von q zu u vor der Entfernung von (u, v). Die Distanz von q zu v ist somit ℓ + 1. • Die Kante (u, v) kann in einer späteren Iteration wieder in das Restnetzwerk eingefügt werden und zwar wenn der Fluss auf Kante (v, u) erhöht wird. Dazu muss (v, u) auf einem kürzesten Weg liegen. Da die Distanz von q zu v sich aber nicht verringert hat, muss die Distanz von q zu u dann mindestens ℓ + 2 sein. • Zwischen jedem Entfernen und Wiedereinfügen einer Kante (u, v) erhöht sich die Distanz von der Quelle q zum Knoten u also um den additiven Wert 2. Da die maximale Distanz n − 1 ist, kann eine Kante also nicht öfter als 12 n mal entfernt werden. • In jeder Iteration wird mindestens eine Kante entfernt. Es gibt bis zu 2m Kanten im Restnetzwerk. Also ist die Anzahl der Iterationen höchstens 21 n · 2m = nm. Idee: In jeder Iteration erhöhe den Fluss entlang von mehreren kürzesten fv-Wegen. Zu einem gegebenen Restnetzwerk Gf = (V, Ef ) ist das Niveaunetzwerk G′f = (V, Ef′ ) wie folgt definiert. Für i ∈ N0 sei Vi = {v ∈ V | die Distanz von q nach v in Gf ist i} . G′f enthält nur die Kanten von Niveau i zu Niveau i + 1, d.h, Ef′ = {(u, v) ∈ Ef | ∃i : u ∈ Vi , v ∈ Vi+1 } . Als Kapazitäten für diese Kanten verwenden wir die Restkapazitäten des Restnetzwerkes Gf . G′f kann aus Gf durch Breitensuche in Zeit O(m) berechnet werden. ⊓ ⊔ Satz 6 13 14 Berthold Vöcking, RWTH Aachen, 23. April 2008 Statt eines fv-Weges im Restnetzwerk Gf berechnet Dinitzs Algorithmus einen sogenannten Sperrfluss“ im Niveaunetz” werk G′f . Dieser Begriff ist folgendermaßen definiert: • Sei φ ein Fluss im Niveaunetzwerk G′f . • Eine Kante e ∈ Ef′ heisst saturiert, wenn φ(e) = restf (e). Berthold Vöcking, RWTH Aachen, 23. April 2008 Dinitzs Maximaler-Fluss-Algorithmus 1 ∀e ∈ E : f (e) = 0; 2 Solange es einen q-s Weg im Restnetzwerk gibt 3 berechne das Niveaunetzwerk G′f ; 4 berechne einen Sperrfluss φ in G′f ; 5 addiere“ φ zu f ; ” 6 Ausgabe von f . • φ heisst Sperrfluss wenn jeder q-s-Weg in G′f mindestens eine saturierte Kante enthält. Intuitiv ist ein Sperrfluss also ein Fluss im Niveaunetzwerk, der alle Wege verstopft. (In den Übungen zeigen wir, dass der Sperrfluss nicht notwendigerweise ein maximaler Fluss im Niveaunetzwerk ist.) 15 • Beim Addieren der Flüsse in Schritt 5 ist zu beachten, dass Flüsse auf entgegengesetzten Kanten subtrahiert werden müssen. • Die Korrektheit des Algorithmus folgt mittels des Min” Cut=Max-Flow“-Theorems analog zur Ford-FulkersonMethode. 16 Berthold Vöcking, RWTH Aachen, 23. April 2008 Lemma 8 Dinitzs Algorithmus terminiert nach spätestens n − 1 Sperrflussberechnungen. Beweis: Behauptung: Die Länge des kürzesten Weges im Restnetzwerk wächst von Iteration zu Iteration um mindestens eine Kante. • Sei ℓ die Entfernung zwischen q und s zu Beginn der Iteration. • Alle ursprünglichen Wege der Länge ℓ werden durch den Sperrfluss zerstört. Aber es können neue Wege durch neue erzeugte Kanten entstehen. • Neue Kanten laufen jedoch entgegengesetzt zum Sperrfluss, also führen sie von Niveau i zu Niveau i − 1 für irgendein i ≥ 1. Wege über solche Kanten haben Länge mindestens ℓ + 2. Berthold Vöcking, RWTH Aachen, 23. April 2008 Wir müssen uns nun nur noch überlegen, wie man eine Sperrflussberechnung effizient durchführen kann. Dazu greifen wir auf ein Verfahren zurück, das ein wenig effizienter ist als das ursprünglich von Dinitz vorgeschlagene Verfahren zur Sperrflussberechnung. Wir verwenden zur Sperrflussberechung die sogenannte Forward-Backward-Propagation“, die von ” Malhotra, Kumar und Maheshwari im Jahr 1978 vorgestellt wurde. Dieses Verfahren berechnet einen Sperrfluss in Zeit O(n2 ), so dass sich insgesamt eine Laufzeit von O(n3 ) ergibt. Gegeben sei ein Niveaunetzwerk G′f mit Restkapazitäten restf (e). Wir beschreiben nun einen Algorithmus zur Berechnung eines Sperrflusses φ auf G′f . Für einen Knoten v ∈ V bezeichne • A(v) = {(v, u) ∈ Ef′ } die von v ausgehenden Kanten, • E(v) = {(u, v) ∈ Ef′ } die in v eingehenden Kanten. Somit gilt die Behauptung und der Satz folgt, weil die Länge eines q-s-Weges mindestens 1 und höchstens n − 1 ist. ⊓ ⊔ Wir starten mit φ = 0 und erhöhen den Fluss φ nach und nach durch sogenannte Forward-Backward-Propagationen“ ” bis wir einen Sperrfluss im Niveaunetzwerk berechnet haben. 17 18 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Forward-Propagation: Eine Propagationsphase besteht aus einer Forward-“ und ” einer Backward-Propagation“. ” • Sei v ∗ der Knoten mit kleinstem, positivem Potential. Sei i das Niveau von v ∗ . Wir erzeugen pot(v ∗ ) Einheiten zusätzlichen Flusses am Knoten v ∗ . • Sei φ der berechnete Fluss zu Beginn einer solchen Propagationsphase. • Dadurch erhalten wir einen Überschuss von pot(v ∗ ) Flusseinheiten am Knoten v ∗ . Diesen Überschuss schieben wir vorwärts entlang der Kanten in A(v ∗ ). • Das Potential einer Kante e ist definiert als • Jetzt erhalten wir einen Überschuss auf einigen der Knoten auf Niveau i + 1. Diesen Überschuss verschieben wir wiederum zu Knoten auf Niveau i + 2, usw. bis wir die Senke erreichen. pot(e) = restf (e) − φ(e) , entspricht also der noch ungenutzten Restkapazität der Kante e im Niveaunetzwerk. • Das Potential eines Knotens v ist definiert als X X pot(v) = min pot(e), pot(e) . e∈E(v) 19 • Da v ∗ der Knoten mit kleinstem Potential war, ist die Entsorgung des Überschussflusses sichergestellt, weil jeder Knoten genügend Potential hat, um den Überschuss weiterzuleiten. e∈A(v) Backward Propagation: analog – ausgehend vom selben Knoten v ∗ wird der Überschuss zur Quelle propagiert. 20 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Forward-Propagation im Detail: Wir benutzen eine FIFO-Queue Q zur Verwaltung der Knoten mit positivem Überschuss. Die Menge A(v) der von v ausgehenden Kanten im Niveaunetzwerk wird als Liste verwaltet. next(A(v)) bezeichnet jeweils die nächste bisher noch nicht betrachtete Kante. Ziel ist die Berechnung eines Flusses ψ mit Wert pot(v ∗ ) vom Knoten v ∗ zur Senke s. Algorithmus Forward-Propagation(v ∗ ): 01 setze U (v ∗ ) = pot(v ∗ ); /* initialer Überschuss */ 02 für alle v 6= v ∗ setze U (v) = 0; 03 füge v ∗ in Q ein; 04 while Q 6= ∅ do 05 nimm Element aus Q und nenne es v; 06 while U (v) > 0 do 07 sei e = (v, u) = next(A(v)); 08 setze ψ(e) = min{pot(e), U (v)}; 09 setze U (v) = U (v) − ψ(e); 10 setze U (u) = U (u) + ψ(e); 11 falls u 6= s und u 6∈ Q füge u in Q ein; 12 Ausgabe von ψ. Die Propagationsphasen werden solange wiederholt bis ein Sperrfluss berechnet ist. Die Kanten- und Knotenpotentiale werden dabei nach jeder Propagationsphase angepasst. Knoten und Kanten mit Potential 0 werden als saturiert bezeichnet und werden in den kommenden Propagationsphasen nicht mehr betrachtet, also aus dem Niveaunetzwerk entfernt. Die Sperrflussberechnung terminiert, sobald alle Knoten entfernt sind. Beobachtung 9 Nach spätestens n − 1 Propagationsphasen ist ein Sperrfluss berechnet, weil in jeder Phase mindestens ein Knoten saturiert wird. Der Fluss ψ wird dann zum Fluss φ addiert. 21 22 Berthold Vöcking, RWTH Aachen, 23. April 2008 Lemma 10 Eine Forward-Propagation kann in Zeit O(n + ℓ) durchgeführt werden, wobei ℓ die Anzahl der neu saturierten Kanten ist. (Backward-Propagation analog.) Beweis: Die Verwendung der FIFO-Queue Q garantiert die folgenden Eigenschaften. 1) Die Niveaus werden strikt nacheinander abgearbeitet. Berthold Vöcking, RWTH Aachen, 23. April 2008 Satz 11 Durch Forward-Backward-Propagation kann man einen Sperrfluss in Zeit O(m + n2 ) = O(n2 ) berechnen. Dadurch erhält man einen Algorithmus zur Berechnung eines maximalen Flusses mit Laufzeit O(n3 ). Beweis von Satz 11 2) Dadurch wird jeder Knoten höchstens einmal aus der Queue Q entnommen. • Beobachtung 9 liefert, dass nur höchstens n − 1 Propagationsphasen zur Sperrflussberechnung nötig sind. Sei ℓi die Anzahl der in der i-ten Propagationsphase gelöschten Kanten, 1 ≤ i ≤ n − 1. 3) Für jeden entnommenen Knoten werden alle bis auf maximal eine der betrachteten Kanten saturiert. Pro Knoten v gibt es somit maximal eine Kante in A(v), die betrachtet aber nicht saturiert wird. Die Laufzeitkosten werden auf die Kanten umgelegt: • Dann ergibt sich aus Lemma 10 die folgende Laufzeitabschätzung für die Sperrflussberechnung: ! n−1 n−1 X X = O(n2 + m) . O(n + ℓi ) = O n2 + ℓi i=1 i=1 • Für jede betrachtete Kante entstehen Kosten O(1). • Da n − 1 Sperrflussberechnungen einen maximalen Fluss liefern, folgt der Satz. • Die Anzahl betrachteter, saturierter Kanten ist ℓ. • Die Anzahl betrachteter, nicht saturierter Kanten ist höchstens n. Damit sind die Gesamtkosten O(n + ℓ). 23 ⊓ ⊔ ⊓ ⊔ 24 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Das Min-Cost-Flow-Problem Beim Min-Cost-Flow-Problem ist jeder Kante e ∈ E im Flussnetzwerk neben der Kapazitätsfunktion c : E → N zusätzlich eine Kostenfunktion ℓ : E → Z zugeordnet. Das Netzwerk darf keine Kreise mit negativer Gewichtssumme enthalten. Sei f ein Fluss in G. Die Kosten von f sind definiert als X ℓ(e) f (e) . ℓ(f ) = e∈E Gegeben sei ein Flussnetzwerk G = (V, E, q, s, c, ℓ) und eine Zahl W ∈ N, wobei W nicht größer als der maximale Fluss in G ist. Wir suchen einen kostenminimaler Fluss f ∗ mit Wert W , d.h. es soll gelten w(f ∗ ) = W und Wir greifen unserer Analyse vorweg und merken an, dass – wie schon beim Max-Flow-Problem – für jede Instanz des Min-Cost-Flow-Problems eine ganzzahlige optimale Lösung existiert und unsere Algorithmen ohne weiteres Zutun eine solche Lösung berechnen werden. Für W = 1 entspricht das Min-Cost-Flow-Problem wegen der Ganzzahligkeit dem Kürzeste-Wege-Problem. Im Falle ℓ(e) = 0, für alle e ∈ E, ist ein beliebiger Fluss mit Wert W gesucht. Dieses Problem kann ohne nennenswerten Zeitverlust auf das Max-Flow-Problem reduziert werden. (Wie?) ℓ(f ∗ ) = min{ℓ(f ) | f ist Fluss in G mit w(f ) = W } . 25 26 Berthold Vöcking, RWTH Aachen, 23. April 2008 Der Cycle-Canceling-Algorithmus Wir beschreiben einen Algorithmus für das Min-Cost-FlowProblem. Gf = (V, Ef ) bezeichne wie schon zuvor das Restnetzwerk bezüglich eines Flusses f . Die Kosten für eine Kante (u, v) ∈ Ef \ E seien durch ℓ((u, v)) = −ℓ((v, u)) definiert. Eine Zirkulation f ′ in Gf ist eine Funktion f ′ : Ef → R+ 0, die die Flusserhaltung auf jedem Knoten aus V einhält und die Restkapazitäten nicht übersteigt. Somit entspricht eine Zirkulation einem Fluss, der im Gegensatz zu einem herkömmlichen Fluss“ auch auf Quelle und ” Senke die Flusserhaltung einhält. Analog zur Definition bei herkömmlichen Flüssen, sei der Wert der Zirkulation über einen Schnitt (Q, S) definiert als X X ′ ′ f ′ (v, u) . f (u, v) − f (Q, S) = (v,u)∈E v∈S,u∈Q (u,v)∈E u∈Q,v∈S Berthold Vöcking, RWTH Aachen, 23. April 2008 Eine Zirkulation, die nur entlang eines einfachen Kreises im Restnetzwerk fließt, wird als Kreisfluss bezeichnet. Für einen Kreis K in Gf , sei f ′ (K) der größtmögliche Kreisfluss auf K, der die Restkapazitäten nicht überschreitet. Wir sagen ein P Kreis K hat negative Kosten, wenn gilt e∈K ℓ(e) < 0. Cycle-Canceling-Algorithmus: 1 Berechne einen beliebigen Fluss f mit Wert W ; 2 Solange Gf einen Kreis K mit neg. Kosten enthält 3 setze f := f + f ′ (K); 4 Ausgabe von f . Da f ′ (K) eine Zirkulation ist, erhöht sich durch die Addition von f ′ (K) der Wert des Flusses nicht, denn w(f + f ′ (K)) = w(f ) + w(f ′ (K)) = w(f ) = W . Andererseits verringern sich aber die Kosten, denn es gilt Der Wert der Zirkulation ist ebenfalls analog definiert als w(f ′ ) = f (q, V \ {q}). Aufgrund der Flusserhaltung an der Quelle gilt w(f ′ ) = 0. Per Induktion folgt: Für jeden Schnitt (Q, S) gilt f ′ (Q, S) = w(f ′ ) = 0. ℓ(f + f ′ (K)) = ℓ(f ) + ℓ(f ′ (K)) < ℓ(f ) , P da ℓ(f ′ (K)) = f ′ (a)· e∈K ℓ(e) < 0, wobei a eine beliebige Kante aus K bezeichnet. 27 28 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Lemma 12 Wenn f nicht kostenminimal ist, dann gibt es einen Kreis K mit negativen Kosten in Gf . Beweis: Übungsaufgabe: Zeige, dass jede Zirkulation f ′ , die M viele Kanten benutzt, in höchstens M viele Kreisflüsse zerlegt werden kann, d.h. f ′ besteht aus der Addition von höchstens M Kreisflüssen. Sei f ein Fluss, der nicht kostenminimal ist, und sei f ∗ ein kostenminimimaler Fluss, d.h. ℓ(f ∗ ) < ℓ(f ). Der Fluss f ∗ −f erfüllt die Flusserhaltung auf allen Knoten, ist also eine Zirkulation auf den maximal 2m Kanten des Restnetzwerkes Gf und kann somit in M ≤ 2m viele Kreisflüsse f1 , . . . , fM zerlegt werden. Es gilt f ∗ − f = f1 + · · · + fM und somit ℓ(f ∗ ) − ℓ(f ) = ℓ(f1 ) + · · · + ℓ(fM ). Aus ℓ(f ∗ ) − ℓ(f ) < 0 folgt nun ℓ(f1 ) + · · · + ℓ(fM ) < 0 . Aus dem Lemma und den vorhergehenden Überlegungen folgt Satz 13 Ein Fluss f ist kostenminimal genau dann, wenn Gf keinen Kreis mit negativen Kosten enthält. Damit ist die Korrektheit des Cycle-Canceling-Algorithmus nachgewiesen. Die Laufzeit des Cycle-Canceling-Algorithmus lässt sich im Allgemeinen wieder nur pseudopolynomiell in C, der Summe der Kapazitäten, beschränken. Wie schon bei der Ford-Fulkerson-Methode kann man aber eine polynomielle Laufzeitschranke erhalten, wenn man die aufzuaddierenden Flüsse – in diesem Fall die Kreise mit negativen Kosten – geschickt wählt. Wenn nun keiner der diesen M Kreisflüssen zugrunde liegenden Kreise negative Kosten hätte, so wäre aber ℓ(f1 ) + · · · + ℓ(fM ) ≥ 0. Also gibt es mindestens einen Kreis in Gf mit negativen Kosten. ⊓ ⊔ 29 30 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Anzahl der Phasen: Der Min-Mean-Cycle-Canceling-Algorithmus Sei T die Anzahl der Phasen. Sei µ0 der Wert von µ zu Beginn der ersten Phase und, für 1 ≤ t ≤ T , sei µt der Wert von µ zu Ende der t-ten Phase. Der Min-Mean-Cycle-Canceling-Algorithmus wählt in jeder Iteration einen Kreis K aus Gf , der die durchschnittlichen Kantenkosten (mean cost) P ℓ(e) ℓ(K) ℓ̄(K) = = e∈K |K| |K| Für 1 ≤ t ≤ T − 1 folgt aus der Definition der Phasen 1 µt−1 µt ≤ 1 − (1) µt−1 ≤ 1/n . n e minimiert. Zu Beginn des Algorithmus ist µ durch den maximalen Absolutbetrag aller Kantenkosten, das wir mit L bezeichnen, nach oben beschränkt. Es gilt somit µ0 ≤ L. (2) K wird als Min-Mean-Cycle bezeichnet. Sei µ(f ) = −ℓ̄(K). Beachte, wenn K ein Kreis mit negativen Kosten ist, so ist ℓ̄(K) negativ und somit µ(f ) positiv. Für die Laufzeitanalyse zerlegen wir die Folge der Iterationen des Algorithmus in Phasen. Sei f der Fluss zu Beginn einer Phase. Die Phase endet nach der ersten Iteration in der ein Fluss g mit µ(g) ≤ (1 − n1 )µ(f ) oder µ(g) ≤ 0 berechnet wird. Im letzteren Fall enthält Gg keinen Kreis mit negativen Kosten und die Berechnung terminiert. Ansonsten folgt die nächste Phase. Die letzte Abschätzung erfolgt dabei aus der allgemeingültigen Ungleichung 1 − x ≤ e−x mit x = n1 . Der Algorithmus terminiert, wenn zum Ende einer Phase die Bedingung µ ≤ 0 erfüllt ist. Am Ende von Phase T − 1 gilt somit noch µ > 0. Aufgrund der Ganzzahligkeit der Kosten kann µ nicht im Interval (0, n1 ) liegen. (Warum?) Am Ende von Phase T − 1 gilt somit µ ≥ n1 , d.h. µT −1 ≥ n1 . (3) Aus den Ungleichungen (1), (2) und (3) folgt T − 1 ≤ loge1/n (nL) = ln(nL) = n ln(nL) , ln(e1/n ) und somit terminiert der Algorithmus nach T ≤ n ln(nL) + 1 Phasen. 31 32 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Anzahl der Iterationen je Phase: Sei f der initiale Fluss zu Beginn einer Phase. Wir zeigen, dass der Algorithmus nach m Iterationen terminiert oder nach spätestens m − 1 Iterationen wird ein Fluss g mit µ(g) ≤ (1 − n1 )µ(f ) berechnet. Eine Phase dauert somit höchstens m Iterationen. Wir treffen zunächst die folgende vereinfachende Annahme. Annahme 14 Für alle Kanten e ∈ Gf gelte ℓ(e) ≥ −µ(f ). Wir unterscheiden Iterationen vom Typ 1 in denen der MinMean-Cycle jeweils nur Kanten mit negativen Kosten enthält und Iterationen vom Typ 2 in denen der Min-Mean-Cycle mindestens eine Kante mit positiven Kosten enthält. In jeder Typ-1-Iteration wird mindestens eine Kante mit negativen Kosten saturiert und aus dem Restnetzwerk entfernt. Ferner verlaufen alle möglicherweise neu entstehenden Kanten entgegengesetzt zu den Kanten mit negativen Kosten und haben somit selbst positive Kosten. Spätestens nach m konsekutiven Typ-1-Iterationen terminiert der Algorithmus somit, weil das Restnetzwerk dann nur noch Kreise mit positiven Kosten enthält. 33 Wenn die Phase länger als m Iterationen dauert, folgt nach spätestens m − 1 Typ-1-Iterationen eine Typ-2-Iteration. Sei g der Fluss zu Beginn der ersten Typ-2-Iteration. Da die Typ-1-Iterationen keine Kanten mit negativen Kosten hinzugefügt haben, gilt weiterhin unsere Annahme, d.h. ℓ(e) ≥ −µ(f ) bzw. −ℓ(e) ≤ µ(f ) für alle Kanten e ∈ Gg . Sei K der Min-Mean-Cycle in g und H ⊆ K die Menge der Kanten mit negativen Kosten aus K. Es gilt X −ℓ(e) X −ℓ(e) µ(f ) µ(g) = ≤ ≤ |H| · , |K| |K| |K| e∈K e∈H weibei die letzte Abschätzung aus Annahme 14 folgt. Aus |H| ≤ |K| − 1 folgt nun |H|/|K| ≤ 1 − 1/|K| ≤ 1 − 1/n und somit µ(g) ≤ (1 − n1 )µ(f ). Die Phase endet also sobald der Fluss g berechnet ist und damit noch vor der ersten Typ-2-Iteration! Wenn Annahme 14 zu Beginn einer Phase hält, so gibt es also keine Typ-2-Iterationen in der Phase und die Phase endet nach spätestens m vielen Typ-1-Iterationen. 34 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Annahme 14 sieht sehr restriktiv aus, insbesondere vor dem Hintergrund der vorhergehenden Analyse. Wir zeigen aber nun, dass wir diese Annahme erreichen können, indem wir die Kostenfunktion ℓ auf geeignete Art und Weise verändern, ohne dabei den Ablauf des Algorithmus zu beeinflussen. Lemma 15 Im Restnetzwerk Gf = (V, Ef ) gelte ℓ̄(K) ≥ −µ für jeden Kreis K. Dann gibt es eine Funktion p : V → Z mit der Eigenschaft ℓ′ (e) = ℓ(e) − p(v) + p(u) ≥ −µ für jede Kante e ∈ Ef . Sei p : V → Z eine beliebige Funktion, die jedem Knoten einen Wert zuweist, ein sogenanntes Potential. Wir setzen ℓ′ (e) = ℓ(e) − p(v) + p(u) für jede Kante e = (u, v). Beachte, für ē = (v, u) gilt Beweis: ℓ′ (ē) = ℓ(ē) − p(u) + p(v) = −ℓ(e) − p(u) + p(v) = −ℓ′ (e) . Wir beobachten, dass die Potentiale die Kostensumme auf Kreisen nicht beeinflussen, da jeder Potentialwert einmal mit positivem und einmal mit negativem Vorzeichen aufsummiert wird, d.h. für jeden Kreis K gilt ℓ(K) = ℓ′ (K). Die Potentiale haben somit keine Auswirkungen auf den Ablauf des Algorithmus. Um Annahme 14 in der vorhergenden Analyse zu erreichen, können wir also beliebige Potentiale verwenden, um die Kostenfunktion zu Beginn einer Phase geeignet zu manipulieren. Das folgende Lemma besagt, dass es tatsächlich Potentiale gibt, die es erlauben, Annahme 14 zu erreichen. 35 Für jede Kante e ∈ Ef definiere ein Kantengewicht w(e) = ℓ(e) + µ. Für jeden Knoten v ∈ V definiere nun p(v) als die Länge (= Gewicht) eines kürzesten Kantenzuges (d.h. Pfades mit beliebigen Wiederholungen von Knoten und Kanten) in Gf , der von einem beliebigen Knoten zum Knoten v in Gf führt. Dieser Wert ist wohldefiniert, weil keine Kreise mit negativem Gewicht in Gf existieren, denn aus ℓ̄(K) ≥ −µ folgt w(K) ≥ 0 für jeden Kreis K. Die Definition der Potentiale garantiert uns die folgende Eigenschaft: Für jede Kante e = (u, v) gilt p(v) ≤ p(u) + w(u, v), denn der kürzeste Weg, der in v endet, kann nicht länger als der kürzeste Weg sein, der zu u führt und über die Kante (u, v) fortgesetzt wird. Es folgt ℓ′ (e) = ℓ(e) − p(v) + p(u) = w(e) − p(v) + p(u) − µ ≥ −µ . ⊓ ⊔ 36 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Beweis von Lemma 16 Laufzeit pro Iteration: Wir zeigen nun wie man einen Min-Mean-Cycle im Restnetzwerk in Zeit O(nm) berechnen kann (Karp, 1978). Für k = 0, 1, . . . , n und v ∈ V sei dk (v) die Länge (=Kosten) eines kürzesten Kantenzuges mit genau k Kanten, der bei v endet. Es gilt d0 (v) = 0 und dk+1 (v) = min e=(u,v)∈E (dk (u) + ℓ(e)) . Alle dk (v)-Werte können somit durch dynamische Programmieren in Zeit O(nm) berechnet werden. Lemma 16 Der Wert ℓ̄(K) des Min-Mean-Cycles in G ist dn (v) − dj (v) n−1 α = min max v∈V j=0 n−j 37 Sei K ein Min-Mean-Cycle. Wenn wir alle Kantenkosten um den gleichen additiven Betrag ∆ erhöhen, so ist K unverändert ein Min-Mean-Cycle aber sein Wert würde sich um ∆ erhöhen. Beachte, dass auch α sich genau um ∆ erhöhen würde. (Warum?) Deshalb können wir die Kantenkosten um einen beliebigen additiven Betrag ∆ verschieben und somit o.B.d.A. annehmen, dass ℓ̄(K) = 0 gilt. Unter dieser Annahme müssen wir zeigen, es gilt auch α = 0. Betrachte dazu einen beliebigen Knoten v. Sei P ein Kantenzug aus n Kanten, der bei v endet und die Länge dn (v) hat. Weil das Netzwerk nur n Knoten enthält, muss P einen Kreis enthalten. Sei C dieser Kreis und P ′ der Kantenzug, den wir enthalten, wenn wir C aus P entfernen. Sei j die Anzahl Kanten in P ′ und n − j die Anzahl Kanten in C. Es gilt nun dn (v) = ℓ(P ) = ℓ(C) + ℓ(P ′ ) ≥ ℓ(P ′ ) ≥ dj (v) , da ℓ(C) ≥ 0. Somit existiert für jeden Knoten v ein j ∈ {1, . . . , n − 1} mit der Eigenschaft dn (v) ≥ dj (v). Hieraus folgt α ≥ 0. 38 Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Tafelbild: Wir müssen nun also nur noch zeigen, dass auch α ≤ 0 gilt. Dazu werden wir zeigen, dass es einen Knoten w mit der Eigenschaft dn (w) ≤ dj (w) für alle j ∈ {0, . . . , n − 1} gibt. Zu diesem Zweck betrachte die folgende Situation: • Sei v ein Knoten des Min-Mean-Cycle K. • Sei P ein kürzester unter allen Kantenzügen beliebiger Länge, die am Knoten v enden. O.B.d.A. enthält P keinen Kreis, da es keine Kreise negativer Länge gibt. Sei p < n die Anzahl Kanten in P . • Sei w derjenige Knoten, den wir erreichen, wenn wir K von v ausgehend entlang von n−p Kanten folgen. Diesen Kantenzug bezeichnen wir mit Q. • Sei R der Weg von w zu v entlang von K, und sei r die Anzahl Kanten dieses Weges. • Sei nun j ∈ {0, . . . , n − 1} beliebig gewählt und S ein Kantenzug minimaler Länge aus j Kanten, der am Knoten w endet. Aus der Definition der Kantenzüge folgt dn (w) ≤ ℓ(P ) + ℓ(Q) = dp (v) + ℓ(Q) , und dp (v) ≤ dj+r (v) ≤ dj (w) + ℓ(R) . Es folgt dn (w) ≤ dj (w) + ℓ(R) + ℓ(Q) . Nun hat aber der Kantenzug Q ◦ R die Länge 0, da er K (möglicherweise mehrfach) umläuft und ℓ(K) = 0 gilt. Somit gilt, wie gefordert, dn (w) ≤ dj (w). 39 40 ⊓ ⊔ Berthold Vöcking, RWTH Aachen, 23. April 2008 Berthold Vöcking, RWTH Aachen, 23. April 2008 Gesamtlaufzeit: Der Algorihmus zur Bestimmung des Min-Mean-Cycles arbeitet nun folgendermaßen: • Berechne die dk (v)-Werte und bestimme α, also den Wert des Min-Mean-Cycles. • Erhöhe alle Kantenkosten um den additiven Term α, so dass der Wert des Min-Mean-Cycles nun gleich 0 ist. Der Algorithmus benötigt höchstens n log(nL) + 1 Phasen, die jeweils höchstens m Iterationen benötigen, die jeweils Laufzeit O(mn) haben. L bezeichnet dabei das Maximum der Absolutwerte der Kantenkosten. Es folgt Satz 17 Der Mean-Cycle-Canceling-Algorithmus hat eine Laufzeit von O(m2 n2 log(nL)). • Transformiere die Kantenkosten wie in Lemma 15 beschrieben. Die benötigten Potentiale lassen sich aus den dk (v)-Werten bestimmen. Nun sind alle Kantenkosten nicht-negativ und alle Kanten auf dem Min-Mean-Cycle haben somit den Wert 0. Diese Abschätzung der Laufzeit ist zwar polynomiell in der Eingabelänge beschränkt, aber man spricht von einer schwach polynomiellen Schranke, da die Größe der Eingabezahlen, wenngleich nur logarithmisch, in die Abschätzung eingeht. Tatsächlich lässt sich auch eine stark polynomielle Laufzeitschranke herleiten. • Streiche alle Kanten mit Kosten größer als 0 aus dem Graphen und suche den Min-Mean-Cycle mittels Tiefensuche unter den verbleibenden Kanten. Satz 18 Der Mean-Cycle-Canceling-Algorithmus hat eine Laufzeit von O(m3 n2 log n). Auf die Präsentation des Beweises dieses Satzes verzichten wir an dieser Stelle. 41 42