Vortrag

Werbung
1
Netzwerk Simplex Algorithmus
für
Min Cost Flow Probleme
Jan Burkl
Juli 2003
2
Inhalt
• Spanning Tree Solution
• Beschreibung der Spanning Tree Structure
• Knotenpotentiale berechnen
• Initialer Spannbaum
• Simplex-Algorithmus
? Entering Arc
3
? Leaving Arc
? Spannbaum Update
? Beispiel
• Strongly Feasible Spanning Tree
4
Spanning Tree Solution
Definition 1.
Sei x eine zulässige Lösung für ein Netzwerk N, dann
heißt eine Kante
• frei, wenn 0 < xij < uij ,
• beschränkt, wenn xij = 0 oder xij = uij ,
5
Spanning Tree Solution
Definition 2.
Eine zulässige Lösung heißt Spanning Tree Solution,
wenn jede Kante (i, j) ∈ N \ T (nicht-Baum Kante)
eine beschränkte Kante ist.
6
Beispiel
(a) Beispiel-Netzwerk
(b) Alle freien Kanten
(c) Zwei mögliche Spanning Tree Solution
7
Spanning Tree Solution
• Eine Spanning Tree Solution teilt die Menge der Kanten
des Netzwerks in drei Gruppen auf:
T: Alle Kanten im Spanning Tree
L: Alle nicht-Baum-Kanten mit xij = 0
U: Alle nicht-Baum-Kanten mit xij = uij
• Tupel (T,L,U) heißt Spanning Tree Structure.
8
Min Cost Flow Optimalitätsbedingungen
Satz 1 (Min Cost Flow Optimalitätsbedingungen).
(T,L,U) ist optimale Spanning Tree Structure, wenn die
Lösung zulässig ist und die reduzierten Kosten cπij folgende Bedingungen erfüllen:
• cπij = 0,
• cπij ≥ 0,
• cπij ≤ 0,
∀(i, j) ∈ T
∀(i, j) ∈ L
∀(i, j) ∈ U
9
Beweis.
• Sei x∗ zugehörige Lösung. Es ist bekannt, dass für ein bestimmtes
π die Bedingungen erfüllt sind.
• Z.z.: x∗ ist optimale Lösung des Min-Cost-Flow Problems.
Es gilt:
cπij = cij − π(i) + π(j)
P
P
min( (i,j)∈E cij xij ) ≡ min( (i,j)∈E cπij xij )
10
P
⇒ min( (i,j)∈E cπij xij )





 X
X
P


≡ min 
cπij xij + (i,j)∈L cπij xij +
cπij xij 
|{z} 

(i,j)∈U ≤0

