Lösung

Werbung
Ü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
Herunterladen