Übungsblatt 2, Aufgabe 4 Netzwerk-Simplex für Min-Cost Flow Ingo Feinerer Boris Kopinitsch Johannes Schmidt Netzwerk-Simplex für Min-Cost Flow Find a triple (T, L, U ) whose associated flow x is feasible; Compute yv , the (r, v) path cost in T , for each node v; while there exists an arc e = vw ∈ L such that ce < 0 or e ∈ U with ce > 0 do Find such an arc e; if C(T, L, U, e) has no reverse arc and no forward arc of finite capacity, then stop; end if Compute θ1 = min(xj : j a reverse arc of C(T, L, U, e)); Compute θ2 = min(uj − xj : j a forward arc of C(T, L, U, e)); Let θ = min(θ1 , θ2 ); Find an arc h of C(T, L, U, e) with xh = θ and h reverse or uh − xh = θ and h forward; Augment x by θ on C(T, L, U, e); Replace T by (T ∪ {e})\{h}; Update L, U by deleting h and adding e as appropiate; Update y. end while Der Algorithmus findet sich auch auf Seite 110 des Vorlesungsskriptums im Teil Minimum-Cost Flow Problems. Korrektheit Aus dem Lemma, das besagt, dass ein Fluss x für ein Transshipmentporblem genau dann optimal ist, wenn für einen Kreis C(T, e) gilt, dass er nicht 1 negative Kosten hat und dies für alle e ∈ / T gilt, kann man für das Min Cost Flow Problem dieses Lemma wie folgt verwenden Theorem 1. Wenn für einen Baum (T, L, U ) mit Fluss x und einem Kreis C(T, L, U, e) mit nicht negativen Kosten für alle e ∈ / T gilt, dann ist x optimal. So nun kann man über die Restkosten der Kante e entscheiden ob ein Kreis negative Kosten hat, oder nicht. Falls die Restkosten negativ sind, sind die Gesamtkosten des Kreises negativ. Falls die Restkosten positiv sind, sind auch die Gesamtkosten des Kreise positiv. Per Definition sind nun die Restkosten für all Kanten ∈ L positiv definiert also einfach als ce und für alle Kanten ∈ U negativ, also −ce , da ja auf Kanten aus U nur Fluss in die entgengesetzte Richtung augumentieren werden kann. So nun betrachtet man die Zeile 3 des Algorithmus. Diese besagt, dass der Algorithmus solange läuft, bis er keine Kreise mit nicht negativen Restkosten der Kante e findet, also bis keine Kreise mit negativen Kosten mehr vorhanden sind. Dies ist genau dann der Fall wenn keine der nun folgenden Ungleichungen mehr erfüllt werden kann. Die erste Ungleichung ce < 0 für e ∈ L ist intuitiv klar. Negative Restkosten, Kreis mit negativen Kosten gefunden. Die zweite Ungleichung ce > 0 für e ∈ U ist nicht ganz so klar. Wenn man aber einen Blick in die Definition der Restkosten von Kanten ∈ U wirft, entdeckt man diese negativ definiert sind. Positive Restkosten entsprechen also Negativen und umgekehrt. Somit hat unser Algorithmus auch einen Kreis mit negativen Kosten entdeckt, falls die zweite Ungleichung ce > 0 für e ∈ U erfüllt ist. Somit ist der Algorithmus korrekt, da er solange läuft bis er die Optimallösung gefunden hat. Terminierung Problem: Degenerierte Iterationen, also Iterationen die den Baum, aber nicht den Fluss ändern, des Algorithmus. Solche Iterationen führen zu der Frage, ob der Algorithmus unter Umständen zu bereits vorher verwendeten Bäumen zurückkehren kann. Zuerst ein paar Definitionen: Definition: (T, L, U ) ist dann eine Strongly Feasible Tree Lösung, wenn e ∈ T mit xe = 0 in T von r weggerichtet ist und e ∈ T mit xe = ue zu r hingerichtet ist. (Weggerichtet heißt, dass bei der Kante h der Kopf 2 w∈ / R(T /h)). Definition: Leaving Arc Rule: Wähle die erste Rückwertskante h in C(T, L, U, e) für die gilt xh = θ oder die erste Vorwärtskante uh − xh = θ. Idee für Terminierung: • Start mit Strongly Feasible Tree Solution • Leaving Arc Rule erhält die Strongly Feasible Tree Eigenschaft. • Dadurch wird das Cycling verhindert. Für den Beweis, dass unter diesen Voraussetzungen der Algorithmus terminiert, ist wichtig, dass Proposition 4.10 aus dem in der Vorlesung ausgeteilten Text über die Network Simplex Method auch hier gilt! Satz: Die Network Simplex Methode für Minimum-Cost Flow Probleme terminiert, wenn mit einer strongly feasible Lösung gestartet wird und die Leaving Arc Rule beim wählen der zu entfernenden Kanten angewandt wird. Es muss gezeigt werden, dass der Algorithmus nicht zu einem bereits früher verwendeten Baum zurückkehrt (cycling). Angenommen, eine degenerierte Iteration führt T zu T 0 , mit den zugeordneten Pfadkosten y und y 0 . Dann ist die Kante h, die in diesem Durchgang aus T entfernt wird, entweder, 1. wenn in T xh = 0 (und damit in T 0 = 0, weil ja der Fluss nicht verändert wird) , eine Vorwärtskante am Pfad vom ersten Knoten s von C(T, L, U, e) bis zum Kopf der neu ankommenden Kante e. (Sonst hätte h ja die strong feasibility verletzen, was eine Widerspruch zur Annahme im Satz wäre!) oder, 2. wenn in T xh = uh (und damit auch in T 0 ) eine Rückwärtskante am Pfad vom ersten Knoten s von C(T, L, U, e) bis zum Kopf der neu ankommenden Kante e. (Gleiches Argument). In beiden Fällen ist w, der Kopf der neu hinzukommenden Kante e, nicht in R(T, h). Daraus folgt (siehe Proposition 4.10), dass ya0 ≤ ya für alle a ∈ V , P P während yw0 < yw . Deswegen gilt a∈V ya0 < a∈V ya . Damit verringert jede Sequenz von degenerierten Iterationen strikt die Summe der Pfadkosten und es kann daher nie dazu kommen, dass bei einer späteren Iteration zu einem bereits vorher verwendeten Baum zurückgekehrt wird! 3 Iterationen Anzahl von nicht-degenerierten Iterationen, so wie im Transshipment Problem: O(mCU ). Für m = |E|, C = max(c(u, v))∀u, v ∈ V ,U = max(u(u, v))∀u, v ∈ V. P Anzahl von degenerierten Iterationen: upper bound ist a∈V ya in der Ausgangslösung, weil wir gesehen haben, dass jede degenerierte Iteration diesen Pfad verkleinert. Beispiel Wir wollen einen kostenminimalen Fluss von 10 für folgenden Graph finden: Knoten s a b c d e f t y= 0 15 9 11 11 17 13 25 Im ersten Durchlauf des Algorithmus betrachten wir ba. Die reduzierten Kosten sind dann cba = 2 + 9 − 15 = −4. 3 Einheiten werden nun am Kreis b − a − s − b augmentiert, was die Kosten des Fluss um 12 reduziert. Somit entsteht folgender Fluss: Knoten s a b c d e f t y= 0 15 13 15 15 21 17 29 4 Jetzt wird dc betrachtet: cdc = 12 + 15 − 15 = 12. Gegen die Richtung von dc schicken wir einen Fluss von 1 über den Kreis d − b − c − d. Dies reduziert die Kosten um 12. Das Resultat ist dann: Knoten s a b c d y= 0 15 13 15 3 e f t 21 17 29 Zuletzt nimmt man ac: cdc = 11 + 15 − 15 = 11. Durch Augmentieren um 2 Flusseinheiten ergibt sich eine Einsparnis von 22 Einheiten und folgender Graph: Es findet sich nun keine Kante mehr, die den Kriterien des Algorithmus genügt. Somit haben wir den kostenminimalen Fluss gefunden. 5