|(i,j)∈T{z
}
{z
}
|
=0
≡ min
P
π
c
(i,j)∈L ij xij −
≤0
π
|c
(i,j)∈U ij |xij (*)
P
11
Da für eine beliebige Lösung x
xij ≥ x∗ij
∀(i, j) ∈ L
xij ≤ x∗ij
∀(i, j) ∈ U
und
gilt, kann (*) mit der Lösung x nur größer oder gleich des Zielfunktionswertes der Lösung x∗ werden.
12
Beschreibung der Spanning Tree Structure
i
pred(i)
depth(i)
thread(i)
1
0
0
2
2
1
1
4
3
1
1
6
4
2
2
7
5
3
2
3
6
3
2
9
7 8
4 4
3 3
8 10
9 10 11
6 8 8
3 4 4
1 11 5
13
Knotenpotentiale
• cπij = cij − π(i) + π(j) = cij − [π(i) + k] + [π(j) + k]
⇒ π(1) := 0
• Alle Knotenpotentiale sukzessive berechnen mit
cπij = cij − π(i) + π(j) = 0
∀(i, j) ∈ T
14
procedure compute-potentials;
begin
π(1) := 0;
j := thread(1);
while j 6= 1 do
begin
i := pred(j);
if (i, j) ∈ N then π(j) := π(i) − cij ;
if (j, i) ∈ N then π(j) := π(i) + cij ;
j := thread(j);
end;
end;
15
Initialer Spannbaum
• Geeignete Startlösung berechnen
• Künstlicher Knoten r
• b(j) > 0 ⇒ (j, r),
xjr := b(j)
• b(j) ≤ 0 ⇒ (r, j),
xrj := −b(j)
• crk = ckr =
P
(i,j)∈N cij
+1
∀k ∈ N
16
17
Simplex Algorithmus
algorithm network simplex
begin
konstruiere initialen Spannbaum;
solange die Optimalitätsbedingungen nicht erfüllt sind tue
wähle eine einzufügende Kante,
die die Optimalitätsbedingung verletzt;
füge diese Kante ein
und bestimme die wegfallende Kante;
baue den Spannbaum neu auf und passe x und π an;
end;
end;
18
Entering Arc
• ∀(i, j) ∈ L : cπij ≥ 0
• ∀(i, j) ∈ U : cπij ≤ 0
Dantzig’s Pivot Regel
• Kante mit höchster Verletzung (max(|cπij |))
• Idee: große Verringerung des Zielfunktionswertes bei hoher Verletzung
• Jede Iteration Suche nach maximaler Verletzung
19
First Eligable Arc Rule
• Erste geeignete Kante wird gewählt
• Wraparound Fashion
• Geringe Verletzung
Kandidaten-Liste Pivot Regel
• Zwei-Phasen Prozedur
• Kandidatenliste
• Kandidatenliste durchsucht nach maximaler Verletzung
20
• Liste leer oder maximale Anzahl von Iterationen → neue Liste
• Spezialfälle: Dantzig’s PR, First Eligable Arc PR
21
Leaving Arc
• Spanning Tree Struktur wieder aufbauen
• Orientierung des entstandenen Kreises W hängt ab von eingefügter
Kante
• Fluss erhöhen um:
δ = min (δij | (i, j) ∈ W ) ,
uij − xij , wenn (i, j) ∈ W
δij =
xij ,
wenn (i, j) ∈ W
(W :=Vorwärtskanten, W :=Rückwärtskanten)
22
• Pivot-Operation heißt nichtdegenerative Iteration wenn δ > 0,
degenerative Iteration, wenn δ = 0
• (i, j) heißt blockierende Kante, wenn δ = δij
• Blockierende Kante wird leaving Arc
23
Kreisentdeckung
• Betrachte W vor Einfügen von (k, l)
procedure identify-cycle;
begin
i:=k und j:=l;
while i 6= j do
begin
if depth(i) > depth(j) then i:=pred(i);
else
if depth(j) > depth(i) then j:=pred(j);
else i:=pred(i) und j:=pred(j);
end;
end;
24
Spannbaum updaten
• (p, q) Leaving Arc, (k, l) eingefügte Kante
• Teilbaum T1 und T2 (ohne (k, l) und (p, q))
• r ∈ T1 und entweder k ∈ T1 oder l ∈ T1
• T2 hängt an p oder q
• Da cπij = 0 ∀(i, j) ∈ T →Potentiale in T1 oder T2 ändern:
? Wenn k ∈ T1: Knotenpotentiale um cπkl verringern
? Wenn k ∈ T2: Knotenpotentiale um cπkl erhöhen
25
Knotenpotentiale updaten
procedure update-potentials;
begin
if q ∈ T2 then y := q else y := p;
if k ∈ T1 then change := −cπkl else change := cπkl;
π(y) := π(y) + change;
z:=thread(y);
while depth(z) > depth(y) do
begin
π(z) := π(z) + change;
z:=thread(z);
end;
end;
26
Beispiel
P
(i,j)∈N cij
+ 1 = 16
27
cπ13 = −29
28
cπ32 = −28
29
cπ12 = −24
30
P
(i,j)∈N cij xij
= 26
31
Strongly Feasible Spanning Tree
• Simplex-Algorithmus muss nicht terminieren
Definition 3.
Ein Spannbaum T ist strongly feasible, wenn jede Baumkante ohne
Fluss nach oben zeigt und jede Baumkante deren Fluss gleich ihrer
Kapazität ist nach unten zeigt.
Definition 4.
Ein Spannbaum ist strongly feasible, wenn es möglich ist, einen
Fluss von einem beliebigem Knoten zur Wurzel zu schicken, ohne
Kapazitätsgrenzen zu verletzen.
32
• Initialer Spannbaum ist nicht strongly feasible
• Spannbaum kann im nächsten Schritt nur degenerieren, wenn es
mehr als eine blockierende Kante gibt
33
Leaving Arc Rule
Aus dem Spannbaum soll die letzte blockierende Kante, die nach
Traversierung (entlang der Orientierung der eingefügten Kante) des
entstanden Kreises entfernt werden. Dabei wird am Knoten w, der
höchste Punkt (apex) des Kreises im hängenden Baum, gestartet.
• W wird geteilt in W1 und W2
• W1 von w bis (p, q)(entfernte Kante)
• W2 = W − W1 − {(p, q)}
34
Satz 2.
Jeder Knoten im Segment W2 kann einen positiven Fluss zur
Wurzel schicken.
• (p, q) letzte blockierende Kante → W2 kann keine blockierende
Kante enthalten
• Alle Knoten in W2 können Fluss zur Wurzel schicken
35
Satz 3.
Jeder Knoten im Segment W1 kann einen positiven Fluss zur
Wurzel schicken.
• Fall 1:
Vorhergehende Pivotoperation hat Fluss erhöht (entlang W1) →
Fluss kann in andere Richtung geschickt werden
• Fall 2:
Vorhergehende Pivotoperation keine Flusserhöhung → W1 liegt
zwischen w und k, l kann Fluss zu w schicken.
Kein Fluss erhöht auf W1 → Jeder Knoten aus W1 kann Fluss zu
w schicken.
36
Beispiel
37
References
[1] Ravindra K. Ahuja, James B. Orlin, Thomas L. Magnanti,
Network Flows: Theory, Algorithms & Applications,
Prentice Hall, 1993.
Herunterladen