Minimum Cost Flow Grundlagen und erste Algorithmen

Werbung
Minimum Cost Flow
Grundlagen und erste Algorithmen
Philip Ralph Weber
22.12.2005
1
1
Grundlagen
1.1
Voraussetzungen
Sei G=(V,E) ein gerichteter Graph.
cij bezeichne die Kosten für der Kante (i, j) ∈ E
C := max(i,j)∈E cij
uij bezeichne die Kapazität der Kante (i, j) ∈ E
U := max(i,j)∈E uij
Für jeden Knoten i ∈ V sei b(i) dessen Supply-Wert
b(i) > 0 =⇒ i ist Supply-Knoten
b(i) = 0 =⇒ i ist Transport-Knoten
b(i) < 0 =⇒ i ist Demand-Knoten
1.2
Definition: Feasible Flow
Eine Flußfunktion x : E → N heißt feasible (legal), wenn gilt
• Kapazitätsbedingung
0 ≤ xij ≤ uij
• Massenbalancebedingung
X
xij −
{j:(i,j)∈E}
1.3
X
∀i ∈ V
xki = b(i)
{k:(k,i)∈E}
Definition: Kosten einer Flußfunktion
Sei x ein feasible flow, dann sind c(x) =
1.4
∀(i, j) ∈ E
P
(i,j)∈E cij
· xij die Kosten von x
Definition: Minimum Cost Flow Problem
Das Minimum Cost Flow Problem besteht darin, einen feasible flow mit minimalen Kosten zu finden. Man minimiert also die Funktion
X
c(x) =
cij · xij
(i,j)∈E
unter folgenden Bedingungen:
0 ≤ xij ≤ uij
X
{j:(i,j)∈E}
xij −
∀(i, j) ∈ E
X
xki = b(i)
{k:(k,i)∈E}
2
∀i ∈ V
1.5
Annahmen
1. Alle Daten sind ganzzahlig
2. Das Netzwerk (Graph) ist gerichtet
P
3. Es gilt i∈V b(i) = 0 und das MCF Problem hat eine Lösung
4. Es gilt cij ≥ 0 für alle (i, j) ∈ E
5. Außerdem sollte jeder Knoten i ∈ V von einem anderen Knoten aus erreichbar sein.
1.6
Definition: Restnetzwerk
Die später vorgestellten Algorithmen beziehen sich auf das Restnetzwerk G(x)
von G mit dem Fluß x.
Das Restnetzwerk läßt sehr leicht erkennen, über welche Kanten man noch wie
viele Flußeinheiten verschieben kann.
Jede Kante (i, j) ∈ E wird durch zwei Kanten (i, j), (j, i) ersetzt.
(i, j) hat die Kosten cij und die Restkapazität rij = uij − xij
(j, i) hat die Kosten cji = −cij und die Restkapazität rji = xij
Das Restnetzwerk besteht außerdem nur aus Kanten mit positiver Restkapazität, d.h. Kanten mit Restkapazität 0 werden aus dem Restnetzwerk gelöscht.
1.6.1
Beispiel
i
(xij , uij ), cij
j
(rij , cij )
i
2
2
(1, 2)
(3, 4), 2
1
j
(3, −2)
(0, 2), 1
(2, 1)
1
(2, −2)
(2, 2), 2
3
3
(1,2) 3 von 4 möglichen Einheiten fließen von Knoten 1 nach Knoten 2. Dies
hat zur Folge, daß sowohl die Kante (1,2) als auch die Kante (2,1) ins
Restnetzwerk aufgenommen werden
(1,3) Diese Kante ist voll saturiert, deshalb wird nur die Gegenkante ins Restnetzwerk aufgenommen
3
(2,3) Hier ist es genau umgekehrt zu (1,3). Es fließen keine Einheiten von Knoten
2 zu Knoten 3, dehalb wird nur die ursprüngliche Kante im Restnetzwerk
erscheinen
2
Anwendung
Bei Minimum Cost Flow Problemen geht es darum, Einheiten auf möglichst
optimale Art und Weise zwischen mehreren Standorten zu verteilen.
Diese Problematik gibt es in fast allen Industrien. Beispiele hierfür sind:
• Kommunikation
• Transport
2.1
Beispiel: Das Transportproblem
Ein Autohersteller hat mehrere Produktionsstandorte und produziert an diesen
unterschiedliche Modelle. Auf der anderen Seite stehen die Autohäuser, in denen
die Autos verkauft werden. Diese benötigen einen ständigen Nachschub neuer
Autos.
Aufgabe ist es, die Nachfrage der Autohäuser zu befriedigen und dabei die Gesamtkosten (Herstellungskosten, Transportkosten, ...) zu minimieren.
Ein Graph eines solchen Problems könnte beispielsweise wie folgt aussehen:
Autohaus 1
Produktion 1
a 1 m1
p 1 m1
p1
a 1 m2
a1
p 1 m2
a 1 m3
Produktion 2
Autohaus 2
p 2 m1
a 2 m1
p2
p 2 m2
a2
a 2 m2
p 2 m3
4
Knotentypen
1. Produktionsknoten (p1 , p2 ): symbolisieren die Produktionsstätten
2. Produktion-Modell-Knoten (p1 m1 , p1 m2 , ...): stehen für das Modell und
seinen Produktionsort
3. Autohaus-Modell-Knoten (a1 m1, ...): zeigen an, welche Modelle das Autohaus nachfragt
4. Autohausknoten (a1 , a2 ): symbolisieren die Autohäuser
Kantentypen
1. Produktionskanten (Produktionsknoten – Produktion-Modell-Knoten):
• Kosten: Produktionskosten eines bestimmten Modells an einem bestimmten Standort
• Kapazität: Obere und untere Schranke der Produktion eines Modells
an einem Standort
2. Transportkanten (Produktion-Modell-Knoten – Autohaus-Modell-Knoten):
• Kosten: Transportkosten für ein Auto zu einem Autohaus
• Kapazität: Obere Schranke für maximal möglichen Transportfluß.
Untere Schranke aufgrund von Verträgen mit den Transportunternehmen.
3. Nachfragekanten (Autohaus-Modell-Knoten – Autohaus-Knoten):
• Kosten: Die Kosten dieser Kanten sind gleich Null
• Kapazität: Untere Schranke für die Nachfrage eines Autohauses nach
einem bestimmten Modell
5
3
Optimalitätsbedingungen
3.1
Negative Cycle Optimality
3.1.1
Satz: Negative Cycle Optimality
Ein feasible flow x ist genau dann eine optimale Lösung des MCF Problems,
wenn das Restnetzwerk G(x) keinen Kreis mit negativen Kosten enthält.
Beweis:
“⇒“ Angenommen x ist ein feasible flow und G(x) enthält einen negativen
Kreis.
Dann ist x nicht optimal, da mit Flußerhöhungen entlang des negativen Kreises die Kosten gesenkt werden könnten, ohne daß x non-feasible
würde.Daraus folgt:
x ein optimaler Fluß ⇒ G(x) enthält keinen negativen Kreis
“⇐“ Angenommen x ist ein feasible flow und enthält keinen negativen Kreis.
Sei nun x∗ ein optimaler Fluß mit x 6= x∗ . Da beide Flüsse feasible sind,
haben sie den gleichen Flußwert, folglich muß x∗ − x eine Flußzirkulation
sein. x∗ − x kann also in Kreise zerlegt werden. Wichtig ist, daß diese
Kreise auch in G(x) liegen und daß die Summe der Kosten der Flüsse auf
diesen Kreisen gleich c(x∗ ) − c(x) ist. (vorige Kapitel)
Da alle Kreise in G(x) nicht-negativ sind, gilt c(x∗ )−c(x) ≥ 0 oder c(x∗ ) ≥
c(x).
Aus der Optimalität von x∗ folgt andererseits c(x∗ ) ≤ c(x).
Insgesamt folgt c(x∗ ) = c(x) und damit ist x optimal.
3.2
3.2.1
Reduced Cost Optimality
Definition: Potential, Reduzierte Kosten
Die Potentialfunktion π : V → R assoziiert mit jedem Knoten i ∈ V eine Zahl
π(i), das Potential von i.
Die Reduzierten Kosten einer Kante (i, j) ∈ E sind dann definiert durch
cπij = cij − π(i) + π(j)
3.2.2
Eigenschaften der Reduzierten Kosten
• Sei P ein Pfad von v nach w, dann gilt:
X
X
cπij =
−
cij
(i,j)∈P
(i,j)∈P
| {z }
Kosten des Pfades
π(v)
+
π(w)
|{z}
| {z }
Potential des Anfangsknotens Potential des Endknotens
Die Reduzierten Kosten von P sind gleich den Kosten von P minus dem
Potential des Anfangsknotens plus dem Potential des Endknotens.
• Für jeden Kreis W gilt:
X
cπij =
(i,j)∈W
X
(i,j)∈W
6
cij
Für einen Kreis sind die Reduzierten Kosten gleich den Originalkosten.
3.2.3
Satz: Reduced Cost Optimality
Sei x ein feasible flow.
x ist optimal genau dann, wenn es ein Potential π gibt, so daß für alle Kanten
(i, j) in G(x) gilt:
cπij ≥ 0
Beweis:
“⇐:“ Annahme: ∃ Potential π mit cπij ≥ 0 ∀(i, j) ∈ G(x). Daraus folgt:
– alle Kreise in G(x) haben bzgl. der Reduzierten Kosten keine negativen Kosten
– auch bzgl. der Originalkosten enthält G(x) keine negativen Zyklen
Mit der Negative Cycle Optimality folgt die Optimalität von x.
“⇒:“ Sei x eine Lösung des MCF Problems (feasible und optimal).
z.z.: ∃ Potential π mit cπij ≥ 0 ∀(i, j) ∈ G(x)
Sei d : V → R die Distanzlabelfunktion bzgl. der Kantenkosten c : E → R
mit beliebigem Startknoten s ∈ G(x).
Aus der Negative Cycle Optimality folgt, daß es keine negativen Kreise in
G(x) gibt und daß die Funktion d wohldefiniert ist.
Außerdem gilt für d:
d(j) ≤ d(i) + cij
∀(i, j) ∈ G(x)
⇔ cij − (−d(i)) + (−d(j)) ≥ 0
⇔ cπij ≥ 0
für π = −d
Der Beweis zeigt also auch direkt eine Methode zur Bestimmung eines
Potentials π für einen optimalen Fluß auf.
3.3
Complementary Slackness Optimality
Die Complementary Slackness Optimality bezieht sich anders als die beiden
vorangegangenen Optimalitätsbedingungen auf das Originalnetzwerk und nicht
auf das Restnetzwerk.
3.3.1
Satz: Complementary Slackness Optimality
Sei x ein feasible flow.
x ist optimal genau dann, wenn es ein Knotenpotential π gibt, so daß für alle
(i, j) ∈ E gilt:
(1) cπij > 0
⇒
(2) 0 < xij < uij
(3) cπij < 0
⇒
xij = 0
⇒
cπij = 0
xij = uij
Beweis:
7
“⇒:“ Sei x ein optimaler Fluß
Aus der Reduced Cost Optimality folgt: ∃ Potential π : V → R mit cπij ≥ 0
für alle Kanten (i, j) in G(x).
Hieraus folgern wir nun die drei obigen Bedingungen:
/ G(x), da cπji = −cπij < 0.
(1) Falls cπij > 0 ⇒ (j, i) ∈
Also folgt xij = 0.
(2) Falls 0 < xij < uij , dann sind (i, j) und (j, i) in G(x).
Mit der Reduced Cost Optimality folgt cπij ≥ 0 und cπji ≥ 0
Zusammen mit cπij = −cπji folgt cπij = cπji = 0
(3) Falls cπij < 0 so folgt aus der Reduced Cost Optimality, daß (i, j) nicht
in G(x) ist.
Daraus folgt xij = uij
“⇐:“ Sei π so gegeben, daß (1), (2) und (3) für alle (i, j) ∈ E erfüllt sind.
Z.z.: cπij ≥ 0 ∀(i, j) ∈ G(x)
(a) Sei cπij > 0 so erfüllt die Kante (i, j) die Reduced Cost Optimality
falls sie überhaupt in G(x) ist.
Da xij = 0, ist die Kante (j, i) nicht in G(x), also ist für sie nichts
zu zeigen.
(b) 0 < xij < uij und cπij = cπji = 0
⇒ (i, j) ∈ G(x) und (j, i) ∈ G(x) erfüllen die Reduced Cost Optimality.
(c) cπij < 0 und xij = uij
⇒ (i, j) ∈
/ G(x) aber (j, i) ∈ G(x)
cπji = −cπij > 0 ⇒ (j, i) erfüllt die Reduced Cost Optimality.
8
4
Der Cycle Canceling Algorithmus
Die Negative Cycle Optimality legt einen von der Idee her simplen Algorithmus
zur Lösung des Minimum Cost Flow Problems nahe, den Cycle Canceling Algorithmus.
Dieser Algorithmus berechnet zuerst einen feasible flow x. Dazu wird folgendes
Maximum Flow Problem gelöst:
b(i1 )
b(i2 )
i1
Transport-Knoten
j1
j2
i2
−b(j1 )
−b(j2 )
s
t
b(ip )
−b(jq )
ip
jq
Supply-Knoten
Demand-Knoten
Bevor man den Maximum Flow berechnet, muss das Netzwerk wie folgt
abgeändert werden:
1. füge 2 Knoten s und t hinzu
2. füge Kanten (s, i) mit usi = b(i) für alle i ∈ V mit b(i) > 0 hinzu
3. füge Kanten (j, t) mit ujt = −b(j) für alle j ∈ V mit b(j) < 0 hinzu
4. berechne einen Max Flow von s nach t
Falls der Fluss x alle ausgehenden Kanten aus s saturiert, so ist ein feasible flow
x gefunden worden.
Anschließend werden negative Kreise im Restnetzwerk G(x) ausfindig gemacht.
Diese werden durch Flußerhöhungen eliminiert.
Der Algorithmus terminiert, wenn im Restnetzwerk keine negativen Kreise mehr
vorhanden sind. Nach der Negative Cycle Optimality ist also ein Minimum Cost
Flow gefunden worden.
9
4.1
Implementierung
Cycle Canceling Algorithmus
begin
erzeuge einen feasible flow x im Netzwerk;
while G(x) enthält einen negativen Kreis do
begin
finde einen negativen Kreis W in G(x);
δ = min {rij : (i, j) ∈ W };
erhöhe den Fluß entlang W um δ Einheiten;
end;
end;
4.2
Beispiel
i
(xij , uij ), cij
2
(3, 4), 2
b(1) = 4 1
j
b(2) = 0
(0, 2), 1
(1, 2)
4
b(4) = −4
(2, 1)
1
(1, 2)
(1, −1)
b(3) = 0
3
2
(1, 2)
(2, 3)
(2, 2)
(3, −2) (1, −3)
(2, −1)
(1, 2)
(3, 3)
(2, −2)
4
1
(2, 1)
(1, −2)
4
(4, 1)
(1, −2)
2
1
(3, −3)
(3, −2)
(1, 5), 1
3
j
2
(3, 3), 3
(1, 2), 2
(rij , cij )
i
(2, −1)
(1, 1)
(2, −2)
(3, −1)
3
(4, −1)
3
10
4
Das erste Bild zeigt das Netzwerk G mit einem feasible flow x. Im ersten
Schritt wird nun das Restnetzwerk G(x) konstruiert.
In diesem gibt es einen negativen Kreis W1 = {(2, 3), (3, 4), (4, 2)} mit Kosten
P
(i,j)∈W1 cij = −1 und δ = 2. Der Algorithmus erhöht den Fluß entlang des
negativen Kreises W1 um δ Einheiten. Somit verringern sich die Gesamtkosten
um 2 Einheiten.
Im Restnetzwerk G(x) wird einPweiterer negativer Kreis W2 = {(1, 3), (3, 4), (4, 2), (2, 1)}
gefunden. Dieser hat Kosten (i,j)∈W2 cij = −2 und δ = 1. Wieder erhöht der
Algorithmus den Fluß entlang dieses Kreises um δ Einheiten, wodurch die Gesamtkosten um 2 Einheiten gesenkt werden können.
Nach diesem Schritt enthält das Restnetzwerk G(x) keinen negativen Kreis
mehr. Mit der Negative Cycle Optimality folgt die Optimalität des Flusses x.
4.3
Satz: Integrality Property
Wenn alle Kantenkapazitäten und Supply-Werte der Knoten ganzzahlig sind, so
ist der Minimum Cost Flow auch ganzzahlig.
Beweis: Induktion über die Zahl der Iterationen:
• Induktionsanfang: Der Algorithmus berechnet zuerst einen feasible flow,
indem er das Maximum Flow Problem löst.
Wichtig ist, daß es einen ganzzahligen feasible flow gibt und daß der Maximum Flow Algorithmus eine solche ganzzahlige Lösung findet. Davon
kann ausgegangen werden, da alle Kantenkapazitäten und Restkapazitäten
ganzzahlig sind.
Somit ist der Fluß zu Beginn des Algorithmus’ ganzzahlig.
• Induktionsvoraussetzung: Der Fluß ist in der n-ten Iteration ganzzahlig,
folglich sind es auch die Restkapazitäten im Restnetzwerk.
• Induktionsschritt: In der n-ten Iteration erhöht nun der Cycle Canceling
Algorithmus den Fluß entlang eines negativen Kreises um die minimale
Restkapazität in diesem Kreis. Diese ist nach Induktionsvoraussetzung
ganzzahlig. Somit werden die modifizierten Restkapazitäten in der (n+1)ten Iteration wiederum ganzzahlig sein.
4.4
Laufzeitanalyse
Beobachtungen:
1. Der Algorithmus erhöht den Fluß entlang eines negativen Kreises in jeder
Iteration um mindestens 1 Einheit. Die Kosten des negativen Kreises sind
≤ −1.
⇒ Jede Iteration vermindert die Gesamtkosten um mindestens 1 Einheit.
2. Höhe der Gesamtkosten:
(a) obere Schranke: m·C·U mit C := max(i,j)∈E |cij | und U := max(i,j)∈E uij
(b) untere Schranke: −m · C · U
Die Gesamtkosten haben folglich die Größe O(m · C · U )
11
Aus den beiden Beobachtungen folgt also, daß der Cycle Canceling Algorithmus O(m · C · U ) Iterationen durchläuft. Die Laufzeit einer Iteration wird
dabei von der Identifizierung eines negativen Kreises dominiert (Bellman/Ford:
O(n · m)).
Folglich ergibt sich für den generischen Cycle Canceling Algorithmus eine Laufzeit von O(n · m2 · C · U ).
4.4.1
Schlußbemerkung
Die generische Variante des Cycle Canceling Algorithmus’ sieht keine Reihenfolge vor, in der die negativen Kreise ausgewählt werden.
Durch die Vorgabe einer bestimmten Reihenfolge kann der Algorithmus abgeändert werden. Dies führt zu verschiedenen Versionen des Cycle Canceling
Algorithmus’, die jeweils andere Laufzeiten haben. Ein Beispiel hierfür ist der
Simplex Algorithmus.
5
Der Successive Shortest Path Algorithmus
Der Cycle Canceling Algorithmus startet mit einem feasible flow x und versucht
diesen zu optimieren.
Im Gegensatz dazu startet der Successive Shortest Path Algorithmus mit einem
sogenannten pseudo flow, der zwar optimal ist und die Kapazitätsbedingungen
erfüllt, allerdings die Massenbalancebedingungen der Knoten verletzt (nicht feasible).
Der Algorithmus versucht nun diesen pseudo flow so abzuändern, daß die Optimalität erhalten bleibt und die Massenbalancebedingungen nicht mehr verletzt
werden.
5.1
Definition: Pseudo Flow, Excess
Ein pseudo flow ist eine Funktion x : E → N , die nur die Kapazitätsbedingung
erfüllt. Sie muß aber nicht die Massenbalancebedingung erfüllen. (siehe Definition: Feasible Flow).
Für jeden pseudo flow x ist der Excess wie folgt definiert:
e(i) =
b(i)
+
|{z}
Supply von i
X
xji
X
−
{z
}
|
Eingänge in Knoten i
{z
}
|
Ausgänge aus Knoten i
• e(i) > 0
i ist ein Excess-Knoten (hat zu viel)
• e(i) < 0
i ist ein Demand-Knoten (hat zu wenig)
• e(i) = 0
i ist balanciert
12
xij
{j:(i,j)∈E}
{j:(j,i)∈E}
5.1.1
Beobachtungen
Sei E = {i ∈ V |e(i) > 0} und D = {i ∈ V |e(i) < 0}
P
P
•
i∈V b(i) = 0
i∈V e(i) =
P
P
•
i∈D e(i)
i∈E e(i) = −
Hieraus folgt:
Hat das Netzwerk einen Excess-Knoten, so muß es auch einen Demand-Knoten
haben.
5.2
Lemma
Sei x ein (pseudo-) flow, der die Reduced Cost Optimality bzgl. eines Potentials
π erfüllt (cπij ≥ 0 für alle (i, j) ∈ G(x)).
Sei d : V → N eine Shortest-Path-Distanzfunktion in G(x) von einem Knoten s
aus mit den reduzierten Kosten cπij als Länge einer Kante (i, j).
Dann gilt:
1. Der pseudo flow x erfüllt die Reduced Cost Optimality auch bzgl. des
Potentials π 0 = π − d.
0
2. Die reduzierten Kosten cπij sind gleich Null für alle Kanten (i, j) auf einem
kürzesten Pfad.
Beweis:
1. Da x die Reduced Cost Optimality bzgl. des Potentials π erfüllt gilt:
cπij ≥ 0
für alle (i, j) ∈ G(x)
Da d die Shortest-Path-Distanzen mit cπij als Kantenlängen darstellt, gilt
folgende Shortest-Path-Optimalitätsbedingung:
d(j) ≤ d(i) + cπij
für alle (i, j) ∈ G(x)
Durch das Einsetzen der Definition cπij = cij − π(i) + πj in die obige
Ungleichung erhalten wir:
d(j) ≤ d(i) + cij − π(i) + π(j)
⇔
0 ≤ cij − (π(i) − d(i)) + (π(j) − d(j))
{z
} |
{z
}
|
π 0 (i)
⇔
für alle (i, j) ∈ G(x)
0
cπij
≥ 0
für alle (i, j) ∈ G(x)
π 0 (j)
für alle (i, j) ∈ G(x)
2. Sei nun ein Shortest Path von s zu einem Knoten l gegeben. Für jede
Kante (i, j) auf diesem Pfad gilt d(j) = d(i) + cπij . Ersetzt man wie oben
0
cπij = cij − π(i) + π(j), so ergibt sich analog cπij = 0 für alle Kanten (i, j)
auf diesem Pfad.
13
5.3
Lemma
Angenommen ein (pseudo-) flow x erfüllt die Reduced Cost Optimality bzgl.
eines Potentials π. Wenn wir nun x abändern, indem wir Fluß entlang eines
Shortest Path von einem Knoten s zu einem Knoten k versenden, so erhalten
wir einen neuen Fluß x0 .
Dieser Fluß x0 erfüllt nun ebenfalls die Reduced Cost Optimality bzgl. des Potentials π 0 = π − d.
Beweis:
0
Aus dem vorigen Lemma wissen wir, daß cπij = 0 für jede Kante (i, j) auf dem
Shortest Path P von s nach k ist.
Flußerhöhungen auf einer dieser Kanten können u.U. bewirken, daß die Gegen0
0
kante (j, i) in G(x) eingefügt wird. Da aber cπji = −cπij = 0 für jede Kante auf
P ist, bleibt die Reduced Cost Optimality bzgl. π 0 erhalten.
5.4
Implementierung
Successive Shortest Path Algorithmus
begin
x = 0 und π = 0;
e(i) = b(i) für alle i ∈ V ;
initialisiere E = {i ∈ V |e(i) > 0} und D = {i ∈ V |e(i) < 0};
while E 6= ∅ do
begin
wähle k ∈ E und l ∈ D;
berechne Shortest-Path-Distanzen d bzgl. der red. Kosten cπij ;
sei P ein Shortest Path von k nach l;
π = π − d;
aktualisiere die reduzierten Kosten cπij
δ = min {e(k), −e(l), min {rij |(i, j) ∈ P }};
erhöhe den Fluß entlang von P um δ Einheiten;
aktualisiere x, G(x), e, E, D;
end;
end;
14
5.5
Beispiel
Wir benutzen das selbe Beispiel wie beim Cycle Canceling Algorithmus.
e(i)
π(i) i
(rij , cπij )
2
e(j)
π(j)
0
0
(4, 2)
4
0 1
j
(3, 3)
(2, 1)
(2, 2)
• G(x) am Anfang mit x = 0
und π = 0
4 -4
0
• E = {1} und D = {4}
(5, 1)
• k = 1 und l = 4
• d = (0, 2, 2, 3)
0 3
0
2
0
-2
(4, 0)
4
0 1
• P = (1, 3, 4)
• aktualisiere π = π − d
(3, 2)
(2, 1)
(2, 0)
• aktualisiere cπij = cπij −
(d(j) − d(i))
4 -4
-3
• δ=2
(5, 0)
• erhöhe Fluß entlang P um
δ Einheiten
0 3
-2
2
0
-2
(4, 0)
2
0 1
(3, 2)
(2, 1)
(2, 0)
(3, 0)
• aktualisiere G(x) und e(i)
4 -2
-3
• E = {1} und D = {4}
• k = 1 und l = 4
(2, 0)
• d = (0, 0, 1, 1)
0 3
-2
15
2
0
-2
(4, 0)
2
0 1
• P = (1, 2, 3, 4)
• aktualisiere π = π − d
(3, 1)
(2, 0)
(3, 0)
(2, 1)
• aktualisiere cπij = cπij −
(d(j) − d(i))
4 -2
-4
• δ=2
(2, 0)
• erhöhe Fluß entlang P um
δ Einheiten
0 3
-3
0
2 -2
(2, 0)
0
0 1
(3, 1)
(2, 0)
(2, 0)
(2, 1)
4 0
-4
(1, 0)
(4, 0)
0 3
-3
5.6
• E = ∅ und D = ∅ ⇒ Algorithmus terminiert
Laufzeitanalyse
Der Rumpf der Hauptschleife wird dominiert von der Berechnung der ShortestPath-Distanzen bzgl. cπij im Restnetzwerk G(x). Der Dijkstra-Algorithmus liefert
hierfür eine Laufzeit von O(n · log n + m).
In jeder Iteration wird mindestens 1 Einheit Fluß von einem Knoten in E zu
einem Knoten in D verschoben. Folglich wird der Gesamtüberschuß mindestens
um 1 Einheit vermindert.
Sei U = max {|b(i)| : i ∈ V }, dann ist der Gesamtüberschuß maximal n · U .
Somit ist die Laufzeit des Successive Shortest Path Algorithmus:
O(n · U · (n · log n + m))
16
Herunterladen