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 < x ij < u ij, beschränkt, wenn x ij = 0 oder x ij = u ij,
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 x ij = 0 U: Alle nicht-baum-kanten mit x ij = u ij 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 = c ij π(i) + π(j) min( (i,j) E c ijx ij ) min( (i,j) E cπ ij x ij)
10 min( (i,j) E cπ ij x ij) min c π ijx ij (i,j) T }{{} =0 + (i,j) L cπ ij x ij + c π ij x }{{} ij (i,j) U 0 }{{} 0 min ( (i,j) L cπ ij x ij (i,j) U cπ ij x ij ) (*)
11 Da für eine beliebige Lösung x und x ij x ij x ij x ij (i, j) L (i, j) U 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 1 2 3 4 5 6 7 8 9 10 11 pred(i) 0 1 1 2 3 3 4 4 6 8 8 depth(i) 0 1 1 2 2 2 3 3 3 4 4 thread(i) 2 4 6 7 3 9 8 10 1 11 5
13 Knotenpotentiale c π ij = c ij π(i) + π(j) = c ij [π(i) + k] + [π(j) + k] π(1) := 0 Alle Knotenpotentiale sukzessive berechnen mit c π ij = c ij π(i) + π(j) = 0 (i, j) T
procedure compute-potentials; begin π(1) := 0; j := thread(1); while j 1 do begin i := pred(j); if (i, j) N then π(j) := π(i) c ij ; if (j, i) N then π(j) := π(i) + c ij ; j := thread(j); end; end; 14
15 Initialer Spannbaum Geeignete Startlösung berechnen Künstlicher Knoten r b(j) > 0 (j, r), x jr := b(j) b(j) 0 (r, j), x rj := b(j) c rk = c kr = (i,j) N c ij + 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 x δ ij = ij, wenn (i, j) W x ij, 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 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 T 1 und T 2 (ohne (k, l) und (p, q)) r T 1 und entweder k T 1 oder l T 1 T 2 hängt an p oder q Da c π ij = 0 (i, j) T Potentiale in T 1 oder T 2 ändern: Wenn k T 1 : Knotenpotentiale um c π kl verringern Wenn k T 2 : Knotenpotentiale um c π kl erhöhen
25 Knotenpotentiale updaten procedure update-potentials; begin if q T 2 then y := q else y := p; if k T 1 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 (i,j) N c ij + 1 = 16
c π 13 = 29 27
c π 32 = 28 28
c π 12 = 24 29
(i,j) N c ijx ij = 26 30
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 W 1 und W 2 W 1 von w bis (p, q)(entfernte Kante) W 2 = W W 1 {(p, q)}
34 Satz 2. Jeder Knoten im Segment W 2 Wurzel schicken. kann einen positiven Fluss zur (p, q) letzte blockierende Kante W 2 kann keine blockierende Kante enthalten Alle Knoten in W 2 können Fluss zur Wurzel schicken
35 Satz 3. Jeder Knoten im Segment W 1 Wurzel schicken. kann einen positiven Fluss zur Fall 1: Vorhergehende Pivotoperation hat Fluss erhöht (entlang W 1 ) Fluss kann in andere Richtung geschickt werden Fall 2: Vorhergehende Pivotoperation keine Flusserhöhung W 1 liegt zwischen w und k, l kann Fluss zu w schicken. Kein Fluss erhöht auf W 1 Jeder Knoten aus W 1 kann Fluss zu w schicken.
Beispiel 36
37 References [1] Ravindra K. Ahuja, James B. Orlin, Thomas L. Magnanti, Network Flows: Theory, Algorithms & Applications, Prentice Hall, 1993.