Flüsse mit minimalen Kosten

Werbung
Flüsse mit minimalen Kosten - Ein paar
Grundlagen ∗
Andreas. W. Günther
Juni 2003
∗
basieren auf dem Netzwerkbuch ...
1
Inhaltsverzeichnis
1 Einführung
1.1 Was ist das Problem mit dem Fluß minimaler Kosten ?
1.2 Anwendung(en) . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Planung von Versorgungsleitungen . . . . . . .
1.2.2 Transport-Problem . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
3
3
2 Theorie
2.1 Vorraussetzungen, Annahmen und Schreibweisen .
2.1.1 Definitionen . . . . . . . . . . . . . . . . .
2.1.2 Annahmen . . . . . . . . . . . . . . . . . .
2.2 Optimalitätsbedingungen . . . . . . . . . . . . . .
2.2.1 Negative-Cycle-Optimalitätsbedingung . .
2.2.2 Reduzierte-Kosten-Optimalitätsbedingung
2.2.3 Komplementärer Schlupf . . . . . . . . . .
2.3 Dualität . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
7
10
10
11
12
14
3 Algorithmen
3.1 Ansätze für Algorithmen . . . . . . . . . . . . .
3.1.1 Der Cycle-Cancel-Algorithmus . . . . . .
3.1.2 Wiederholte Kürzeste Wege Algorithmus
3.2 Praktischere Algorithmen . . . . . . . . . . . .
3.2.1 Capacity Scaling -Algorithmus . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
18
21
21
.
.
.
.
.
A Anmerkungen
A.1 zu den Annahmen . . . . . . . . . . . . . . . . . . . . . . . . .
A.1.1 Elimination der unteren Kapazitätsschranken . . . . .
A.1.2 Überprüfung, ob ein Netzwerk einen zulässigen Fluss hat
24
24
24
25
Liste der Algorithmen
3.1.1 Generischer Cycle-Canceling Algorithmus . . . . . . . . . . . . 17
3.1.2 Wiederholte-Küzeste-Wege-Alogrithmusses . . . . . . . . . . . 20
3.2.1 Capacity-Scaling-Algorithmus . . . . . . . . . . . . . . . . . . 22
2
1
Einführung
1.1
Was ist das Problem mit dem Fluß minimaler Kosten ?
Die Problemstellung beim MinCostFlow-Problem ist, dass man einen Fluß
über einen Graphen schicken will, aber jede Einheit Fluss auf einem Weg
Kosten verursacht. Also ist man gezwungen auf der einen Seite einen Fluss
fliessen zu lassen, der die Nachfrage von Knoten mit dem Angebot anderer
Knoten befriedigt. Auf der anderen Seite sollen aber die Kosten minimal
sein. Ausserdem wird sehr häufig noch eine Kapazitierung der Kanten bei der
Modellierung benötigt, sodass dieses beim MinCostFlow-Problem durchaus
mitzuberücksichtigen ist. Man sieht schnell zwei Teile in diesem Problem:
1. Das Finden kürzester (billigster) Wege von einem Knoten s zu allen
anderen.
2. Das Finden von maximalen Flüsse d.h. Flüsse die die Kapazitätsschranken maximal gut ausnutzen.
Diese beiden Teile lassen sich durch geeignete Wahl der Daten als MinCostFlowProblem modellieren, aber auch auf anderem Wege sehr effizient lösen. In der
Kombination jedoch wird daraus ein sehr komplexes Problem, das nur bei
genauer Betrachtung mit (pseudo-)polynomielle Algorithmen zu lösen ist.
1.2
1.2.1
Anwendung(en)
Planung von Versorgungsleitungen
Die Formulierung ”Fluss” assoziiert direkt ein mögliches Anwendungsgebiet:
Modellierung von Versorgungsleitungen wie z.B. Gas- und Wasserversorgung.
Hier gibt es ”Produktions”-Stätte (Wasserquelle, Aufbereitungsanlagen, u.ä.)
und Verbraucher (Fabriken, Haushalte, u.ä.) und auch irgendwelche Verteiler, die nichts verbrauchen. Die Kantenkosten wären hier dann z.B. die Kosten für den Bau von neuen Leitungen verteilt auf den geschätzten Fluss
bis die Leitung erneuert werden muss und der Knotenverbrauch bzw. das
Knotenangebot jeweils die geschätzte Menge in der betrachteten Zeit. Das
MinCostFlow-Problem löst dann die Frage, welche Leitungen man am besten
bauen soll, um Angebot und Nachfrage zu befriedigen.
1.2.2
Transport-Problem
Die Formulierung von Angebot und Nachfrage von Knoten impliziert ein
sehr großes Anwendungsgebiet: die Wirtschaft. Tatsächlich lassen sich einige
3
wirtschaftliche Probleme als MinCostFlow-Problem modellieren. Z.B. haben
alle Fabriken das Problem, das sie Produkte herstellen und diese natürlich
auch verkaufen wollen wozu sie irgendwie zu dem Kunden kommen müssen.
Das (einfache) Modell ist jetzt, das es einen oder mehrere Produzenten gibt
und einen oder mehrere Abnehmer (Geschäfte, Endkunden, o.ä.). Die Ware
muss also vom Produzenten zum Abnehmer gelangen und dieser Transport
sollte möglichst wenig kosten. Da es aber normalerweise viele Wege zwischen den Lieferanten und den Abnehmern gibt, und die Wege jeweils andere
Kosten haben, sieht man hier, dass man irgendwie einen kostengünstigen
Warenfluss von den Lieferanten zu den Abnehmern finden muss, der dazu
noch jedem Abnehmer alle geforderten Warenmengen bereitstellt und auch
die Produktionskapazität der Lieferanten auslastet.
Abbildung 1: Transport-Problem
Erweitert wird dieses Problem, wenn z.B. Zwischenhändler ins Spiel kommen,
die mehr Waren kaufen, wie sie brauchen und den Überschuss dann weiter
verkaufen oder wenn es darum geht mehr als nur eine Ware zu transportieren.
4
2
2.1
Theorie
Vorraussetzungen, Annahmen und Schreibweisen
Zuerst einmal die Sprache für die nachfolgenden, meist mathematischen Optimalitätsbedingungen.
2.1.1 Definitionen
Definition 1 (Netzwerk)
Ein (ungerichter) Graph G = (V, E) mit Knotenmenge V , Kantenmenge E,
den Kosten cij , den untere bzw. obere Kapazitätsschranke lij bzw. uij für
jede Kante (i, j) ∈ E und für jeden Knoten i ∈ V bi die Nachfrage ( bi < 0 )
bzw. das Angebote ( bi < 0 ) heißt (ungerichtetes) Netzwerk.
Abbildung 2: Definition des Netzwerks im Bild
Damit kann das MinCostFlow-Problem beschrieben werden durch folgendes
Minimierungsproblem:
5
LP 1
M inimiere z(x) =
X
cij xij
(i,j)∈E
s.t.
X
xij −
{j:(i,j)∈E}
X
xij = bi
∀i ∈ V
(1a)
∀(i, j) ∈ E
(1b)
{j:(j,i)∈E}
lij ≤ xij ≤ uij
bzw. wenn A die Knoten-Kanten-Inzidenzmatrix vom Netzwerk G ist:
LP 2
min z(x) = cT x
s.t.
Ax = b
l≤x≤u
(2a)
(2b)
Dabei ist Teil a) der LPs die Flusserhaltungs-Gleichung und Teil b) die Kapazitätsbedingung. Als Ergebniss des MinCostFlow-Problems sind dabei nur
Flüsse interessant, die beide Teile erfüllen. Genauer:
Definition 2
Ein Fluss x heißt zulässig genau dann, wenn gilt
X
X
xij −
xij = bi
{j:(i,j)∈E}
∀i ∈ V
{j:(j,i)∈E}
lij ≤ xij ≤ uij ∀(i, j) ∈ E
Falls jetzt ein solcher Fluss noch minimal ist, ist er eine Lösung des Problems:
Definition 3
Ein zulässiger Fluss x heißt optimal genau dann, wenn für alle zulässigen
Flüsse x0 gilt cx ≤ cx0
Weiterhin ist die Änderung von Flüssen interessant:
Definition 4
Eine zulässige Flusserhöhung ist eine Flusserhöhung (bzw. -änderung), die
einen Fluss in einen zulässigen Fluss überführt.
6
2.1.2
Annahmen
Da das allgemeine MinCostFlow-Problem sehr kompliziert ist, sollen folgende
Annahmen gelten. Diese Annahmen sind aber nicht (sehr) einschränkend,
da sie alle sowieso gelten bzw. sich ein allg. MinCostFlow-Problem in ein
MinCostFlow-Problem transformieren lässt, in dem die Annahmen gelten.
Annahme 1
Das Netzwerk ist schlicht (d.h. keine Kanten der Form (i, i) und keine parallelen Kanten) und ∀i, j ∈ V : (i, j) ∈ E ⇒ (j, i) 6∈ E.
Diese Annahme lässt sich durch Einführung von künstlichen Knoten und
Kanten im Netzwerk erzwingen und eliminiert die Nicht-Schlichtheit des
Restnetzwerk ( denn falls für zwei Knoten i, j sowohl die Kante (i, j) wie
auch die Kante (j, i) in G enthalten sind und ein Fluss x mit 0 < xij < uij
bzw. 0 < xji < uji fliesst, so hat G(x) parallelen Kanten (zweimal (i, j) und
zweimal (j, i) )).
Annahme 2
Das Netzwerk ist schwach zusammenhängend, d.h. zwischen zwei beliebigen
Knoten existiert ein ungerichteter Pfad.
Falls es mehr als eine Zusammenhangskomponente gibt, so zerfällt das MinCostFlowProblem in kleinere MinCostFlow-Probleme.
Annahme 3
∀(i, j) ∈ E : lij = 0.
Die unteren Kapazitätsschranken können sehr leicht eleminiert werden, indem man im Gleichungssystem (1) x = x0 + l einsetzt und das System nach
x0 auflöst (siehe Abschnitt A.1.1).
Annahme 4
Alle Größen sind ganzzahlig.
Da die Computerarithmetik sowieso nicht reell ist (Fliesskomma-Problematik)
kann man durch Skalierung der Werte mit einer genügend grossen Zahl diese
ganzzahlig machen kann.
Annahme
5
P
i∈V b(i) = 0.
P
Der Fall, dassP i∈V b(i) 6= 0 lässt sich durch künstliche Kanten und Knoten
auf den Fall i∈V b(i) = 0 reduzieren.
7
Annahme 6
Es existiert ein zulässiger Fluss.
Der Fall, dass es keinen zulässigen Fluss gibt, ist einfach zu erkennen kann
(siehe Abschnitt A.1.2) und es macht keinen Sinn, ein Netzwerk ohne zulässigen Fluss zu betrachten (denn ohne einen solchen gibt es keinen optimalen
Fluss !).
Annahme 7
alle Kosten sind nicht-negativ.
Falls kein unkapazitierter Kreis mit negativen Kosten im Netzwerk existiert,
kann man die Kosten so anpassen dass alle Kosten nicht-negativ werden; falls
es aber einen solchen Kreis gibt, kann es keine Lösung des Problems geben
( das Minimum wäre dann -∞ , was nicht normalerweise nicht erwünscht ist
bzw. der optimale Fluss enthält Komponenten der Größe ∞ ).
Annahme 8
für jedes Paar (i, j) ∈ V × V existiert ein gerichteter Pfad von i nach j in G
mit beliebig grosser Kapazität.
Die Vorraussetzung lässt sich durch künstliche Kanten mit hohen/unendlichen
Kosten erzwingen. Ein optimaler Fluss wird diese künstlichen Kanten nicht
benutzen.
Nach diesen Vereinfachungen hat das MinCostFlow-Minimierungsproblem
die folgende Struktur:
LP 3
min. z(x) = cT x
s.t.
Ax = b
0≤x≤u
(3a)
(3b)
Für alle nachfolgenden Betrachtung ist ein besonderes Netzwerk interessant,
das durch ein Netzwerk G und einen zugehörenden Fluss x erzeugt wird:
Definition 5
Für ein Netzwerk G = (V, E) mit Kosten cij und Kapazitäten uij ist das
Restnetzwerk G(x) definiert durch:
8
Für jede Kante (i, j) ∈ E mit uij − xij > 0 existiert eine Kante (i, j) in
G(x) mit Kosten cij und Rest-Kapazität rij := uij − xij und
Für jede Kante (i, j) ∈ E mit xij existiert eine Kante (j, i) in G(x) mit
Kosten cji := −cij und Rest-Kapazität rji := xij .
Abbildung 3: Definition des Restnetzwerkes im Bild
Der Sinn eines Restnetzwerkes ist es, zu erkennen, wie man einen Fluss x
ändern kann oder muss um einerseits die Flusserhaltung zu erfüllen und andererseits die Zielfunktion z zu verbessern. Wie man sehr leicht sieht bedeutet
eine zulässige Flussänderung, das man Fluss über einen Kreis in G(x) schickt.
9
2.2
Optimalitätsbedingungen
Die Frage ist nun, wie man erkennen kann, wann ein Fluss optimal ist.
2.2.1
Negative-Cycle-Optimalitätsbedingung
Bei genauer Betrachtung des Restnetzwerkes sieht man, das eine zulässige
Flussänderung nur über Kreise gehen kann und dass die Kosten einer positiven Flussänderung über einen Kreis die Zielfunktion des Problem ändert.
Formalisiert man diese Beobachtung erhält man die erste Optimalitätsbedingung:
Optimalitätsbedingung 1
Ein Fluss x∗ ist optimal genau dann, wenn G(x∗ ) keine negativen Kreise
enthält.
Beweis:
”⇒” Sei x∗ ein optimaler Fluss. Wegen der einleitenden Beobachtung sieht
man, dass es in G(X ∗ ) keinen negativen Kreis geben kann, da man sonst
über diesen einen positiven Fluss schicken könnte, der die Zielfunktion
verringert.
”⇐” Sei x∗ ein zulässiger Fluss und G(x) enthalte keine negativen Kreise.
Ausserdem sei x0 ein optimaler Fluss. Dann lassen sich Kreise in G(x)
finden, die zusammen x∗ in x0 überführen. Die Kosten dieser Kreise
sind cT x0 − cT x∗ . Da alle Kreise nicht-negativ sein müssen, gilt:
cT x0 − cT x∗ ≥ 0
Andererseits gilt (da x0 optimal):
cT x∗ ≤ cT x0
⇔ cT x∗ − cT x0 ≤ 0
⇒
cT x0 = cT x∗
d.h. x∗ ist bereits optimal.
•
10
2.2.2
Reduzierte-Kosten-Optimalitätsbedingung
Ein anderer Zugang zu einer Optimalitätsbedingung findet man in den Konzepten der reduzierten Kosten und der Knotenpotentiale. Dabei ist das Potential eines Knoten i ein Wert π(i) ∈ . Darüber definiert werden die reduzierten Kosten cπij := cij −π(i)+π(j) für jede Kante (i, j) des Netzwerkes. Die
reduzierten Kosten im Restnetzwerk sind genauso definiert, wie die normalen
nur mit cπij statt cij .
Ein paar schöne Eigenschaften der reduzierten Kosten sind:
R
Theorem 1
1. für jeden gerichteten Pfad P von Knoten k zu Knoten l gilt:
X
(i,j)∈P
X
cπij =
cij − π(k) + π(l)
(i,j)∈P
2. für jeden gerichteten Kreis C gilt:
X
X
cπij =
cij
(i,j)∈C
(i,j)∈C
Beweis:
1. oBdA. sei P = k, k + 1, . . . , k + |P | − 2, l
X
X
cπij =
(cij − π(i) + π(j))
(i,j)∈P
(i,j)∈P
=ck,k+1 − π(k) + π(k + 1) + ck+1,k+2 − π(k + 1) + π(k + 2)+
· · · + ck+|P |−2,l − π(l − 1) + π(l)
X
=
cij − π(k) + π(l)
(i,j)∈P
2. folgt direkt aus dem ersten Punkt, da dort k = l und damit π(k) = π(l)
•
Insbesondere folgt hieraus, dass der kürzeste Pfad zwischen zwei Knoten k
und l bzgl. c auch der kürzeste Pfad bzlg. cπ ist, da jeder Pfad zwischen k
und l um den konstanten Wert π(l) − π(k) erhöht wird.
Mit dem Konzept der reduzierten Kosten lässt sich nun eine weitere Optimalitätsbedingung zeigen:
11
Optimalitätsbedingung 2
Ein zulässiger Fluss x∗ ist optimal genau dann, wenn es Knotenpotentiale π
gibt, sodass gilt:
∀(i, j) ∈ G(x∗ )
cπij ≥ 0
Beweis:
Um dieses zu beweisen, reicht es zu zeigen, dass gilt:
∃ Knotenpotentiale π : cπij ≥ 0 ∀(i, j) ∈ G(x∗ )
⇔
G(x∗ ) enthält keinen Kreis negativer Kosten
”⇐” Sei x∗ ein Fluss und π seien Knotenpotentiale mit cπij ≥
0 ∀(i, j) ∈ G(x∗ ).
P
Folglich gilt für jeden gerichteten Kreis W in G(x∗ ): (i,j)∈W ≥ 0. WeP
P
π
∗
gen Theorem 1.2 gilt
(i,j)∈W cij =
(i,j)∈W cij , d.h. G(x ) enthält
keine Kreise mit negativen Kosten.
”⇒” Sei also x∗ ein Fluss und G(x∗ ) enthalte keine negativen Kreise. Dann
lassen sich kürzeste Wege von Knoten 1 zu allen anderen Knoten in
G(x∗ ) finden. Seien d die Distanzlabels der kürzesten Wege. Dann gilt
für alle (i, j) in G(x∗ ) :
⇔
⇔
d(j) ≤ d(i) + cij
0 ≤ cij − d(j) + d(i)
0 ≤ cij − (−d(i)) + (−d(j))
mit π = −d gilt
0 ≤ cij − π(i) + π(j) = cπij
d.h. Optimatitätsbedingung 2 ist äquivalent zur Optimalitätsbedingung 1 •
2.2.3
Komplementärer Schlupf
Die ersten beiden Optimalitätsbedingungen waren beide über das Restnetzwerk definiert. Die nächste Optimalitätsbedingung ist nun direkt auf dem
Netzwerk definiert.
12
Optimalitätsbedingung 3
Ein zulässiger Fluss x∗ ist optimal genau dann, wenn ein Knotenpotential π
existiert, sodass für jede Kante (i, j) ∈ E gilt:
cπij > 0 ⇒ x∗ij = 0
0<
x∗ij
< uij ⇒
cπij < 0 ⇒
cπij
x∗ij
(4a)
=0
(4b)
= uij
(4c)
Beweis:
Es reicht auch hier wieder zu zeigen, dass die Optimalitätsbedingung (3)
äquivalent ist zur Optimalitätsbedingung (2).
”⇐” Sei x∗ ein zulässiger Fluss und π Knotenpotentiale mit cπij ≥ 0∀(i, j) ∈ G(x∗ ).Dann
gilt für jede Kante (i, j) ∈ E:
Fall 1. Sei cπij > 0. Dann kann G(x∗ ) die Kante (j, i) nicht enthalten, da
für diese cπji = −cπij < 0 wäre. Daher kann kein Fluss über (i, j)
fliessen, d.h. x∗ij = 0.
Fall 2. Sei 0 < x∗ij < uij . Dann sind beide Kante (i, j) und (j, i) in G(x∗ )
enthalten und für beide sind die reduzierten Kosten ≥ 0. Wegen
0 ≤ cπji = −cπij ≤ 0 muss cπij = cπji = 0 gelten.
Fall 3. Sei cπij < 0. Dann kann G(x∗ ) die Kante (i, j) nicht enthalten,
weswegen xuj = uij sein muss.
”⇒” Sei x∗ ein zulässiger Fluss und die Bedingungen (4) gelten für ein
Knotenpotential π. Dann gilt für jede Kante (i, j) ∈ E:
Fall 1. Sei cπij > 0. Dann gilt nach Vorraussetzung x∗ij = 0. Nach Definition des Restnetzwerkes enthält dieses dann die Kante (i, j) mit
Kosten cπij aber nicht die Kante (j, i) die Kosten −cπij < 0 hätte.
Fall 2. cπij = 0 . Dann gilt sowohl cπij = 0 wie auch cπji = 0 für die Kante
(i, j) bzw. (j, i) in G(x∗ ), falls diese existieren.
Fall 3. Sei cπij < 0. Dann gilt nach Vorraussetzung x∗ij = uij . Folglich
existiert die Kante (i, j) nicht in G(x∗ ) und für die Kante (j, i)
gilt nach Def. des Restnetzwerkes cπji = −cπij > 0.
Also sind die reduzierten Kosten für alle Kanten (i, j) in G(x∗ ) größer
oder gleich 0, d.h. die Optimalitätsbedingung (2) gilt.
•
13
2.3
Dualität
Da man das MinCostFlow-Problem als Minimierungsproblem beschrieben
werden kann, ist die Frage, wie die Dualitätstheorie der mathematischen Optimierung sich hier auswirkt. Zu dem Minimierungsproblem (3), was fortan
als primales Problem bezeichnet wird, existiert das duale Problem
LP 4
max w(π, α) = bT π − uT α
s.t.
AT π − α ≤ c
α≥0
(5a)
(5b)
wobei π die duale Variable zur Flusserhaltungs-Gleichung und α die duale
Variable der Kapazitätsbedingung ist. Damit lässt sich zeigen, dass für das
MinCostFlow-Problem die Schwache Dualität gilt:
Theorem 2 (Schwacher Dualitätssatz)
Sei x ein primal zulässiger Fluss des MinCostFlow-Problems mit der Zielfunktion z(x) und sei (π, α) eine dual zulässige Lösung des dualen Problems
mit Zielfunktionw(π, α). Dann gilt:
w(π, α) ≤ z(x)
Beweis:
Multiplizieren von xT von links an die Ungleichung (5a) ergibt:
x T AT π − x T α
≤ xT c = cT x= z(x)
⇔ (Ax)T π − xT α ≤ z(x)
und wegen (2a)
⇔ bT π − x T α
⇔ w(π, α)
≤ z(x)
≤ z(x)
•
Nach dem Schwachen Dualitätssatz hat also jede dual zulässige Lösung einen
größeren Zielfunktionwert als die primal zulässige Lösung. Die impliziert die
14
Frage, ob es auch ein Paar von Lösungen gibt, sodass Gleichheit gilt. In
diesem Falle wären die Lösungen optimal, da es keine größere duale bzw.
kleinere primale Lösung geben kann, ohne den Schwachen Dualitätssatz zu
verletzen.
Theorem 3 (Starker Dualitätssatz)
Das primale MinCostFlow-Problem hat eine optimale Lösung x∗ genau dann,
wenn das duale Problem eine optimale Lösung (π, α) hat.
Beweis:
Zuerst kann man die Ungleichung (5a) wie folgt umformen:
AT π − α
⇔
≤c
≤ c − AT π
−α
da A Knoten-Kanten-Inzidenzmatrix, gilt für jede Kante (i, j) ∈ E:
⇔
⇔
−αij ≤ cij − (π(i) − π(j))
−αij ≤ cπij
(6a)
(6b)
αij ≥ −cπij
(6c)
Wegen (5b) und (6c) muss in der optimalen dualen Lösung gelten αij =
max{0, −cπij }, da dann −uT α maximal. Mit w(π) := w(π, max{0, −cπij })
kann nun der Satz bewiesen werden:
”⇒” Sei also x∗ eine optimale primale Lösung. Dann existiert nach Optimalitätsbedingung (3) eine duale Lösung π, die die Bedingungen (4)
erfüllt. Damit gilt
−cπij xij = max{0, −cπij }uij
(7)
denn
ˆ Im Fall cπij > 0 und im Fall cπij = 0 sind beide Seiten von (7) gleich
0.
ˆ Im Fall cπij < 0 ist xij = uij und damit sind beide Seiten von (7)
gleich −cπij uij .
Desweiteren gilt für bT π:
bT π = (Ax)T π = xT AT π = xT (π T A) =
X
(i,j)∈E
15
xij (π(i) − π(j))
(8)
Folglich gilt für die duale Zielfunktion:
X
w(π) = bT π −
max{0, −cπij }uij
(i,j)∈E
=
X
xij (π(i) − π(j)) −
(i,j)∈E
=
X
X
xij (π(i) − π(j)) −
=
X
−(cij − π(i) + π(j))xij
(i,j)∈E
xij (π(i) − π(j)) −
(i,j)∈E
X
−cπij xij
(i,j)∈E
(i,j)∈E
=
X
X
(π(i) − π(j))xij −
(i,j)∈E
X
−(cij )xij
(i,j)∈E
cij xij = cT x
(i,j)∈E
”⇐” Sei π eine optimale Lösung des dualen Problems. Die primale Lösung
lässt sich durch das folgende Verfahren finden.
Für jede Kante (i, j) ∈ E prüfe die folgenden Fälle:
ˆ Im Fall cπij > 0 setze x∗ij = 0 und lösche die Kante (i, j) aus G.
ˆ Im Fall cπij < 0 setze x∗ij = uij , b(i) = b(i)−uij und b(j) = b(j)+uij
und lösche (i, j) aus G.
ˆ Im Fall cπij = 0 lasse (i, j) in G.
Im verbleibenen Graphen muss nun durch Einführung von zwei künstlichen Knoten s und t sowie künstlichen Kanten von s bzw. t zu allen
Knoten i mit b(i) > 0 bzw. b(i) < 0 mit Kapazitäten b(i) bzw. −b(i) ein
MaxFlow-Problem gelöst werden. Das Ergebniss des MaxFlow-Problems
gibt einen zulässigen Fluss im orginal Netzwerk an. Dieses Ergebniss
muss wegen der Lösbarkeitsannahme existieren. Zusammen mit dem
oben gesetzten Fluss ist x∗ ein zulässiger Fluss des MinCostFlow-Problems
und er ist auch optimal, da er nach Konstruktion die Optimalitätsbedingung (3) erfüllt.
•
Ausserdem sieht man an den Beweis der Optimalitätsbedingung (2) und dem
Beweis der Starken Dualtität, dass man zu einem optimalen Fluss x∗ durch
Lösen eines Kürzesten Wege Problems eine optimale duale Lösung und zu
einer optimalen dualen Lösung π ∗ durch Lösen eines MaxFlow-Problem eine
optimale primale Lösung finden kann.
16
3
3.1
Algorithmen
Ansätze für Algorithmen
Nach der Theorie ist nun die Frage, wie sich die Optimalitätsbedingungen in
einem Algorithmus ausnutzen lassen. Der intuitivste soll hier auch der erste
Algorithmus sein.
3.1.1
Der Cycle-Cancel-Algorithmus
Die Optimalitätsbedingung (1) zwingt einem einen Algorithmus geradezu
auf. Aus der Bedingung ”G(x∗ ) enthält keinen negativen Kreis ⇒ x∗ ist optimal” ergibt sich intuitiv die Algorithmenidee ”Solange G(x∗ ) negative Kreise
enthält, beseitige diese”. Algorithmus 3.1.1 stellt die Basis der Algorithmen
dar, die auf der Optimalitätsbedingung (1) basieren.
Algorithmus 3.1.1 Generischer Cycle-Canceling Algorithmus
finde einen zulässigen Fluss x im Netzwerk ;
/*z.B. durch Max-Flow-Algorithmus*/
while G(x) enthält einen negativen Kreis do
finde einen solchen negativen Kreis C;
δ := min{rij : (i, j) ∈ C};
augmentiere δ Einheiten Fluss über den Kreis C;
aktualisiere G(x);
end while;
Auch wenn oder gerade weil dieser Algorithmus so einfach und intuitiv ist,
so zeigt die Laufzeitanalyse doch, dass er nicht zu den Besten für dieses Problem gehört. Seien C := max{cij : (i, j) ∈ E} und U := max{max{|b(i)| :
i ∈ V }, max{uij : (i, j) ∈ E}} . Dann ist mCU eine obere Schranke und
−mCU eine untere Schranke der Gesamtkosten. Da der Algorithmus in jeder Iteration die Kosten um einen echt-negativen Betrag reduziert und alle
Daten ganzzahlig sind (nach Annahme 4), braucht der Algorithmus O(mCU )
Iterationen ( ist also insbesondere endlich, falls CU endlich). In jeder Iteration ist das Problem zu lösen, einen Kreis negativer Kosten zu finden. Dieses
kann in Zeit O(mn) gelöst werden. Daraus ergibt sich eine Gesamtlaufzeit
von O(nm2 CU ).
Das Problem dieses Algorithmus ist also, dass er eine Laufzeit hat, die von
den Eingangsdaten abhängt. Er kann also beliebigt schlecht laufen ( z.B. exponential, falls mCU = 2n und in jedem Schritt ein Kreis der Kosten −1
gefunden wird). Dieses sehr schlechte Laufzeitverhalten kommt daher, dass
17
keine zusätzliche Bedingung an die negativen Kreise gestellt wird, d.h. der
Algorithmus kann in jedem Schritt beliebig wenig von den Kosten abziehen.
Stellt man nun weitere Bedingungen an den Kreisfindungs-Prozess, so verbessert sich das Laufzeitverhalten.
Eine Verbesserungsidee ist es, in jeder Iteration maximal viel abzuziehen.
Dann kann man zeigen, dass diese Algorithmusvariante eine Laufzeit von
O(mlog(mCU )) hat, also pseudo-polynomial ist. Das Problem einen Kreis
zu finden, der die Kosten maximal verringert ist jedoch NP-vollständigt.
Eine andere Verbesserungsidee ist es, einen Kreis zu finden, dessen gemittelten Kosten minimal sind. Die mittleren Kosten eines Kreises ist das Verhältniss Kosten zu Anzahl Kanten. Solch ein Kreis kann mit relativ geringen
Laufzeit gefunden werden und es wurde gezeigt, dass der Algorithmus dann
eine Laufzeit von O(min{nmlog(nC), nm2 log(n)}) hat, falls er nur über Kreise mit minimalen mittleren Kosten augmentiert.
3.1.2
Wiederholte Kürzeste Wege Algorithmus
Eine weitere Idee ist es, nicht die Minimalität der Kosten anzustreben, sondern von einem Fluss minimaler Kosten ausgehen einen zulässigen Fluss minimaler Kosten zu finden.
Definition 6
1. Ein Fluss x heisst Pseudofluss, falls gilt 0 ≤ x ≤ u.
2. Für einen Pseudofluss x sein die Zahl e für jeden Knoten i ∈ V definiert
als:
X
X
e(i) := b(i) +
xji −
xij
{j:(j,i)∈E}
{j:(i,j)∈E}
Für ein Knoten i mit e(i) > 0 heisst e(i) Überschuss und für einen
Knoten j mit e(j) < 0 heisst −e(j) Defizit. Desweiteren sei Z := {i :
e(i) > 0, i ∈ V } und D := {i : e(i) < 0, i ∈ V }. Das Restnetzwerk eines
Pseudoflusses sei genauso definiert wie das eines Flusses.
Ein Pseudofluss erfüllt also die obere und untere Kapazitätsbedingungen,
kann aber die Nachfrage bzw. das Angebot von Knoten unsaturiert lassen.
ist jeder
Pseudofluss. Wegen Annahme
5 ist
P Insbesondere
P
P Fluss ein P
P
i∈V e(i) =
i∈V b(i) +
(j,i)∈E xji −
(i,j)∈E xij = 0. Also ist
i∈Z e(i) =
P
− i∈D e(i).
Theorem 4
Seien x ein Pseudofluss, π Knotenpotentiale mit cπij ≥ 0 ∀(i, j) ∈ G(x) und
der Vektor d sei der Vektor der kürzesten Distanzen von einem Knoten s zu
allen anderen Knoten in G(x) bzgl. cπij . Dann gilt:
18
0
1. Für π 0 := π − d gilt cπij ≥ 0 ∀(i, j) ∈ G(x).
0
2. cπij = 0 entlang der kürzesten Wege von s zu allen anderen Knoten.
Beweis:
1. Für den Vektor d gilt für jede Kante (i, j) ∈ G(x):
d(j) ≤ d(i) + cπij
ersetzt man cπij mit cij −π(i)+π(j) kann man die Ungleichung umformen
zu
⇔ d(j) ≤ d(i) + cij − π(i) + π(j)
⇔
0 ≤ cij − π(i) + d(i) + π(j) − d(j)
⇔
0 ≤ cij − (π(i) − d(i)) + (π(j) − d(j))
mit π 0 = π − d
⇔
0 ≤ cij − π 0 (i) + π 0 (j)
⇔
0 ≤ cπij
0
2. Sei t ein beliebiger Knoten und sei P ein kürzester Pfad von Knoten
s zu Knoten t. Dann gilt für jede Kante (i, j) auf dem Pfad P d(j) =
0
d(i) + cπij . Analog der Umformung aus Teil 1) folgt cπij = 0
•
Aus dieser Beobachtung folgt direkt
Theorem 5
Sei x ein Pseudofluss und π Knotenpotentiale mit cπij ≥ 0 ∀(i, j) ∈ G(x).
Desweiteren sei x0 eine Pseudofluss der durch eine Flusserhöhung entlang
eines kürzesten Pfades P von einem Knoten s zu einem Knoten t in G(x) ent0
standen ist. Dann existierten Knotenpotentiale π 0 , sodass cπij ≥ 0 ∀(i, j) ∈ G(x0 )
Beweis:
Seien d der Distanzvektor des Pfades P und π 0 := π − d. Dann gilt nach
Theorem 4 für jede Kante (i, j) auf dem Pfad von Knoten s nach Knoten t,
0
dass cπij = 0. In G(x0 ) können sich nur Kanten entlang des Pfades P ändern,
d.h. für eine Kante (i, j) ∈ P kann die Kante (j, i) in G(x0 ) hinzugenommen
19
werden, die Kante (i, j) kann in G(x0 ) nicht mehr existieren oder beide Kan0
ten existierten bereits in G(x) und ändern sich nur. Da aber cπij = 0 folgt
0
0
dass auch cπji = −cπij = 0, d.h. alle Kanten entlang des durch P erzeugten
ungerichteten Pfades haben keine Kosten. Für alle anderen Kanten ändert
0
sich nichts folglich gilt cπij = 0 ∀(i, j) ∈ G(x0 ). •
Dieses Theorem assoziiert wieder einen Alogrithmus für das MinCostFlowProblem. Die Idee ist solange einen Pseudofluss x minimaler Kosten entlang
kürzester Wege im Restnetzwerk zu erhöhen, bis dieser zu einem zulässigen
Fluss x∗ wird. Dieser ist dann bereits optimal.
Algorithmus 3.1.2 Wiederholte-Küzeste-Wege-Alogrithmusses
x = 0; π = 0;
e(i) = b(i)
∀i ∈ V ;
Z = {i : e(i) > 0}; D = {i : e(i) < 0};
while E 6= ∅ do
wähle einen Knoten s ∈ Z und einen Knoten t ∈ D;
bestimme kürzeste-Wege-Distanzen d von Knoten s zu allen anderen
Knoten in G(x) bzgl. cπ ;
wähle einen solchen kürzesten Weg P von s nach t;
aktualisiere π = π − d;
δ = min{e(s), −e(t), min{rij : (i, j) ∈ P }};
erhöhe x um δ Einheiten Fluss entlang Pfad P ;
aktualisiere x,G(x),E,D und cπ ;
end while
Der Algorithmus startert mit dem simpelsten Pseudofluss x = 0 und Knotenpotentialen π = 0. Hieraus folgt dass am Anfang G(x) = G und cπij =
cij = 0∀(i, j) ∈ G(x), also die Bedingungen von Theorem 5 erfüllt sind.
Die Schleife wird nun solange durchlaufen, bis Z = ∅, was genau dann der
Fall ist, wenn xPein optimaler Fluss ist. Dann muss gelten Z = D = ∅, da
P
i∈Z e(i) = −
i∈D e(i). Wegen Annahme 8 sind die Distanzlabels d für alle
Knoten wohldefiniert und damit auch die Änderung der reduzierten Kosten.
In jeder Iteration wird x echt verbessert, da δ > 0 und auch ein e(i), i ∈ Z
und ein ej), j ∈ D echt vermindert. Mit U := max{b(i) : i ∈ V } sieht man
jetzt, das es höchstens O(nU ) Iterationen geben kann, der Algorithmus also
in endlich vielen Schritten endet. Sei S(n, m, C) die Laufzeit für das KürzesteWege-Problem und C := max{cij : (i, j) ∈ E}, dann hat der WiederholtKürzeste-Wege-Algorithmus eine Gesamtlaufzeit von O(nU S(n, m, nC)).
20
3.2
Praktischere Algorithmen
Der intuitive Weg bringt also bei beiden Ansätzen nur eine Laufzeit, die stark
von den benutzten Eingangsdaten abhängen. Je nach Ablauf können also
beide eine beliebig schlechte Laufzeit produzieren. Es stellt sich die Frage, ob
es besser geht oder nicht. Bei beiden Algorithmen war das Problem, dass sie
in jeder Iteration ggf. nur sehr wenig augmentieren können. Die Grundidee
ist also die Erhöhung zu verbessern.
3.2.1
Capacity Scaling -Algorithmus
Der Capacity-Scaling-Algorithmus ist eine Variante des Wiederholte-KüzesteWege-Alogrithmusses. Es ändert ihn in der Weise, dass in jeder Iteration eine
ausreichend große Erhöhung stattfindent, so dass die Anzahl der Iteration
gesankt werden kann. Dabei wird die Technik des Skalierens eingesetzt, die
nur Kanten betrachtet, die ”groß genug” sind. Dazu wird eine Größe ∆ eingeführt, die die aktuelle Skalierung darstellt. Der Algorithmus arbeitet dann
in sogenannten ∆-Phasen, d.h. Phasen mit gleichem ∆.
Zuerst ein paar Definitionen:
Definition 7
Sei ∆ ∈ .
R
ˆ Für einen Fluss x sei das ∆-Restnetzwerk G(x, ∆) als Teilgraph des
Restnetzwerkes G(x) definiert, sodass gilt rij ≥ ∆ ∀(i, j) ∈ G(x).
ˆ S(∆) := {i ∈ V : e(i) ≥ ∆}
ˆ T (∆) := {i ∈ V : e(i) ≤ −∆}
ˆ U := max{max{|b(i)| : i ∈ V }, max{uij : (i, j) ∈ E}}
Der Capacity-Scaling-Algorithmus 3.2.1 fängt dabei genauso wie Algorithmus
3.1.2 mit dem Null-Fluss und dem Null-Potential an und um die größten Wege
zuerst zu finden fängt ∆ mit dem Wert 2blogU c an. Nun werden zwei Knoten s
und t gesucht, deren Überschuss bzw. Defizit mind. ∆ beträgt und es wird ∆
Einheiten Fluss über einen kürzesten Weg geschickt. Falls kein solches Paar
existiert, wird ∆ halbiert und es wird von vorne begonnen bis ∆ = 21 .
Dann muss x ein zulässiger Fluss sein, denn es gilt S(1) = T (1) = ∅, d.h. es
existiert kein Knoten mehr mit Überschuss oder Defizit. Da x dann ausserdem
die Optimalitätsbedingung (2) für G(x, 1) = G(x) erfüllt, ist x optimale
Lösung des Problems.
Etwas unersichtlicher ist die Laufzeit. Die Frage ist hauptsächlich wieviele
Iterationen der Algorithmus in jerer ∆-Phase maximal durchführen kann.
21
Algorithmus 3.2.1 Capacity-Scaling-Algorithmus
x = 0; π = 0;
∆ = 2blogU c ;
while ∆ ≥ 0 do
/*∆-Skalierungsphase*/
for jeden Kante (i, j) in G(x) do
if rij ≥ ∆ und cπij < 0 then
erhöhe x um rij Einheiten entlang Kante (i, j) und aktualisiere x
und e ;
end if
end for
S(∆) := {i ∈ V : e(i) ≥ ∆};
T (∆) := {i ∈ V : e(i) ≤ −∆};
while S(∆) 6= ∅ und T (∆) 6= ∅ do
wähle einen Knoten s ∈ S(∆) und einen Knoten t ∈ T (∆);
bestimme kürzesten Wege-Labels d von Knoten s zu allen anderen
Knoten in G(x, ∆) bzgl. cπ ;
wähle einen solchen kürzesten Weg P von s nach t in G(x, ∆);
aktualisiere π = π − d;
erhöhe x um ∆ Einheiten Fluss entlang Pfad P ;
aktualisiere x,G(x),G(x, ∆),S(∆),T (∆) und cπ ;
end while
end while
Am Ende einer 2∆-Phase ist entweder S(∆) = ∅ oder T (∆) = ∅, d.h. es gilt
entweder e(i)
P < 2∆ für alle i ∈ V oder e(i) > −2∆ für alle i ∈ V . Folglich
lässt sich i:∈S(2∆) e(i) mit 2n∆ nach oben abschätzen.
Am Anfang der ∆-Phase kann es jetzt sein, dass G(x, ∆) Kanten enthält, die
negative Kosten haben. Diese werden in der FOR-Schleife saturiert wodurch
sie aus G(x, ∆) entfernt werden und dafür die Kante (j, i) in G(x, ∆) geändert
wird bzw. aufgenommen wird. Da diese Kanten nicht in G(x, 2∆) enthalten
sein konnten, gilt für jede solche Kante (i, j) dass ∆ ≤ rij < 2∆. Weiterhin ist
ersichtlich, das das Saturieren einer solchen
PKante (i, j) dazu führt, das e(j)
um maximal 2∆ erhöht wird. Also wird i:∈S(2∆) e(i) um höchstens 2m∆
P
erhöht und damit ist folglich i:∈S(∆) e(i) ≤ 2n∆ + 2m∆ = 2(n + m)∆.
Da in jeder Iteration der
P inneren WHILE-Schleife x um genau ∆ Einheiten
Fluss erhöht wird und i:∈S(∆) e(i) < 2(n + m)∆, kann es in jeder ∆-Phase
höchsten 2(n + m) Iterationen geben. Weiterhin gibt es offensichtlicht genau
blogU c ∆-Phasen womit die Laufzeit durch O((n + m)logU S(n, m, nC)) =
22
O(nlog(U )S(n, m, nC)) abgeschätzt werden kann (Auch hier ist wieder O(S(n, m, nC))
die Laufzeit des Kürzeste-Wege-Problems in jeder Iteration der innenren
WHILE-Schleife).
23
A
A.1
A.1.1
Anmerkungen
zu den Annahmen
Elimination der unteren Kapazitätsschranken
Das Gleichungssystem
min cT x
s.t.
Ax = b
l≤x≤u
(a)
(b)
geht durch Ersetzen von x = x0 + l über in
min cT x0 + l
s.t.
A(x0 + l) = b
l ≤ x0 + l ≤ u
(a)
(b)
Auflösen nach x0 liefert
min cT x0 + cT l
s.t.
Ax0 = b − Al
0 ≤ x0 ≤ u − l
(a)
(b)
was man mit b0 = b − Al , u0 = u − l und cT l = const schreiben kann als
min cT x0
s.t.
Ax0 = b0
0 ≤ x 0 ≤ u0
24
(a)
(b)
A.1.2
Überprüfung, ob ein Netzwerk einen zulässigen Fluss hat
Um zu überprüfen, ob ein Netzwerk G = (V, E) einen zulässigen Fluss hat
oder nicht, kann man das Netzwerk wie folgt transformieren:
ˆ Hinzufügen zweier neuer Knoten s und t mit b0s =
P
0
{i:bi ≤0} bi und bi = 0∀i 6∈ s, t
P
{i:bi ≥0} bi ,
b0t =
ˆ Hinzufügen von Kanten von s zu jedem Angebotsknoten i bzw. von
jedem Nachfrageknoten j zu t mit Kapazität usi = b(i) bzw. uj t = −b(j)
In diesem neuen Netzwerk G0 mit Kosten c0 , Angebots- und Nachfragevektor
b0 und Kapazitäten u0 kann man nun ein MaxFlow-Problem lösen. Falls der
maximale Fluss alle Kanten (s, i) saturiert, gibt es einen zulässigen Fluss in
G für das MinCostFlow-Problem.
25
Herunterladen