Methoden aus der Graphentheorie

Werbung
Methoden aus der Graphentheorie
Mike Hüftle
28. Juli 2006
Inhaltsverzeichnis
1 Einleitung
1.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2 Maximalfluss-Algorithmen
2.1 Maximalfluss-Problem . . .
2.2 Ford-Fulkerson-Algorithmus
2.3 Beispiel . . . . . . . . . . .
2.4 Varianten . . . . . . . . . .
2.5 Anwendung . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
4
5
6
7
3 Minimalkosten-Flussalgorithmen
3.1 Minimalkosten-Flussproblem . . . . . . . . . . . . . . . . .
3.2 Algorithmus von Busacker und Gowen . . . . . . . . . . . .
3.2.1 Nebenpfad: Algorithmus von Busacker und Gowen .
3.3 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Netzwerk-Simplexverfahren . . . . . . . . . . . . . . . . . .
3.5 Anwendung Netzwerk-Simplex . . . . . . . . . . . . . . . .
3.6 Out-of-Kilter-Algorithmus . . . . . . . . . . . . . . . . . . .
3.6.1 Nebenpfad: Zustände des Out-of-Kilter-Algorithmus
3.7 Anwendung Out-of-Kilter . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
9
9
11
12
13
14
14
16
4 Kürzeste-Wege-Algorithmen
4.1 Algorithmus von Dijkstra . . . . . . .
4.2 Beispiel für den Dijkstra-Algorithmus
4.3 Varianten des Dijkstra-Algorithmus . .
4.4 Triple-Algorithmus . . . . . . . . . . .
4.5 Beispiel für den Triple-Algorithmus . .
4.6 Varianten des Triple-Algorithmus . . .
4.7 A*-Algorithmus . . . . . . . . . . . . .
4.8 Anwendung des A*-Algorithmus . . .
4.9 Weitere Kürzeste Wege-Algorithmen .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
20
21
22
23
24
26
27
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 Minimalgerüst-Algorithmen
29
5.1 Algorithmen von Prim und Kruskal . . . . . . . . . . . . . . . . . 29
5.2 Weitere Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6 Literatur und Methodenverzeichnis
6.1 Literatur zu Maximalfluss-Algorithmen . . .
6.1 Literatur zu Minimalkosten-Flussverfahren .
6.1 Literatur zu Kürzeste-Wege-Algorithmen . .
6.1 Literatur zu Minimalgerüst-Algorithmen . .
6.1 Methoden . . . . . . . . . . . . . . . . . . .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
32
32
32
33
34
35
1
Einleitung
1.1
Optimierung
in Graphen
und
Netzwerken
Neben der linearen Optimierung gehört die Optimierung in Graphen und
Netzwerken zu den Gebieten der Optimierung, die in der Praxis am weitesten
verbreitet sind.
Dies liegt daran, dass sich viele reale Probleme wie die Transport- und Standortplanung, die Berechnung der kürzesten oder kostengünstigsten Wege
in einem Verkehrsnetz oder die Ermittlung des maximalen Durchflusses in
einem Rohrleitungsnetz als Optimierungsprobleme für Graphen formulieren lassen.
Ein weiterer Grund für die weite Verbreitung der Graphenoptimierung ist die
Tatsache, ,dass sich auch sehr große Graphen- und Netzwerkprobleme (z.B. in
Verkehrsnetzen) effizient gelöst werden können.
Dieses Kapitel wird nach den wichtigsten Optimierungsaufgaben in Graphen gegliedert. Es werden Algorithmen zur Lösung des Maximalfluss-Problems, MinimalkostenFlussalgorithmen, Kürzeste-Wege-Algorithmen sowie Minimalgerüst-Algorithmen
behandelt.
3
2
Maximalfluss-Algorithmen
2.1
Maximalfluss-Problem
Die Berechnung optimaler Flüsse in Netzwerken gehört zu den wichtigsten Anwendungsgebieten der Graphentheorie.
Hierbei interessiert oftmals, welcher maximale Fluss durch ein gegebenes Netzwerk fließen kann. Diese Problemstellung wird als Maximalfluss-Problem bezeichnet.
Beispiele hierfür sind die Ermittlung der maximal durch ein Rohrleitungsnetz
strömenden Gasmenge oder die maximale Kapazität eines Straßennetzes.
Repräsentation als
Graph
Ein Netzwerk N = (G,s,t,l) besteht aus einem gerichteten Graphen G =
(V,E), zwei ausgezeichneten Knoten s (der Quelle) und t (der Senke) und einer
Kapazitätsfunktion l(e), die jeder Kante e ∈ E des Netzwerks eine Kapazität
zuweist.
Ein Fluss f¡sub¿ij¡/sub¿ in einem Netzwerk N vom Knoten i zum Knoten j ist
eine Funktion mit den Eigenschaften:
• Für jeden Knoten e ∈ E ist 0 ≤ f (e) ≤ l(e).
• In jedem Knoten e ∈ E \ {s, t} gilt Flusserhalt, d.h. die Summe der eingehenden Flüsse ist gleich der Summe der ausgehenden Flüsse.
Gilt zusätzlich lmin ≤ f ≤ lmax , so wird dies ein zulässiger Fluss genannt.
Der Nettofluss
|fik |P
eines Flusses fik ist definiert durch:
P
v∈V fik −
v∈V fki
|fik | =
i,k∈E
k,i∈E
Damit ist ein maximaler Fluss fst zwischen s und t ein Fluss, für den |fst |
maximal wird.
4
2.2
Ford-Fulkerson-Algorithmus
Methodenbeschreibung
Der Algorithmus von Ford und Fulkerson ist eine Methode zur Bestimmung eines maximalen Flusses zwischen einer Quelle s und einer Senke t.
Der Algorithmus wird am Anfang mit einem bestehenden Fluss in einem Netzwerk N initialisiert, dies kann auch der Nullfluss sein. Dann wird ein Weg
p¡sub¿st¡/sub¿ von der Quelle s zur Senke t gesucht, auf dem alle Kanten positive Kapazitäten lij − fij besitzen.
Der Fluss auf diesem Pfad wird um die Kapazität der Kante dieses Pfades
erhöht, welche die kleinste Kapazität auf dem Pfad aufweist.
Nun werden solange sukzessive s-t-Pfade p¡sub¿st¡/sub¿ ausgewählt und der
Fluss erhöht, bis kein Pfad mehr in N existiert, auf dem alle Kanten positive
Kapazitäten besitzen.
Soll der maximale Fluss für ein Netzwerk mit beliebig vielen Quellen
und Senken berechnet werden, so werden in das bestehende Netzwerke weitere
Quellen und Senken eingefügt und diese mit allen anderen Quellen bzw. allen
anderen Senken aus dem Netzwerk verbunden.
Die Laufzeit des Algorithmus von Ford und Fulkerson beträgt O(m2 · m).
5
2.3
Beispiel für
den FordFulkersonAlgorithmus
Beispiel
Die Dia-Show zeigt den Ablauf des Ford-Fulkerson-Algorithmus für ein
Netz mit sechs Knoten.
Das erste Bild zeigt das Ausgangsnetzwerk mit Nullflüssen fij und Kapazitäten
lij . Jede Kante ist mit einem Fluss und einer Maximalkapazität markiert:
In den nächsten vier Iterationen werden sukzessive Restkapazitäten des Netzwerks verbraucht“. Der aktuell betrachtete Pfad jeder Iteration ist in der Ab”
bildung orange markiert.
In der zweiten Abbildung wird der Pfad s-1-3-t ausgewählt und mit dem darauf
maximal möglichen Fluss von 5 Einheiten belegt. Mit diesem Fluss von 5 Einheiten werden die Flüsse fij der Kanten auf dem Pfad aktualisiert. Im dritten
Bild wird der Pfad s-2-4-t mit einem maximalen Fluss von 2 Einheiten ausgewählt. Dies wird noch zwei Mal wiederholt, bis kein Pfad mehr mit positiven
Kapazitäten existiert.
Der maximal mögliche Fluss zwischen s und t ist im letzten Bild dargestellt.
Er beträgt fst = 5 + 2 + 2 + 3 = 12 Einheiten.
Ausgangsnetzwerk mit Nullflüssen fij und Kapazitäten lij .
Auswahl von Pfad s-1-3-t und Belegung mit 5 Einheiten
Auswahl von Pfad s-2-4-t und Belegung mit 2 Einheiten
Auswahl von Pfad s-2-3-t und Belegung mit 2 Einheiten
Auswahl von Pfad s-2-4-3-t und Belegung mit 3 Einheiten
Zusammensetzung des maximalen Flusses (12 Einheiten) von s nach t
6
2.4
Varianten des
FordFulkersonAlgorithmus
Varianten
Der Algorithmus von Ford und Fulkerson wurde in zahlreichen Varianten implementiert. Der wichtigste Unterschied zwischen den Varianten ist, auf
welche Weise die Auswahl des Pfades p¡sub¿st¡/sub¿ in jeder Iteration erfolgt.
Das Auswahlkriterium beeinflusst wesentlich die Laufzeit des Algorithmus.
Die wichtigste Variante ist derAlgorithmus von Edmonds-Karp. Dieser
wählt als Pfad p¡sub¿st¡/sub¿ immer einen Weg minimaler Kantenzahl von s
nach t. Hiermit erzielten Edmonds und Karp eine Laufzeit von O(n · m).
Dinic [2] entwickelte einen Algorithmus, welcher in jeder Iteration den Fluss im
gesamten Netzwerk und nicht nur auf einem Pfad erhöht. Dieser Algorithmus
mit einer Laufzeit von O(n · m) eignet sich insbesondere für dichte Netzwerke,
d.h. Netzwerke mit sehr viel mehr Kanten als Ecken (m¿¿n).
Galil und Naamad [6] veröffentlichten einen Algorithmus, welcher auf der
Basis effizienter Datenstrukturen eine Laufzeit von O(n · m · log2 n) ermöglicht.
Einen Laufzeitvergleich der verschiedenen Varianten gibt Goldberg [7].
7
2.5
Anwendung
Vorteile des
FordFulkersonAlgorithmus
• Der Algorithmus von Ford und Fulkerson kann effizient den maximalen
Fluss in einem Netzwerk berechnen.
Nachteile des
FordFulkersonAlgorithmus
• Die Komplexität des Algorithmus ist stark von der Struktur des jeweiligen Netzwerkes abhängig, da für die Auswahl des Pfades p¡sub¿st¡/sub¿
keine Strategie vorgegeben wird, und im worst case jeweils Pfade mit geringer Kapazität gewählt werden. Hierdurch verschlechtert sich die Laufzeit des Algorithmus drastisch. Verschiedene Varianten versuchen diesen
Nachteil durch bestimmte Auswahlstrategien zu beheben.
• Die Implementierung für Netzwerke mit Zyklen kann problematisch
sein, da diese Zyklen permanente Flüsse generieren, so dass jede Iteration
des Algorithmus nach Überschreiten eines Zeitlimits abgebrochen werden
muss. Mittels so genannter Fat-Path“-Algorithmen wird dieser Nachteil
”
behoben [4].
Anwendungsbeispiele
Das Maximalflussproblem tritt in der Praxis häufig auf. Anwendungsbereiche
sind beispielsweise:
• Transportprobleme: Verkehrsfluss, Pipelinetransport, Stromtransport, Routing in Kommunikationsnetzen (Überblick in [1])
• Bipartites Matching
• Scheduling-Probleme (z.B. [4])
8
3
3.1
Minimalkosten-Flussalgorithmen
Minimalkosten-Flussproblem
Neben den Maximalfluss-Problemen spielen die Anwendungen für kostenminimale Flüsse in der Praxis eine große Rolle. Hierfür werden den NetzwerkKanten neben den Minimal- und Maximalkapazitäten li min
und li max
noch
j
j
Kosten c¡sub¿ij¡/sub¿ zugewiesen. Die vorgegebenen Flüsse f¡sub¿ij¡/sub¿ zwischen Knoten i und j im Netzwerk sollen mit möglichst geringen Kosten realisiert
werden.
MinmalkostenFlussproblem
Das Minimalkosten-Flussproblem hat die allgemeine Form:
P
min
c f
P (i,j)∈A ij ij P
s. d. j:(i,j)∈A fij − k:(k,i)∈A fki = bi ∀i ∈ V
li min
≤ fij ≤ li max
∀(i, j) ∈ A
j
j
9
3.2
Algorithmus
von Busacker
und Gowen
Algorithmus von Busacker und Gowen
Der Algorithmus von Busacker und Gowen löst das Problem eines kostenminimalen Flusses vorgegebener Stärke von einer Quelle zu einer Senke und das
Problem eines kostenminimalen maximalen Flusses.
Methodenbeschreibung
Die Idee des Algorithmus von Busacker und Gowen ist, ausgehend vom
Nullfluss oder einem vorgegebenen Fluss, eine Folge von kostenminimalen
Flüssen von einer Quelle s zu einer Senke t zu konstruieren, bis ein vorgegebener bzw. der maximale Fluss (d.h. die Maximalkapazität) erreicht ist.
Hierzu wird in jeder Iteration ein flussvergrößernder s-t-Pfad im Netzwerk gesucht, der unter allen s-t-Pfaden die kleinsten Kosten besitzt. Der Algorithmus
kann daher in zwei wesentliche Teilschritte untergliedert werden:
1. Die Bestimmung eines kürzesten Weges von s nach t.
2. Die Vergrößerung des Flusses bis zu einem vorgegebenen Wert bzw. bis
zur Maximalkapazität des Netzwerkes.
Die Teilschritte sind
hiererläutert.
Der Algorithmus endet, wenn ein vorgegebener Fluss in t erreicht ist bzw.
wenn der Fluss in t nicht weiter erhöht werden kann, d.h. die Maximalkapazität
erreicht ist.
Der Fluss im Netzwerk ist nicht optimal, solange sich ein einfacher Zyklus im
Netzwerk finden lässt, mit dem durch Erhöhung des Flusses innerhalb des Zyklus
ein Fluss mit geringeren Kosten entsteht. Deshalb kann die Optimalitäteiner
Lösung praktisch bewiesen werden, indem gezeigt wird, dass der bewertete Inkrementdigraph keinen gerichteten Zyklus negativer Länge besitzt.
DieLaufzeitdes Algorithmus von Busacker und Gowen ist O(m · lλ · logn ) bzw.
O(m · lmax · logm ) mit der vorgegebenen Flussstärke lλ bzw. der Maximalkapazität lmax .
3.2.1
Teilschritte
des
Algorithmus
von Busacker
und Gowen
Nebenpfad: Algorithmus von Busacker und Gowen
Zur Lösung des 1. Teilproblems wird aus dem Netzwerk N ein bewerteter Inkrementdigraph konstruiert, der jede gerichtete Kante (i,j) aus N mit
fij < lij mit der Bewertung cij enthält und für jede gerichtete Kante (i,j) von
10
N mit fij > 0 die umgekehrt gerichtete Kante(j,i) mit der Bewertung −cij dem
Graphen hinzufügt. Im Inkrementdigraphen wird nun mittels eines KürzesteWege-Algorithmus ein kürzester s-t-Weg bestimmt. Dieser ist gleichzeitig ein
kostenminimaler, flussvergrößernder Weg in N.
Auf diesem Weg wird zur Lösung des 2. Teilproblems der Fluss fst bis zur
(auf diesem Weg) maximal möglichen Kapazität erhöht. Mit den aktualisierten
Flüssen wird der Inkrementdigraph neu berechnet und das 1. Teilproblem wieder gelöst.
Dies wird so lange wiederholt, bis ein vorgegebener Fluss in t erreicht ist bzw.
wenn der Fluss in t nicht weiter erhöht werden kann, d.h. die Maximalkapazität
erreicht ist.
11
3.3
Beispiel
Beispiel
Die Dia-Show zeigt den Ablauf des Algorithmus von Busacker und Gowen für ein Netzwerk mit sechs Knoten. Gesucht ist der kostenminimale maximale Fluss zwischen der Quelle s und der Senke t.
Links in jedem Bild ist jeweils der bewertete Inkrementdigraph dargestellt,
in dem der kürzste Weg anhand der Kosten cij bestimmt wird, und rechts wird
das entsprechende Netzwerk mit Flüssen fij , Kapazitäten lij und Kosten cij
gezeigt.
Im ersten Schritt (erstes Bild) wird der kürzeste Pfad im Inkrementdigraphen
zu s-1-3-t ermittelt und der maximal mögliche Fluss im Netzwerk links auf diesem Pfad berechnet. Mit den neu bestimmten Flüssen im Netzwerk kann der
Inkrementdigraph ergänzt werden. Beispielsweise wird die gerichtete Kante 1-s
mit einer Bewertung von -2 neu hinzugefügt, da nun zusätzlich fs1 > 0 gilt. Die
Kante s-1 bleibt erhalten, da weiterhin fs1 < ls1 gültig ist.
Der Algorithmus bricht nach vier Iterationen ab, da kein weiterer flussvergrößernder Pfad mehr gefunden werden kann. Der maximale Fluss ist fs1 = 12.
Die zugehörigen Flusskosten betragen 74.
Auswahl von Pfad s-1-3-t und Belegung mit 5 Einheiten, Kosten c=20
Auswahl von Pfad s-2-4-3-t und Belegung mit 3 Einheiten, Kosten c=24
Auswahl von Pfad s-2-3-t und Belegung mit 2 Einheiten, Kosten c=14
Auswahl von Pfad s-2-4-t und Belegung mit 2 Einheiten, Kosten c=16
Zusammensetzung des maximalen Flusses von 12 Einheiten mit Gesamtkosten von c=74.
12
3.4
Netzwerk-Simplexverfahren
Netzwerk- Das Simplexverfahren kann in einer speziellen Form auf das Problem kostenminiSimplexverfahren maler Flüsse in einem Netzwerk angewendet werden. Das Netzwerk-Simplexverfahren
ist eine sehr effiziente Möglichkeit der Implementierung und führt zu Algorithmen mit einer empirisch ähnlichen oder geringeren Laufzeit als andere MinimalkostenFlussalgorithmen.
Methodenbeschreibung
DasNetzwerk-Simplexverfahren basiert auf dem Simplexverfahren der linearen Optimierung. Es generiert in jedem Iterationsschritt eine zulässige Basislösung und verbessert sukzessive die Basis bis zu einer optimalen Lösung.
Soll auf das Minimalkosten-Flussproblem das Simplexverfahren angewendet werden, so muss eine zulässige Basislösung vorliegen. D.h. es gibt einen zulässigen
Fluss, der außerhalb einer Basis (einer Menge von Bögen, deren Repräsentation
in der Graphmatrix linear unabhängig ist) trivial ist. Trivial heißt in diesem
Zusammenhang, dass der Fluss auf einem Bogen entweder gleich der Minimaloder der Maximalkapazität ist.
Eine Basis im obigen Sinne ist ein spannender Baum im Netzwerk.
Ein zulässiger Fluss ist also genau dann eine Basislösung, wenn es einen spannenden Baum gibt, der alle Bögen mit Flüssen ungleich der Minimal- und Maximalkapazität enthält.
Das Simplexverfahren geht von dieser Basislösung zu einer benachbarten Basislösung über, d.h. zu einer solchen, deren Basis sich von der aktuellen Basis durch die Aufnahme eines Bogens aus den Nichtbasis-Bögen unterscheidet.
Hierdurch wird zum aktuellen Fluss ein Änderungsfluss hinzuaddiert. Für eine
ausführliche Darstellung des Verfahrens wird auf die Beschreibung in Löbel [3]
verwiesen.
13
3.5
Vorteile des
NetzwerkSimplex
Anwendung Netzwerk-Simplex
• Das Netzwerk-Simplexverfahren ist in vielen Fällen effizienter als andere Minimalkosten-Flussalgorithmen.
• Es löst auch sehr große Netzwerkprobleme (¿ 10.000 Knoten und ¿ 1
Mio. Kanten)
• Nebenbedingungen in Form von Flussbeschränkungen, Zu- oder Abflüssen
sind relativ einfach zu integrieren
Nachteile des
NetzwerkSimplex
Anwendung
• Die Implementierung ist relativ aufwändig
• Das Verfahren ist für den Benutzer weniger anschaulich als andere
Minimalkosten-Flussalgorithmen
Das Netzwerk-Simplexverfahren wurde in verschiedenen Codes implementiert
(z.B. RELAX-IV, MCF [1]) und bei unterschiedlichsten Transportproblemen
angewendet (vgl. z.B. [3]).
14
3.6
Out-of-KilterAlgorithmus
Out-of-Kilter-Algorithmus
Etwas aus dem Rahmen fällt der von Fulkerson entwickelte Out-of-Kilter Algorithmus [2].
Zur Lösung des Zirkulationsflussproblems arbeitet dieser mit Pseudoflüssen,
welche die Kapazitätsbeschränkungen verletzen dürfen, und hält die Optimalitätskriterien nicht ein. Der Algorithmus versucht ein Gleichgewicht zwischen
der Einhaltung der Kapazitätsgrenzen und der Erfüllung der Komplementaritätsbedingung des dualen Problems herzustellen.
Methodenbeschreibung
Der Out-of-Kilter-Algorithmus ist ein primal-duales Verfahren, d.h. eine Methode die Lösungen des primalen und des dualen Problems berechnet. Er
kann mit einem beliebigen Zirkulationsfluss in einem Netzwerk initialisiert
werden. Ein Zirkulationsfluss ist dann gegeben, wenn die Summe der Zu- und
Abflüsse in jedem Knoten des Netzwerkes Null ist.
Wird mit einem zulässigen Fluss gestartet, so sind auch alle weiteren, im Verlauf
des Verfahrensermittelten Zirkulationsflüsse zulässig. Der Anfangsfluss muss jedoch nicht notwendigerweise zulässig sein.
Jeder Bogen des Netzwerkes ist entweder in einem guten Zustand z+ (Kilter) oder in einem schlechten Zustand z- (Out of Kilter). Das Ziel des
Algorithmus ist, alle Bögen in einen Zustand z+ und damit ins Gleichgewicht
zu bringen.
Jede Iteration des Algorithmus besteht aus zwei Teilschritten:
In Schritt 1erfolgt ausgehend von einem Bogen im Zustand z- die Suche nach
einem Teilzyklus im Netzwerk, auf dem die Bögen noch nicht im Gleichgewicht
sind.
Im zweiten Schritt werden die Flüsse auf diesem Teilzyklus geändert, so dass
sich der Zustand der Bögen verbessert.
Für eine detaillierte Beschreibung der einzelnen Schritte wird auf die Beschreibung in [2] und [2] verwiesen.
Der Algorithmus endet, wenn kein solcher Teilzyklus mehr gefunden werden
kann. Dann ist ein kostenminimaler Fluss gefunden.
3.6.1
Zustände des
Out-of-KilterAlgorithmus
Nebenpfad: Zustände des Out-of-Kilter-Algorithmus
Im Zustand z+ befindet sich ein Bogen (i,j), wenn:
15
yij > 0, fij = li min
oder yij < 0, fij = li max
j
j
oder yij = 0, li min
≤ fij ≤ li max
j
j
Im Zustand z- befindet sich der Bogen (i,j), wenn:
x≤ yij > 0, fij < li min
(∗) oder yij > 0, fij > li min
oder
j
j
max
yij < 0, fij < li max
oder
y
<
0,
f
<
l
(∗∗)
oder
ij
ij
ij
j
oder yij = 0, fij > li max
yij = 0, fij < li min
j
j
Wobei yij die Opportunitätskosten des dualen Problems sind, fij der
tatsächliche Fluss, und lij die minimalen bzw. maximalen Flüsse auf einem Bogen.
Beispielsweise bedeutet Gleichung (*), dass der tatsächliche Fluss kleiner ist
als der Minimalfluss auf einem Bogen; der Fluss muss somit weiter erhöht werden. Gleichung (**) bedeutet, dass der Fluss auf diesem Bogen erhöht werden
muss, da der Bogen negative Opportunitätskosten besitzt und somit eine Flusserhöhung die Kosten des Flusses verringert.
16
3.7
Anwendung Out-of-Kilter
Laufzeit des
Out-of-KilterAlgorithmus
Die Laufzeit beträgt O(m · n · K) mit K als der Summe der Kilterzahlen des
Ausgangsnetzwerkes.
Die Kilterzahl eines Bogens berechnet sich in Abhängigkeit von dem Zustand
des Bogens als Differenz aus tatsächlichem Fluss und maximal bzw. minimal
zulässigem Fluss.
Vorteile des
Out-of-KilterAlgorithmus
• Der Algorithmus benötigt keinen zusätzlichen Speicherbedarf für das
Netzwerk-Handling. Die Bogenparameter werden in Listen gespeichert.
Nachteile des
Out-of-KilterAlgorithmus
• Der Algorithmus zeigt in der Regel eine sehr langsame Konvergenz zum
Optimum.
Anwendung
Der Out-of-Kilter-Algorithmus war vor allem in den 60er und 70er Jahren sehr
populär, da er der erste spezielle Algorithmus zur Lösung des MinimalkostenFlussproblems war. Da er mit jedem Fluss initialisiert werden kann ist er besonders bei der Durchführung von Sensitivitätsanalysen vorteilhaft.
• Er kann mit jedem beliebigen, zulässigen Fluss initialisiert werden.
• Da in jeder Iteration sehr viele Bögen überprüft werden müssen ist der
Algorithmus nur bedingt für große Probleme geeignet.
17
4
4.1
Algorithmus
von Dijkstra
Kürzeste-Wege-Algorithmen
Algorithmus von Dijkstra
Einer der bekanntesten Algorithmen zur Lösung kürzester-Wege-Probleme ist
der Algorithmus von Dijkstra [1]. Er findet kürzeste Wege von einem
Startknoten zu allen anderen Knoten in einem gerichteten Graphen
mit nichtnegativen Kantenbewertungen.
Methodenbeschreibung
Der Algorithmus von Dijkstra ist ein Markierungsalgorithmus. Ein Knoten j
wird im Verlaufe des Verfahrens vorläufig markiert, sobald eine obere Schranke für die Entfernung vom Startknoten q zu diesem Knoten j berechnet werden
kann. Ein Knoten wird endgültig markiert, wenn ein kürzester Weg von q
nach j gefunden wurde. Der Algorithmus bricht nach maximal n Schritten ab,
wenn alle n Knoten markiert wurden.
Der Algorithmus geht hierbei wie folgt vor:
In einem ersten Schritt werden ausgehend vom Startknoten q dessen nachfolgende Knoten mit ihrer Entfernung cq j zum Startknoten vorläufig mit dj markiert.
In jedem der folgenden Iterationsschritte wird wie folgt vorgegangen:
Unter den vorläufig markierten Knoten wird derjenige Knoten k mit der kleinsten Markierung dk ausgewählt und endgültig markiert. Alle Nachfolger von k,
die noch nicht endgültig markiert sind, werden nun vorläufig markiert. Für diese
vorläufig markierten Knoten wird die Markierung dj durch das Minimum aus
min {dj , dk + ckj } ersetzt.
Der Algorithmus endet, wenn alle Knoten endgültig markiert sind.
18
4.2
Ermittlung
aller kürzesten
Wege
Beispiel für den Dijkstra-Algorithmus
Gegeben sei der, in der Dia-Show dargestellte, bewertete Graph. Es sollen alle
kürzesten Wege ausgehend von Knoten 1 berechnet werden.
Beispielnetzwerk, Knoten 1 ist Startpunkt
Iteration 1: Vorläufiges markieren von Knoten 2 und 5, aktualisieren der
Markierungen
Endgültiges markieren von Knoten 2
Iteration 2: Vorläufiges markieren von Knoten 3 und 4, aktualisieren der
Markierungen
Endgültiges markieren von Knoten 3
Iteration 3: Aktualisieren der Markierung von Knoten 5
Endgültiges markieren von Knoten 5
Iteration 4: Endgültiges markieren von Knoten 4
In Iteration 1 werden die Knoten 2 und 5 vorläufig markiert. Der Knoten 2
wird endgültig markiert, da er die kleinste Bewertung unter allen vorläufig markierten Knoten besitzt.
In Iteration 2 werden die Nachfolgerknoten 3 und 4 von Knoten 2 untersucht.
Da sie noch nicht markiert sind, werden sie in die Liste der vorläufig markierten
Knoten aufgenommen. Die Markierung der Knoten wird aktualisiert, so dass
Knoten 3 die Markierung 4 und Knoten 4 die Markierung 6 als bisher kürzeste
Entfernung zu diesen Knoten erhält. Knoten 3 mit der kleinsten Markierung
aller vorläufig markierten Knoten wird endgültig markiert.
Der Algorithmus endet in Iteration 4, da alle Knoten endgültig markiert sind.
19
Tabellarische
Darstellung
der Iterationen
Oft wird die tabellarische Form verwendet, um die Ergebnisse der einzelnen Iterationen des Dikstra-Algorithmus zusammenzufassen. Dies wird für das obige
Beisp9iel in der folgenden Tabelle dargestellt.
20
4.3
Varianten des Dijkstra-Algorithmus
Sind nur die kürzesten Wege von einem Knoten zu den Knoten einer Knoten(teil)menge zu bestimmen, so wird der Algorithmus beendet, sobald alle Knoten
dieser Teilmenge endgültig markiert wurden.
Der Algorithmus von Ford [4] findet kürzeste Wege von einem Startknoten zu allen anderen Knoten eines beliebig bewerteten Graphen, d.h. es
sind auch negativ bewertete Kanten erlaubt.
Viele Varianten des Dijkstra-Algorithmus versuchen, den Speicher- und Rechenaufwand durch geschickte Implementierung zu verringern. Der ursprüngliche
Algorithmus von Dijkstra benötigt eine Laufzeit von O(n2 ) um den kürzesten
Pfad von einem zu allen anderen Knoten zu suchen und O(n3 ) um die kürzesten
Wege zwischen allen Knotenpaaren zu finden.
Wird der Algorithmus mit einem Heap anstatt einer Liste implementiert um
die Knoten (bzw. die Knotenbewertungen) zu speichern, so kann ein KürzsterWege-Baum in O(n · logn + m) Schritten berechnet werden [5]. Es existiert
noch eine Vielzahl von weitere Implementierungen. Eine gute Übersicht bietet
SCHRIJVER ([5], pp. 96-105).
Anwendung
Der Dijkstra-Algorithmus kann auf alle gerichteten Graphen mit nichtnegativen Kantenbewertungen angewendet werden. Er ist sehr gut für klassische Netzwerke geeignet, in denen sich die Topologie selten ändert wie beispielsweise in der Verkehrsinfrastruktur.
Wenn sich die Topologie jedoch häufig ändert -wie beispielsweise bei mobilen
Routing-Problemen- wird dieses Vorgehen problematisch, da dann der DijkstraAlgorithmus häufig ausgeführt werden muss. Dann sollten besser so genannte
reaktive Routing-Algorithmen angewendet werden, die nur Informationen
über die aktiven Pfade im Netzwerk benötigen. Ein bekannter Vertreter dieser
Klasse ist das Dynamic Source Routing [3].
21
4.4
TripleAlgorithmus
Triple-Algorithmus
Der Tripel-Algorithmus, veröffentlicht von Floyd [2], bestimmt die kürzesten
Wege zwischen allen Knotenpaaren eines Graphen. Um die kürzesten
Wege zwischen allen Knoten zu bestimmen, können auch der Dijkstra-Algorithmus
oder der Algorithmus von Ford für alle Knoten wiederholt werden. Allerdings
haben diese Algorithmen maximale Laufzeiten von O(n2 ) bzw. O(n3 ). Bei nfacher Wiederholung liegt die Laufzeit dementsprechend bei O(n3 ) bzw. O(n4 ).
Eine alternative Lösung sind die so genannten Matrix-Algorithmen, von denen hier exemplarisch der Tripel-Algoritmus vorgestellt wird. Dieser hat eine
Laufzeit von Θ(n3 ).
Methodenbeschreibung
Zur Durchführung des Tripel-Verfahrens werden die Kostenmatrix D mit den
Kantenbewertungen und eine Vorgängermatrix V aufgestellt, welche für jede
Kombination von Knoten den kürzesten Weg zwischen diesen enthält. Die Kostenmatrix D enthält anfänglich nur die Kosten der Kanten im Graphen und
wird im Laufe des Verfahrens um die Kosten der indirekten Wege zwischen den
Knoten erweitert.
Der Algorithmus überprüft alle Tripel (i,j,k) aus den drei Werten Startknoten
i, Endknoten j und Kosten k dahingehend, ob es voni nach j einen günstigeren
als den bisher günstigsten Weg gibt. Wenn dies der Fall ist werden die Einträge
der Matrizen entsprechend geändert.
Zu Beginn des Verfahrens werden zunächst alle Knoten durchlaufen und
als Startknoten festgelegt.
Dann werden für jeden Startknoten nacheinander alle anderen Knoten als Endknoten betrachtet. Es wird für jede Start-Endknotenkombination überprüft, ob
es eine kürzere Strecke über einen Zwischenknoten gibt. Hierfür werden nacheinander alle anderen Knoten getestet. Es sind also n(n-1)(n-2) Gleichungen zu
lösen.
Ist eine Strecke über einen Zwischenknoten kürzer als die bisher bekannte Strecke,
so wird dies in den Matrizen entsprechend geändert.
Nach Abbruch des Algorithmus bezeichnet das Matrixelement vij den Vorgänger
von Knoten ej auf dem kürzesten Weg von ei nach ej .
22
4.5
Beispiel
Beispiel für den Triple-Algorithmus
Für den dargestellten Graphen sind die Entfernungsmatrix und die Kostenmatrix der kürzesten Wege zu berechnen. D0 und V0 sind die Ausgangsmatrizen.
Nach fünf Iterationen bricht der Algorithmus ab und es werden die Ergebnismatrizen ausgegeben:
Die Ergebnismatrizen können folgendermaßen interpretiert werden:
Beispielsweise kann der kürzeste Weg von Knoten 1 (Zeile 1) nach Knoten 5
(Spalte 5) aus der ersten Zeile von V5 abgelesen werden. Der Vorgänger von
Knoten 5 auf diesem Weg ist Knoten 4. Der Vorgänger von Knoten 4 ist Knoten
2 usw. Die Kosten des kürzsten Weges von Knoten 1 nach Knoten 5 betragen
d15 = 18.
23
4.6
Varianten des Triple-Algorithmus
Varianten des
TripleAlgorithmus
Der Algorithmus von Hoffmann und Winograd [6] führt mehrere Iterationsschritt des Triple-Algorithmus in einem Schritt durch. Das Verfahren ist
etwas komplizierter als der Triple-Algorithmus dafür ist die Laufzeit in der Regel kürzer.
Anwendung
Der Tripel-Algorithmus eignet sich zur Bestimmung der kürzesten Wege
zwischen allen Knoten eines ohne Zyklennegativer Länge.
Mittels des Algorithmus können zwar Zyklen negativer Länge im Graphen gefunden werden, dann kann jedoch kein kürzester Weg berechnet werden.
24
4.7
A*Algorithmus
A*-Algorithmus
Der A*-Algorithmus berechnet den kürzesten Weg zwischen einem Startund einem Zielknoten in einem gewichteten Graphen mit beliebiger
Bewertung. Er wird insbesondere bei großen Graphen angewendet und arbeitet auf Basis einer heuristischen Vorgehensweise, um die Suche nach dem
kürzesten Weg in eine plausible Richtung zu lenken [4].
Methodenbeschreibung
Der A*-Algorithmus wird mit einer Distanzmatrix und einer Liste L der
zu untersuchenden Knoten initialisiert. In der Distanzmatrix werden die
Kosten von jedem Knoten zum Startknoten gespeichert und im Verlauf des Verfahrens aktualisiert. Die Liste enthält zu Beginn nur den Startknoten. Um den
kürzesten Weg konstruieren zu können, wird zu jedem Knoten der Vorgängerknoten festgehalten [2].
Mittels einer Schätzfunktion wird für jeden Knoten eine untere Schranke
für die noch zu erwartenden Kosten bis zum Zielknoten geschätzt. Dabei
sollte die Schätzfunktion eine möglichst hohe untere Schranke berechnen, um
die Anzahl der noch zu untersuchenden Pfade möglichst stark einzuschränken.
Ungünstig gewählte Schätzfunktionen können die Laufzeitum den Faktor n
(Knotenanzahl) gegenüber anderen Kürzeste-Wege-Algorithmen erhöhen. Für
Graphen, die auf geographischen Daten beruhen, wird häufig die euklidische
Distanz bis zum Zielknoten als Schätzfunktion verwendet.
Die Kosten in einem Knoten berechnen sich also als Minimum aus der bisherigen Wegekosten vom Startknoten und den geschätzten, zukünftigen Kosten
bis zum Zielknoten (im Unterschied beispielsweise zum Dijkstra-Algorithmus,
bei dem nur die bisher angefallenen Kosten berücksichtigt werden).
In jedem Schritt des Algorithmus wird der Knoten vmin aus der Liste der zu
untersuchenden Knoten entfernt, bei dem die Summe aus den voraussichtlichen Kosten bis zum Zielknoten (mit der Schätzfunktion berechnet) und den
bisherigen Kosten am kleinsten ist. Nun werden die Kosten zum Startknoten
für alle Nachfolger vn von vmin neu berechnet.
Die Knoten vn werden in die Liste L der zu untersuchenden Knoten neu eingefügt, sofern sie dort nicht schon enthalten sind. Sind sie bereits in der Liste enthalten, so werden die Kosten in den Knoten aktualisiert. vmin wird als
Vorgänger eines Knoten vn eingetragen, wenn die neu berechneten Kosten in vn
kleiner sind als der bisher für diesen Knoten eingetragene Wert.
25
Dieses Vorgehen wird so lange wiederholt, bis die Liste L der zu untersuchenden
Knoten leer ist oder keiner der dort enthaltenen Knoten die aktuelle Lösung
verbessern kann.
26
4.8
Anwendung des A*-Algorithmus
Vorteile des
A*Algorithmus
• Der A*-Algorithmus ist auch in großen Graphen (mit vielen Kanten
bzw. Knoten) effizient.
Nachteile des
A*Algorithmus
• Die Berechnung einer optimalen Lösung, d.h. des kürzesten Weges, ist nur
unter bestimmten Annahmen garantiert.
Anwendung
Der A*-Algorithmus ist ein Kürzester-Wege-Algorithmus, der auch auf sehr
große Graphen mit vielen Kanten effizient angewendet werden kann.
• Er findet unter bestimmten Bedingungen mit einer heuristischen Suche
eine optimale Lösung.
• Die Bestimmung einer guten Schätzfunktion ist in vielen Anwendungen
nicht möglich.
Voraussetzung ist jedoch, dass gute Schätzungen über die Entfernungen zum
Zielknoten getroffen werden können, denn je besser die Bewertungsfunktion die
tatsächlichen Kosten abschätzt, desto effizienter ist der Algorithmus [7].
Im Allgemeinen garantiert der A*-Algorithmus keine optimale Lösung. Lediglich
für den Fall, dass die Schätzung für den zukünftigen Weg immer den tatsächlichen Weg unterschätzt, kann bewiesen werden, dass der Algorithmus die optimale Lösung findet. Deshalb wird der A*-Algorithmus häufig bei Verkehrsund Routensuchproblemen angewendet, da hier die Luftlinie eine sehr gute
Schätzfunktion für die zu erwartende Entfernung zum Zielknoten darstellt.
Die Laufzeit des A*-Algorithmus ist O(m+n·logn ). Wenn die Anzahl der Kanten
m im Graphen sehr groß ist, so ist dies effizienter als der Dijkstra-Algorithmus
mit einer Laufzeit O(m · logn ).
Für sehr gute Schätzfunktionen (z.B. die Luftlinie) beträgt die Laufzeit des
A*-Algorithmus im Mittel nur noch Θ(n) [1].
27
4.9
Weitere
KürzesteWegeAlgorithmen
Weitere Kürzeste Wege-Algorithmen
Es existiert eine Fülle von Kürzeste-Wege-Algorithmen, die sich auf spezielle Problemstellungen beziehen, wie beispielsweise Algorithmen für sehr große
Graphen.
Eine gute Übersicht über verschiedenen Implementierungen Kürzester-WegeAlgorithmen bieten Pallottino und Scultella [2]. Im Folgenden werden nur einige
aus der Vielzahl der veröffentlichten Algorithmen beschrieben.
In großen Graphen muss häufig eine Folge von Kürzesten-Wege-Problemen
gelöst werden, die sich nur wenig voneinander unterscheiden, meist
durch die Zuweisung eines neuen Quellknotens oder neuer Kantenbewertungen.
Für diesen Problemtyp wurden spezielle Algorithmen entwickelt, welche eine
vorhandenen Lösung reoptimieren, d.h. die auf einer vorhandenen Lösung basieren und diese an das neue Problem anpassen (vgl. z.B.[3]).
Dynamische Kürzeste-Wege-Probleme berücksichtigen zusätzlich eine dynamische Komponente, meist eine zeitliche Bewertung der Bögen (z.B. die Reisezeit), wobei in der Regel eine Kostenfunktion in Abhängigkeit von der Zeit
aufgestellt wird. Die verschiedenen Algorithmen unterscheide sich grundsätzlich
dadurch, ob die Zeit kontinuierlich oder diskret betrachtet wird und ob Wartezeiten in den Knoten berücksichtigt werden. Wichtige Problem dieses Typs sind
das dynamische Kürzeste-Wege-Problem mit Zeitfenstern oder das KürzesteWege-Problem mit beliebigen Abfahrtszeiten. Für die Beschreibung der einzelnen Algorithmen vgl. z.B. [2] oder [6].
Kürzeste-Wege-Probleme mit Beschränkungen kommen häufig bei Verkehrsproblemen vor, wenn beispielsweise an einer Kreuzung nicht links abgebogen werden darf. Diese Probleme werden meist dadurch gelöst, dass zusätzliche
Kanten eingefügt werden oder ein Weg als eine Folge von Bögen beschrieben
wird [4].
Modelle mit zusätzlichen Kanten können beispielsweise mit dem DijkstraAlgorithmus gelöst werden, wohingegen für Modelle mit einer anderen Definition kürzester Wege spezielle Algorithmen existieren, so genannte arc-label“”
Algorithmen [1].
In vielen Netzwerken müssen mehrere Attribute der Bögen berücksichtigt werden, wie z.B. Kosten, Länge, Unfallrisiko oder Lärmbelastung. Um dem
Rechnung zu tragen werden Kürzeste-Wege-Algorithmen um Komponenten aus
der Optimierung bei mehrfacher Zielsetzung ergänzt. Beispielsweise können die
einzelnen Attribute gewichtet und zu einem Attribut zusammengefasst werden
28
oder einzelne Wege werden nach dem Kriterium der Pareto-Optimalität geprüft
(vgl. z.B. [5]).
29
5
5.1
Minimalgerüst-Algorithmen
Algorithmen von Prim und Kruskal
Einführung
Ein Gerüst in einem Graphen G ist ein, alle n Knoten von G enthaltender,
Baum T mit n-1 Kanten. Ein Minimalgerüst in einem bewerteten Graphen
mit der Bewertungsfunktion c ist ein Gerüst in G mit minimaler Länge. Unter der Länge wird hierbei die Summe der Kantenbewertungen des Baumes T
verstanden. G wird als zusammenhängend vorausgesetzt, da es dann genau ein
Minimalgerüst von G gibt.
Algorithmus
von Prim
Mit dem Algorithmus von Prim [] wird im Graphen G eine Folge von
Bäumen konstruiert, wobei in jeder Iteration dem bisherigen Baum eine Kante E mit kleinster Bewertung so hinzugefügt wird, dass sich wieder ein Baum
ergibt.
Die neu hinzugefügte Kante muss mit einem ihrer beiden Endpunkte V mit dem
bestehenden Baum verbunden werden, der andere Endpunkt darf jedoch nicht
mit dem Baum verbunden sein.
Das Verfahren bricht ab, sobald der Baum n-1 Kanten besitzt und ein Minimalgerüst von G ist. Der Algorithmus von Prim berechnet ein Minimalgerüst
in O(n2 ).
Algorithmus
von Kruskal
Der Algorithmus von Kruskal [] ist der wohl bekannteste Algorithmus zur
Bestimmung von Minimalgerüsten in Graphen.
In einem ersten Iterationsschritt wird die Kante des Graphen G mit der
kleinsten Bewertung ausgewählt. Falls es mehrere solche Kanten gibt wird irgendeine von diesen ausgewählt. Im zweiten Schritt wird die Kante mit der
zweitkleinsten Bewertung ausgewählt, sofern diese Kante mit einem bestehenden Baum keinen Kreis bildet. Das Verfahren bricht nach n-1 Schritten ab. Dann
wurden genau n-1 Kanten ausgewählt.
Da die Konstruktion von Kreisen in jedem Schritt unterbunden wird bilden die
n-1 Kanten einen zusammenhängenden Baum mit minimaler Länge.
Zur effizienten Implementierung des Algorithmus von Kruskal werden zunächst
die n Kanten des Graphen nach aufsteigender Bewertung sortiert. Mit einem
effektiven Sortierverfahren (z.B. in einem Heap) ist der Zeitaufwand hierfür
O(log n). Da der Algorithmus insgesamt n Iterationen benötigt beträgt die gesamte Komplexität O(n · log n).
30
5.2
Weitere MinimalgerüstAlgorithmen
Weitere Algorithmen
Es existieren viele Varianten der oben dargestellten Minimalgerüst-Algorithmen.
Typischerweise beinhalten diese zusätzliche Restriktionen, welche die Struktur
der zulässigen Lösungen einengen.
Chandy und Lo [] behandeln das Problem kapazitierter Minimalgerüste.
Diese besitzen Kapazitäten auf den Kanten des Graphen als zusätzliche Restriktionen eines Netzflussproblems. Eine Ecke des Graphen wird als Senke ausgewählt, die restlichen als Quellen. Dann wird der den kostenminimale Fluss
von den Quellen zur Senke ermittelt. Dieser darf nur entlang der Kanten eines
Minimalgerüstes des Graphen fließen. Da kein effizienter Algorithmus für dieses
Problem existiert müssen Heuristiken eingesetzt werden.
Gabow [] erörtert das Problem beschränkter Knotengrade in Minimalgerüsten, welches in Computer- oder Kommunikationsnetzwerken auftritt. Hier
ist of die Anzahl der mit einem Knoten inzidenten Kanten restringiert. Für den
Fall, dass nur ein Knoten auf diese Weise eingeschränkt ist, existieren Algorithmen mit polynomialer Laufzeit.
Einen Routing-Algorithmus für Minimalgerüste mit minimalen Verzögerungen in Netzwerken beschreiben Salama et al. [].
Das Steinerbaum-Problem ist eines der am meisten diskutierten Probleme
bei Minimalgerüsten. Ziel ist es, einen minimal bewerteten Baum zu finden, der
eine Teilmenge aus den Knoten eines Graphen enthält (und eventuell weitere
als Hilfsknoten). Das Steinerbaum-Problem ist NP-schwer. Für kleiner Probleme
wurden exakte Verfahren entwickelt, für größere Probleme werden Heuristiken
eingesetzt (vgl. z.B. []).
Anwendungsbereiche
Minimalgerüst-Algorithmen werden bei zahlreichen Problemen angewendet, die
mit bewerteten Graphen und Digraphen dargestellt werden können. Einige Beispiele sind:
• Travelling Salesman Probleme
• Clusteranalyse(vgl. z.B. [])
• Entscheidungsbäume (vgl. z.B. [])
• Netzwerkdesign
31
5.3
Literatur
Literaturverzeichnis
Einführende Literatur
Evans, J.R./Minieka, E.: Optimization Algorithms for Networks and Graphs, 2nd ed., Marcel Dekker, New York Basel Hong Kong 1992.Kruskal,
J.B.: On the Shortest Spanning Subtree of a Graph and the Travelling
Salesman Problem, in: Proc. AMS, Vol. 7, 1956, pp. 48-50.Prim, R.C.:
Shortest Connection Networks and Some Generalizations, in: Bell Syst.
Techn. Journal, Vol. 36, 1957, pp. 1389-1401.
Literaturverzeichnis
Weiterführende Literatur
Chandy, K.M./Lo, T.: The Capacitated Minimum Spanning Tree,
in: Networks, Vol. 3, 1973, pp. 173-181.Gabow, H.N.: A Good Algorithm
for Smallest Spanning Trees with a Degree Constraint, in: Networks,
Vol. 8, 1978, pp. 201-208.Murthy, K.V.S: On Growing Better Decision Trees from Data. PhD, Johns Hopkins Univ., Baltimore, 1995.
http://citeseer.ist.psu.edu/murthy96growing.html Salama, H.F./Viniotis,
Y./Reeves, D.S: An Efficient DelayConstrained Minimum Spanning Tree
Heuristic.1996. http://citeseer.ist.psu.edu/salama96efficient.html Winter,
P.: Steiner Problem in Networks: A Survey, in: Networks, Vol. 17, 1987,
pp. 129-167.Zahn, C.T.: Graph-theoretical methods for detecting and
describing gestalt clusters, in: IEEE Trans. Comput. C20, 1971, pp.
68-86.
32
6
6.1
Literatur und Methodenverzeichnis
Literatur zu Maximalfluss-Algorithmen
Literaturverzeichnis
Einführende Literatur
Brandstädt, A.: Graphen und Algorithmen. Teubner, Stuttgart 1994
Neumann, K.: Graphen und Netzwerke, in: Gal, Th.: Grundlagen des
Operations Research Bd. 2, Springer, Berlin Heidelberg New York
1987. Sedgewick, R.: Algoritmen. Addison-Wesley, 2002. Wayne, K.D.:
Generalized Maximum Flow Algorithms, Dissertation, Cornell University
1999, auf URL: http://sherry.ifi.unizh.ch/hoppe95efficient.html.
Literaturverzeichnis
Weiterführende Literatur
Ahuja, R.K.: Algorithms fort he minimax transportation problem.
Naval Research Logistics Quaterly, Vol. 33, 1986, pp. 725-740. Dinic,
E.A.: Algorithm for solution of a problem of maximum flow in networks with power estimation, Soviet Mathematics Doklady, Vol. 11,
1970, pp. 1277-1280. Edmonds, J./Karp, R.M.: Theoretical improvements in algorithmic efficiency for network flow problems, Journal
of the ACM, Vol. 19, No. 2, 1972. Federgruen, , A./Groenevelt, H.:
Preemptive scheduling on uniform machines by network flow techniques, in: Management Science, Vol. 32, 1986, pp. 341-349. Ford,
L.R./Fulkerson, D.R.: Flows in Networks, Princeton University Press,
Princeton 1962. Galil, Z./Naamad, A.: An O(EV log2 V) Algorithm
for the Maximal Flow Problem, in: Journal of Computation System
Science, Vol. 21, 1980, pp. 203-217. Goldberg, V.: Recent Developments
in Maximum Flow Algorithms. Technical Report No. 98-045, NEC
Research Institute, Princeton 1998. N.N.: Solvers for the Maximum
Flow Problem, Links des Zuse-Instituts zu öffentlichen Programmierressourcen, http://elib.zib.de/pub/Packages/mathprog/maxflow/index.html
(25.05.2005).
6.1
Literatur zu Minimalkosten-Flussverfahren
Literaturverzeichnis
Einführende Literatur
33
Ahuja, R.K./Magnati, T.L./Orlin, J.B.: Network Flows, in: Nemhauser, G.L./Rinnooy Kann, A.H.G./Todd, M.J. (eds.): Handbooks in
Operations Research and Management Science - Vol.1 Optimization,
North-Holland, Amsterdam 1989, pp. 287-331. Beisel, P.: Anwendung
der Methoden der Wirtschaftsmathematik, veröffentlichtes Skript zur
Vorlesung an der Universität-Gesamthochschule Wuppertal, 2001, auf
URL:
www.math.uni-wuppertal.de/org/OR/PS-Files/wimakap1.ps,
www.math.uni-wuppertal.de/org/OR/PS-Files/wimakap2.ps
Jensen,
P.A./Barnes, J.W.: Network Flow Programming. John Wiley, New York
Chichester 1980. Neumann, K.: Graphen und Netzwerke, in: Gal, Th.
(Hrsg.): Operations Research - Bd. 2, Springer, Berlin Heidelberg New
York 1987. Zimmermann, H.-J.: Operations Research. Vieweg, Wiesbaden
2005, S. 334-396.
Literaturverzeichnis
Weiterführende Literatur
Bertsekas, D.P./Tseng, P.: RELAX-IV: A faster version of the RELAX code for solving minimum cost flow problems. Technical report
1994. Fulkerson, D.R.: An Out-of-Kilter Method for Solving Minimal Cost Flow Problems, in: SIAM Journal of Applied Mathematics,
Vol. 9, 1961, pp. 18-27. Löbel, A.: Solving large-scale real-world
minimum-cost flow problems by a network simplex method. Technical
Report SC 96-7, Konrad-Zuse-Zentrum für Informationstechnik Berlin
(ZIB), 1996. Auf URL: http://citeseer.ist.psu.edu/lobel96solving.html
N.N.: Solvers fort he Minimum Cost Network Problem, Auf URL:
http://elib.zib.de/pub/Packages/mathprog/mincost/text.en.html
6.1
Literatur zu Kürzeste-Wege-Algorithmen
Literaturverzeichnis
Einführende Literatur
Dijkstra, E.W.: A Note on Two Problems in Connection with Graphs, in: Numerische Mathematik, Vol. 1, 1959, S. 813-822. Floyd,
R.: Algorithm 97: shortest path. Commun. of the ACM Vol. 5, 1962.
Neumann, K.: Graphen und Netzwerke, in: Gal, Th.: Grundlagen des
Operations Research Band 2, Berlin, Heidelberg, New York, Springer
1987. Pearl, J.: Heuristics. Addison-Wesley, Reading 1985, pp. 75-84.
Schrijver, A.: Combinatorial Optimization - Volume A, Springer, Berlin
Heidelberg New York 2002.
34
Literaturverzeichnis
Weiterführende Literatur
Dechter, R./Pearl, J.: Generalized best-first strategies and the optimality
of A*. Technical Report UCLA-ENG-83-19. Cognitive Systems Laboratory, University of California, Los Angeles 1983. Hart, P.E./Nilsson,
N.J./Raphael, B.: Correction to a formal basis for the heuristic determination of minimum cost paths. SIGART Newsletter, Vol. 37, 1972. Johnson,
D./Maltz., D.A.: Dynamic Source Routing in Ad Hoc Wireless Networks,
in Imielski, T. und Korth, H. (Hrsg.): Mobile Computing Band 353.
Boston, MA, 1996, pp. 153-181. Ford, L.R. and Fulkerson, D.R.: Flows in
Networks. Princeton University Press, Princeton 1962. Fredman, M. L./R.
E. Tarjan: Fibonacci heaps and their uses in improved network optimization algorithms, in: Journal of the ACM 34, 1987, pp. 569-615. Hoffmann,
A.J./Winograd, S.: Finding all shortest distances in a directed network,
in: IBM Journal Res. Develop. Vol. 16, 1972, pp. 412-414. Schikuta,
E.: Unterlagen zur Vorlesung Algorithmen und Datenstrukturen-Kapitel
1, Faculty of Computer Science, Universität Wien 2005, auf URL:
www.pri.univie.ac.at/ schiki/unterlagen/AD/Kapitel1.pdf
6.1
Literatur zu Minimalgerüst-Algorithmen
Literaturverzeichnis
Einführende Literatur
Gallo, G./Pallottino, S.: Shortest path algorithms, in: Annals of
Operations Research 13, 1998, pp. 3-79. Pallottino, S./Scutella, M.G.:
Shortest Path Algorithms in Transportation Models: classical and
innovative aspects, Universit de Pisa, Dipart. Di Informatica, Technical
Report TR-97-06, 1997.
Literaturverzeichnis
Weiterführende Literatur
De La Barra, T.: Integrated land use and transport modelling. Cambridge
Univ. Press 1989. Desrochers, M./Soumis, F.: A generalized permanent
labelling algorithm for the shortest path problem with time windows,
in: INFOR Vol. 26, 1988, pp. 191-212. Gallo, G./Pallottino, S.: A new
algorithm to find the shortest paths between all pairs of nodes, in:
Discrete Applied Mathematics, Vol. 4, 1982, pp. 23-35. Kirby, R.F./Potts,
R.B.: The minimum route problem for networks with turn penalties and
35
prohibitions, in: Transportation Research Vol. 3, 1969, pp. 397-408. Mote,
J./Murthy, I./Olson, D.: A parametric approach to solving bicriterion
shortest path problems, in: European Journal of Operational Research
Vol. 53, 1991, pp. 81-92. Nachtigall, K.: Time depending shortest-path
problems with applications to railway networks, in: European Journal of
Operational Research Vol. 83, 1995, pp. 154-166.
6.1
Methoden
Verzeichnis der erläuterten Methoden
A*-Algorithmus
Algorithmus von Busacker und Gowen
Algorithmus von Chandy und Low
Dijkstra-Algorithmus
Algorithmus von Dinic
Algorithmus von Edmonds-Karp
Algorithmus von Ford
Ford-Fulkerson-Algorithmus
Algorithmus von Gabow
Algorithmus von Galil und Naamad
Algorithmus von Hoffmann und Winograd
Algorithmus von Kruskal
Algorithmus von Prim
Netzwerk-Simplexverfahren
Out-of-Kilter-Algorithmus
Triple-Algorithmus
36
Herunterladen