Technische Universität München Zentrum Mathematik Diskrete Optimierung: Grundlagen (MA 2501) Prof. Dr. R. Hemmecke, Dr. R. Brandenberg, M.Sc.-Math. B. Wilhelm Übungsblatt 7 Aufgabe 7.1 Die folgende Abbildung zeigt ein Netzwerk N mit seinen Flusskapazitäten. a 5 4 6 s 10 d 3 b t 11 2 8 9 4 e 6 c Auf einigen Netzwerkkanten ist eine nicht-negative Funktion f gegeben durch (x, y) f (x, y) (s, a) 5 (s, b) 6 (s, c) 0 (a, b) 0 (c, e) 1 (d, t) 7 a) Wie ist f auf den übrigen Netzwerkkanten fortzusetzen, sodass f einen Fluss definiert? Was ist der Wert dieses Flusses? b) Stellen Sie das zu f gehörende Restnetzwerk Nf auf. Finden Sie einen gerichteten s, t-Pfad in Nf und erhöhen Sie den Fluss entlang dieses Pfades um den maximal möglichen Betrag. c) Hat der so gefundene Fluss maximalen Wert? Begründen Sie Ihre Antwort. d) Wie bestimmt man ausgehend von einem maximalen Fluss einen minimalen Schnitt in einem Netzwerk? Welchen minimalen Schnitt erhält man so im gegebenen Beispiel? Lösung zu Aufgabe 7.1 a) Die gegebenen f -Werte können folgendermaßen ergänzt werden, sodass f einen Fluss definiert: (x, y) f (x, y) (s, a) 5 (s, b) 6 (s, c) 0 Der Fluss f hat Wert 11. (a, b) 0 (c, e) 1 (d, t) 7 (a, d) 5 (b, c) 1 (b, d) 2 (b, e) 3 (e, t) 4 b) Das Restnetzwerk zu f sieht folgendermaßen aus: a 5 s 5 5 4 6 2 1 b d 2 3 8 8 1 7 t 4 1 e 1 c 5 Es gibt zwei s, t-Pfade in Nf , nämlich (s, c, e, b, d, t) und (s, c, b, d, t). Entlang beider Pfade kann f maximal um den Wert 1 erhöht werden, aber nicht entlang beider Pfade zugleich. Der neu enstehende Fluss f 0 hat demnach den Wert 12, unabhängig davon, welchen der beiden augmentierenden Pfade man wählt. c) Ja, der so gefundene Fluss f 0 hat maximalen Wert. Zwei mögliche Begründungen: • Im Restnetzwerk Nf 0 zu f 0 gibt es keinen gerichteten s, t-Pfad mehr. Daraus folgt (s. VL), dass f 0 maximalen Wert haben muss. • f 0 hat den Wert 12. Der Schnitt X = {s, b, c, e} hat Kapazität 12 in N . Aus dem Max-Flow Min-Cut Theorem, folgt, dass X ein minimaler Schnitt und f 0 ein Fluss mit maximalem Wert sein muss. d) Zu einem gegebenen Fluss f 0 mit maximalem Wert erstellt man das Restnetzwerk Nf 0 . Definiert man X als die Menge aller Knoten, die in Nf 0 noch durch einen gerichteten Pfad von s aus erreichbar sind, so ist X ein minimaler Schnitt. Auf diese Weise erhält man im gegebenen Beispiel den bereits oben genannten Schnitt X = {s, b, c, e}. Aufgabe 7.2 Wir modellieren ein Schifffahrtsnetz als gerichteten Graphen G = (V, A), indem wir jedem Hafen einen Knoten zuordnen und jeden möglichen Seeweg zwischen zwei Häfen (ohne Zwischenstopp an einem anderen Hafen) als gerichtete Kante auffassen. Nun hat Hafen i einen Bedarf an bi ∈ Z Tonnen Bananen. Negativer Bedarf heißt dabei, dass der Hafen diese Menge an Bananen vorrätig hat, aber loswerden will. Gesamtangebot und -nachfrage sollen dabei genau gleich sein. Ferner ist zu beachen, dass über jede Kante e maximal c(e) ∈ N0 Tonnen Bananen verschifft werden können. Gesucht ist eine zulässige Verschiffung der vorhandenen Bananen, sodass nach der Verschiffung alle Häfen die geforderte Menge an Bananen vorrätig haben bzw. losgeworden sind. Erläutern Sie, wie sich die Frage, ob eine solche Verschiffung existiert, mithilfe eines geeigneten Flussproblems lösen lässt. Lösung zu Aufgabe 7.2 Partitioniere die Knoten in Angebotsknoten und Nachfrageknoten, d.h., o.E. seien v1 , . . . , vk Knoten/Häfen mit negativem Bedarf (Angebot) und vk+1 , . . . , vn seien Knoten/Häfen mit nichtnegativem Bedarf (Nachfrage). Baue ein Netzwerk gemäß der folgenden Skizze auf (dabei sind die Kanten im grau unterlegten Bereich genau die Kanten aus dem Graphen mit entsprechender Bananenkapazität): −b1 s −bi −bk v1 vk+1 .. . .. . vi c({vi , vj }) vj .. . .. . vk vn bk+1 t bj bn P P Nach Voraussetzung gilt ki=1 (−bi ) = ni=k+1 bi =: b. Ein Fluss in diesem Netzwerk kann maximal Wert b haben. Es gilt: Es gibt genau dann einen Fluss mit Wert b, wenn es eine geforderte Verschiffung gibt. Denn ein solcher Fluss kann in eine zulässige Verschiffung übersetzt werden und umgekehrt: Ist ein Fluss mit Wert b gegeben, so schicke von Hafen vi zu Hafen vj genau so viele Bananen wie der Flusswert auf Kante (vi , vj ). Da alle Kanten von s aus und in t hinein voll durchflossen werden, sichert die Flusserhaltung, dass durch die so definierte Verschiffung alle Häfen ihr Angebot/ihre Nachfrage loswerden/bekommen. Umgekehrt definiere aus einer zulässigen Verschiffung einen Fluss mit Wert b, indem der Fluss auf der Kante (vi , vj ) durch die Menge der Bananen definiert wird, die von Hafen vi zu Hafen vj geschickt werden. Auf den Kanten von s aus und in t hinein werden die Kapazitäten voll ausgeschöpft. Dies ist ein wohldefinierter Fluss, da durch die Zulässigkeit der Verschiffung die Flusserhaltung an den Knoten gewährleistet wird. Aufgabe 7.3 Konstruieren Sie ein Netzwerk (V, A, s, t, c) (mit wenigen Knoten), das für jedes (beliebig große) M ∈ N die folgenden Eigenschaften erfüllt: (i) Für alle e ∈ A gilt c(e) ≤ M , (ii) der maximale Fluss hat Wert M , (iii) beim Ford-Fulkerson-Algorithmus (Methode der erweiternden Wege) kann in jedem Schritt ein augmentierender Pfad so ungünstig gewählt werden, dass sich der Wert des Flusses immer nur um 1 erhöht. Bemerkung. So ein Beispiel zeigt, dass man im schlechtesten Fall M -mal einen erweiterten Weg bestimmen muss. Man sagt in diesem Fall, dass die Laufzeit exponentiell in der (binären) Größe des Input ist, wobei die binäre Größe einer ganzen Zahl M definiert ist durch hM i := dlog(|M | + 1)e + 1. Lösung zu Aufgabe 7.3 Das folgende Netzwerk erfüllt die Bedingungen (i)-(iii), da der Algorithmus im ungünstigsten Fall abwechselnd die s,t-Pfade (s, a, b, t) und (s, b, a, t) im Restnetzwerk auswählt. b b M2 c s d M2 e t 1 d M2 e a b M2 c Es ist zudem nicht vom Wert von M abhängig, d. h., für wachsende Werte für M müssen keine zusätzlichen Kanten oder Knoten ins Netzwerk eingefügt werden. Aufgabe 7.4 Beim sogenannten Min-Cost-Flow Problem ist ein Netzwerk (V, A, s, t, c), eine Kostenfunktion b : A → N und κ ∈ N P gegeben. Gesucht ist ein s, t-Fluss f ∗ mit val (f ∗ ) = κ und minimalen Kosten cost(f ∗ ) = e∈A b(e) · f ∗ (e). Konstruieren Sie mithilfe der aus der Vorlesung bekannten Algorithmen ein Verfahren zur Lösung des Min-Cost-Flow Problems. Gehen Sie dabei wie folgt vor: a) Bestimmen Sie zunächst einen beliebigen Fluss f der Stärke κ und b) überlegen Sie dann, wie dieser mithilfe des Restnetzwerks in einen optimalen überführt werden kann. Lösung zu Aufgabe 7.4 a) • Variante 1 : Modifiziere z.B. den Ford-Fulkerson-Algorithmus so, dass er in jedem Schritt den bestehenden Fluss f entlang eines s,t-Pfades P in Nf um min{cf (P ), κ − val(f )} erhöht und abbricht, wenn f den Wert κ hat. Auf diese Weise terminiert der Algorithmus mit einem Fluss mit dem gewünschten Wert oder mit einem maximalen Fluss mit Wert < κ, wenn es keinen Fluss mit Wert κ in N gibt. • Variante 2 : Ergänze das Netzwerk N um eine Quelle s0 , die nur eine Kante mit Kapazität κ zur ursprünglichen Quelle s in N hat. Berechne nun einen maximalen s0 ,t-Fluss, wobei s als gewöhnlicher Knoten behandelt wird, an dem die Flusserhaltung gilt. Auf diese Weise erhält man einen Fluss mit Wert κ oder einen maximalen Fluss mit Wert < κ, wenn es keinen Fluss mit Wert κ in N gibt. b) Behauptung: Fluss f mit Wert κ ist kostenminimal in N ⇐⇒ Nf enthält keinen bzgl. ( b((u, v)) cf ((u, v)) ≤ c((u, v)) l negativen Zyklus, wobei l((u, v)) := −b((v, u)) cf ((u, v)) > c((u, v)) Beweis: “⇒”: Angenommen, f ist Fluss mit Wert κ und es gibt einen (bzgl. l) negativen Kreis C in Nf . Dann können durch Flusserhöhung entlang C die Kosten des Flusses gesenkt werden, ohne den Wert des Flusses zu ändern. Es folgt, dass f nicht kostenminimal gewesen sein kann. “⇐”: Angenommen, ein Fluss f mit Wert κ ist nicht kostenminimal. Dann existiert in 0 N mindestens ein s,t-Weg P 0 , dessen P Kapazität c(P ) von f nicht ganz ausgeschöpft wird und der geringere Kosten ( e∈P 0 b(e)) hat als einer der von f verwendeten s,tWege P . Im Restnetzwerk Nf bilden Kanten von P 0 und Kanten, die durch den Fluss auf P entstanden sind (oder deren Restkapazität durch f erhöht wurde), gerichtete Zyklen. Mindestens einer dieser Zyklen muss eine bzgl. l negative Länge haben. Nf enthält also negative Zyklen bzgl. l. Negative Zyklen in Nf können mit Hilfe des Floyd-Warshall-Algorithmus gefunden werden, s. Aufgabe 3.3. Iteriere also: finde negativen Zyklus C in Nf und augmentiere f entlang C um den maximalen Wert, wobei auf den Kanten mit negativen Kosten lediglich die Kapazität ausgeschöpft werden darf, die durch f entstanden war.