Seminarvortrag “Flüsse, Schnitte, bipartite Abbildungen”

Werbung
Seminarvortrag
“Flüsse, Schnitte, bipartite Abbildungen”
von
Adrian J. Merkl
E­Mail: [email protected]
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
1
Übersicht
Motivation / Einführung
Algorithmen für maximalen Fluss
Ford­Fulkerson
Preflow­Push
Maximaler Fluss bei minimalen Kosten
Minimaler Schnitt
Max­Flow Min­Cut
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
2
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Das Vertriebsproblem
4
Produzenten
4
2/2
Zwischenhändler
6
3/4
5/5
Kosten
4/1
1/3
Produktion
3/2
1/4
1/4
Kapazität
2/6
6/6
3/4
4/3
Geschäfte
Verbrauch
7
31.05.2006
3
Seminar "Hallo Welt!" für Fortgeschrittene
4
3
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Suche nach Engstellen im Straßennetz
1/3
2/2
2/2
1/1
q
s
1/1
2/3
1/1
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
2/3
Durchschnittliches Verkehrsaufkommen
Kapazität
4
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Tanzpaarbildung
Mädchen
Jungen
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
5
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Netzwerk N = (V, E, q, s, c):
gerichteter Graph ohne Mehrfachkanten Quelle q und Senke s aus der Menge der Knoten V
Kapazitätsfunktion c, die jeder Kante (u,v) aus E eine Kapazität c(u,v) aus dem Bereich der nicht negativen ganzen Zahlen zuweist.
1/3
2/2
2/2
1/1
q
s
2/3
31.05.2006
1/1
1/1
2/3
Seminar "Hallo Welt!" für Fortgeschrittene
6
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Ein q­s­Fluss ist eine Funktion f, die von den Kanten im Netzwerk in die Menge der nicht negativen ganzen Zahlen abbildet. Dabei müssen für einen zulässigen Fluss folgende Bedingungen erfüllt sein:
∀u,v ∈ V: f(u,v) ≤ c(u,v)
(Kantenfluss maximal so groß wie Kapazität)
∀u,v ∈ V \ {q,s}: ∑ f(u,v) = 0
(Summe der Zu­ und Abflüsse der inneren Knoten ist 0)
∀u,v ∈ V: (Entgegengesetzte Flüsse unterscheiden sich durch das Vorzeichen)
f(u,v) = ­ f(v,u)
Der Wert eines q­s­Flusses ist die Summe der eingehenden abzüglich der ausgehenden Belegungen der Senke s bzw. die ausgehenden Belegungen abzüglich der eingehenden Belegungen der Quelle q.
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
7
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Als Residualgraph oder Restnetzwerk eines Graphen G wird ein Graph G ' bezeichnet, der die übrigen Kantenkapazitäten anzeigt, nachdem ein Fluss angelegt wurde. Zwischen den Knoten V von G ' befinden sich nun Residualkanten, die die noch nicht genutzte Kantenkapazität anzeigen und entgegengesetzt gerichtete Kanten, die die bereits genutzte Kantenkapazität anzeigen.
q
2/3
s
1
q
s
2
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
Fluss / Kantenkapazität
Restkapazität
Kapazität für den Rückfluss
8
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Existiert in G ' ein Pfad p zwischen Quelle q und Senke s in Richtung s, so nennen wir diesen augmentierten Pfad (augmented path). Dieser aus Residualkanten bestehende Pfad gibt einen weiteren möglichen Fluss an, der im Algorithmus von Ford und Fulkerson zur Verbesserung des maximalen Flusses genutzt wird. Erst wenn keine augmentierten Pfade mehr existieren, wurde der maximale Fluss ermittelt.
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
9
Zwischenstand
Motivation / Einführung
Algorithmen für maximalen Fluss
Ford­Fulkerson
Preflow­Push
Maximaler Fluss bei minimalen Kosten
Minimaler Schnitt
Max­Flow Min­Cut
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
10
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Berechnung des maximalen (zulässigen) Flusses
Gegeben sei ein Netzwerk N = (V,E,q,s,c)
Finde unter den Bedingungen eines zulässigen Flusses denjenigen Fluss von q nach s, dessen Wert maximal ist.
Algorithmus­Idee von L. R. Ford und D. R. Fulkerson
1
2
3 4 5
31.05.2006
Fluss = leerer Fluss
solange es in N einen Weg P von q nach s gibt
erweitere Fluss mit einem Fluss über P
N = der Residualgraph von N und Fluss über P
return Fluss
Seminar "Hallo Welt!" für Fortgeschrittene
11
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
ford_fulkerson(flow_graph *g, int source, int sink) {
int volume;
/* Flussvolumen */
add_residual_edges(g);
initialize_search(g);
bfs(g,source);
/* Pfadsuche */
volume = path_volume(g, source, sink, parent); // max. Volumen des Pfades while (volume > 0) {
/* aktualisiert Fluss und Residualgraph */
augment_path(g,source,sink,parent,volume); initialize_search(g);
bfs(g,source);
volume = path_volume(g, source, sink, parent);
}
}
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
12
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Ford­Fulkerson worst case (jeder Pfad hat maximalen Fluss 1  #Pfade = maxFlowgesamt)
1)
2)
109
9
10
q
10
9
10
31.05.2006
10
1
1
s
10
1
s
1
109
109­1
6)
109­1
1
q
1
1
109­1
q
9
109­1
9
109
1
s
1
5)
109­1
109
q
109
4)
109­1
109
9
s
1
109
q
3)
109­1
1
1
109­1
s
1
109­1
Seminar "Hallo Welt!" für Fortgeschrittene
q
109­1
109­1
1
1
1
1
s
1
109­1
13
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Preflow­Push­Algorithmus (im Folgenden PfP abgekürzt)
erlaubt temporär mehr Eingangs­ als Ausgangsfluss an einem Knoten,
maximiert zuerst den Eingangsfluss eines Knotens (preflow),
leitet dann den überzähligen Fluss über die Ausgangskanten weiter oder über die Eingangskante zurück (push)
und verwaltet aktive Knoten in einer Queue (FIFO, Stack, Priority...).
Der Knoten K ist dann aktiv, wenn gilt: ZuflussK != AbflussK
solange noch aktive Knoten vorhanden sind, wird ein Knoten der Queue entnommen und der überzählige Fluss umgeleitet
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
14
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Wie bei Ford­Fulkerson wird auch bei PfP mit Residual­Netzwerken gearbeitet:
Über Kanten im Residual­Netzwerk kann der überzählige Fluss abgeleitet werden.
q
2/3
s
1
q
s
2
31.05.2006
Fluss / Kantenkapazität
Restkapazität
Kapazität für den Rückfluss
Seminar "Hallo Welt!" für Fortgeschrittene
15
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Auswahl der Kanten erfolgt durch eine Höhenfunktion:
Initialisierung der Höhe der Senke: h(s) = 0
Initialisierung der Höhe der restlichen Knoten: h(u) = Kürzester Pfad von u zu s
für jede Kante (u,v) ist der kürzeste Pfad von u nach s kleiner oder gleich dem kürzesten Pfad von v nach s plus 1: h(u) ≤ h(v) + 1
1 q
h(u) < h(q)  Überzähliger Fluss fließt zur Senke
2
3
4
5
h(u) > h(q)  Überzähliger Fluss fließt zur Quelle
v 1
h ( v ) 3
31.05.2006
2
2
3
2
4
1
Seminar "Hallo Welt!" für Fortgeschrittene
5
1
6
0
6
s
16
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Grundidee des PfP
1 solange es einen aktiven Knoten K gibt
2
wenn es eine geeignete Kante e gibt
3
leite überzähligen Fluss über e ab
4 ansonsten
5
erhöhe die Höhe von K
6
wenn ZuflussK gleich AbflussK
7
deaktiviere K
Was ist eine geeignete Kante?
Für Kante (u,v) muss gelten: h(u) = h(v) +1
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
17
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Aktive Knoten:
Kante
0­1
1­2
1­3
2­4
3­4
Kapazität
4
3
3
2
2
h(3) wird erhöht!
Rücklauf zu 1
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
18
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
preflow_push(flow_graph *g, int source, int sink) {
queue q; edge *e;
init_heights();
start_flow();
/* Höhen initialisieren */
/* Quellabfluss ins Netzwerk schicken */
while (! q.empty()){
vertex *u = q.dequeue();
if ((e = find_legal_edge(u)) != NULL) push_flow(e);
else lift(u);
if (u­>inflow != u­>outflow) q.enqueue(u);
}
}
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
19
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Laufzeiten
Ford­Fulkerson
O(M∗(V+E))
mit Edmonds­Karp­Strategie: Erweiterungspfad ist immer der Kürzestmögliche (Breitensuche): O(V∗E²)
Preflow­Push mit FIFO­Queue
mit implizitem Residual­Graphen: O(V²∗E)
immer der höchste aktive Knoten: O(V²∗√E)
mit explizitem Residual­Graphen (großer Programmieraufwand): O(V³) M = maximaler Fluss, V = Anzahl Knoten, E = Anzahl Kanten
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
20
Zwischenstand
Motivation / Einführung
Algorithmen für maximalen Fluss
Ford­Fulkerson
Preflow­Push
Maximaler Fluss bei minimalen Kosten
Minimaler Schnitt
Max­Flow Min­Cut
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
21
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
U.U. gibt es mehrere Möglichkeiten für maximale Flüsse, allerdings können Kanten Kosten zugeschrieben werden.
Welche Möglichkeit ist dann die Günstigste?
Gesamtkosten = ∑ (fluss(e)∗kosten(e)) ∀ e ∈ E
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
22
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Erweiterung des Residualnetzwerkes mit Kosten
q
2 / 3 / 15
s
1 / 15
q
s
2 / ­15
Fluss / Kantenkapazität / Kosten
Restkapazität / Kosten
Kapazität für den Rückfluss / Kosten
Ein maximaler Fluss hat minimale Kosten genau dann, wenn im Restnetzwerk keine negativen (Kosten)Zyklen existieren!
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
23
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Algorithmus­Idee:
Suche einen maximalen Fluss.
(a)
Erhöhe den Fluss in den negativen Kostenzyklen so lange,
(b)
bis keiner mehr vorhanden ist.
Zykleneliminierung
(a) Ford­Fulkerson oder Preflow­Push finden maximalen Fluss
(b) Bellman­Ford oder Floyd finden negative Zyklen
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
24
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Implementation
maxflow(); /* berechne den maximalen Fluss */
network residual = get_maxflow_residual_network(); /* berechne Restnetzwerk */
while ((cycle = residual.find_negative_cycle()) != NULL){
residual.augment_along_cycle();
}
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
25
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Probleme
Suche nach negativen Zyklen wird immer wieder von vorne begonnen.
Es wird der zuerst gefundene Zyklus verwendet.
Bessere Alternative: Netzwerk Simplex Algorithmus!
Nachzulesen hier: http://www2.informatik.uni­erlangen.de/Lehre/WS200506/Graphen/08­NetworkFlowsII.pdf
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
26
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Es geht auch ohne vorherige Berechnung des maximalen Flusses:
Füge Dummykante zwischen Quelle und Senke ins Netzwerk ein
Sei Fluss und Kapazität dieser Kante höher als der maximale Fluss
z.B. größer als die Kapazität der von q ausgehenden Kanten
Seien die Kosten dieser Kante höher als jeder andere Pfad im Netzwerk
z.B. V∗maxcost
Der Algorithmus nimmt so viel Fluss wie möglich aus der Dummykante
Der endgültige Fluss (ohne Dummykante) ist ein maximaler Fluss mit minimalen Kosten!
Gesamtlaufzeit: O(V³KM)
M = maximale Kapazität, K = maximale Kosten, V = Anzahl der Knoten
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
27
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Beispiel – Folie 1
q
q
0/3/1
0/3/3
3/1
3/3
7/7/100
0/2/1
0/2/1
0/1/4
0/2/2
7/­100
2/1
0/2/2
2/1
1/4
2/2
0/2/1
2/2
2/1
s
s
Beschriftung: Fluss / Kapazität / Kosten
Residualnetzwerk Kapazität / Kosten
31.05.2006
Dummykante hat Fluss 7
Fluss im Netzwerk = 0
Kosten = 700
Seminar "Hallo Welt!" für Fortgeschrittene
28
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Beispiel – Folie 2
q
q
3/1
3/3
1/1
3/3
2/­1
7/­100
2/1
2/2
2/1
1/4
2/2
5/­100
2/1
2/1
2/100
2/­2
2/1
1/4
2/2
2/­1
s
s
Negativer Kostenzyklus
Residualnetzwerk Kapazität / Kosten
31.05.2006
Dummykante hat Fluss 5
Fluss im Netzwerk = 2
Kosten = 508
Seminar "Hallo Welt!" für Fortgeschrittene
29
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Beispiel – Folie 3
q
q
1/1
3/3
2/­1
2/­1
2/­3
5/­100
2/1
2/100
1/4
2/2
3/­100
2/­2
2/1
2/­1
1/1
1/3
2/­1 4/100
2/­2
2/1
1/4
2/­2
2/­1
s
s
Negativer Kostenzyklus
Residualnetzwerk Kapazität / Kosten
31.05.2006
Dummykante hat Fluss 3
Fluss im Netzwerk = 4
Kosten = 320
Seminar "Hallo Welt!" für Fortgeschrittene
30
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Beispiel – Zusammenfassung
Beschriftung: Fluss / Kapazität / Kosten
q
q
0/3/1
0/3/3
0/2/1
0/2/1
0/1/4
0/2/2
0/2/1
s
Dummykante hat Fluss 7
Fluss im Netzwerk = 0
Kosten = 700
31.05.2006
2/3/1
2/3/3
7/7/100
q
2/3/1
2/3/3
3/7/100
0/2/2
2/2/1
0/2/1
0/1/4
2/2/2
2/2/2
2/2/1
s
Dummykante hat Fluss 3
Fluss im Netzwerk = 4
Kosten = 320
Seminar "Hallo Welt!" für Fortgeschrittene
2/2/1
0/2/1
0/1/4
2/2/2
2/2/2
2/2/1
s
Dummykante entfernt
Fluss im Netzwerk = 4
Kosten = 20
31
Zwischenstand
Motivation / Einführung
Algorithmen für maximalen Fluss
Ford­Fulkerson
Preflow­Push
Maximaler Fluss bei minimalen Kosten
Minimaler Schnitt
Max­Flow Min­Cut
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
32
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Max­Flow Min­Cut Theorem
Der maximale Fluss durch ein Netzwerk kann nicht größer sein als die Kapazität eines beliebigen (und somit auch des minimalen) Schnitts.
Ein q­s­Schnitt ist ein Schnitt in einem q­s­Graphen, der die Quelle q in der einen Teilmenge, die Senke s in der anderen platziert.
Ein minimaler q­s­Schnitt ist ein q­s­Schnitt, dessen Kanten die minimal mögliche Kapazität besitzen.
Der Fluss durch einen q­s­Schnitt entspricht dem Fluss von der Quelle zur Senke.
Der maximale Fluss durch einen q­s­Graphen entspricht der minimalen Kapazität aller q­s­Schnitte.
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
33
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Beispiel
1/3
1/3
2/2
2/2
2/2
1/1
q
s
1/1
2/3
2/3
1/1
q
s
1/1
2/3
1/1
2/3
1/1
4
6
Normaler Schnitt
MaxFlow < Cut
31.05.2006
2/2
Seminar "Hallo Welt!" für Fortgeschrittene
Minimaler Schnitt
MaxFlow = Cut
34
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Wie findet man einen minimalen Schnitt eines Netzwerkes?
Berechne den maximalen Fluss. (Ford­Fulkerson oder Preflow­Push)
Ziehe einen Schnitt durch alle Kanten, deren Fluss maximal ist.
Markiere dazu immer die erste Kante mit Fluss = Kapazität auf einem q­s­Pfad.
1/3
2/2
2/2
1/1
q
s
1/1
2/3
2/3
1/1
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
35
Min­Cut Algorithmusidee
berechne maxFlow mit folgender Erweiterung
markiere auf jedem augmentierten Pfad p die früheste Kante e mit Fluss gleich Kapazität
lege einen Schnitt t durch alle markierten Kanten
return t
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
36
Zwischenstand
Motivation / Einführung
Algorithmen für maximalen Fluss
Ford­Fulkerson
Preflow­Push
Maximaler Fluss bei minimalen Kosten
Minimaler Schnitt
Max­Flow Min­Cut
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
37
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Ein einfacher Graph G = (V,E) heißt in der Graphentheorie bipartit, falls sich seine Knoten in zwei disjunkte Teilmengen A und B aufteilen lassen, so dass zwischen den Knoten innerhalb beider Teilmengen keine Kanten verlaufen.
Das heißt, für eine Kante (u,v) ∈ E gilt entweder u ∈ A und v ∈ B
oder umgekehrt.
Mädchen (A)
Die Menge {A,B} bezeichnet man dann als Bipartition des Graphen G.
Jungen (B)
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
38
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Der Graph G heißt vollständig bipartit, falls eine Bipartition {A,B} existiert, für die für jedes Paar {a,b} mit a ∈ A und b ∈ B die Kante (a,b) zu E gehört (d.h. jeder Knoten aus A ist mit jedem Knoten aus B verbunden, wie in der Graphik unten zu sehen). Einen solchen Graphen bezeichnet man auch als Km,n, wobei m und n die Anzahl der Knoten von A bzw. B sind.
Beispiel eines K4,3­Graphen
Mädchen (A)
Jungen (B)
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
39
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Problemstellung: Maximales Matching
Maximale Anzahl von paarweise nicht­
benachbarten Kanten in einem bipartiten Graphen
q
Mädchen (A)
Berechnung
Hinzufügen einer globalen Quelle q und einer globalen Senke s
Zuweisung der Kapazität 1 an alle Kanten
Berechnung des maximalen Flusses
Jungen (B)
Durchflossene Kanten sind Teil des Matching.
s
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
40
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Anwendung des MaxFlow auf
3/4
Graphen mit Knotenkapazitätsbeschränkung
1
2
Kapazität
Kosten
3/4
4 2
1
4/1 2/5
5/5
3
3/2
Knotenkapazität
3
0/4
0/2
2
2
4/1 2/5
3
3/2
1/4
1/4
4 4
3/4
5
6
4
3
0/4
2/2
Lösung: Hinzufügen von Kanten mit Kapazität = Knotenkapazität
31.05.2006
5/5
Seminar "Hallo Welt!" für Fortgeschrittene
5
4
3/4
5
6
0/3
2/2
41
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Anwendung des MaxFlow auf
Graphen mit maximaler Quellen­ und Senkenkapazität
q
0/4
Quellenkapazität
Kapazität
3/4
Kosten
2
1 4
4/1 2/5
3/4
5/5
2
3
3/2
1/4
4
3/4
3
3
4/1 2/5
1/4
4
3/4
2/2
5
6
Seminar "Hallo Welt!" für Fortgeschrittene
2/2
0/3
Senkenkapazität
Lösung: Hinzufügen von Quelle / Senke mit Kapazität = Knotenkapazität
31.05.2006
5/5
3/2
5
6
1
s
42
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Anwendung des MaxFlow auf
q
Graphen mit mehreren Quellen und/oder Senken
4
4
2/2
1/3
3/2
Quellenkapazität
2/2
Kapazität
4/1
1/4
1/4
1/3
3/2
2/6
6/6
7
5/5
3/4
4/1
1/4
1/4
2/6
3/4
Kosten
4/3
3
4
Senkenkapazität
Lösung: Hinzufügen von globaler Quelle / Senke
31.05.2006
0/6
0/4
6
3/4
5/5
0/4
6/6
0/7
Seminar "Hallo Welt!" für Fortgeschrittene
4/3
3/4
0/3
s
0/4
43
Zwischenstand
Motivation / Einführung
Algorithmen für maximalen Fluss
Ford­Fulkerson
Preflow­Push
Maximaler Fluss bei minimalen Kosten
Minimaler Schnitt
Max­Flow Min­Cut
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
44
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Mit Hilfe von Ford­Fulkerson oder Preflow­Push kann man den maximalen Fluss in einem einfachen Netzwerk bestimmen.
Durch Elimination von negativen Kostenzyklen kann man die Kosten minimieren.
Sobald ein maximaler Fluss bekannt ist, findet man relativ leicht einen minimalen Schnitt eines Netzwerkes.
Netzwerke mit Knotenkapazitätsbeschränkungen, mit mehreren Quellen / Zielen und bipartite Graphen kann man auf einfache Netzwerke reduzieren.
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
45
Motivation / Einführung
Algorithmen für maximalen Fluss
Maximaler Fluss mit minimalen Kosten
Minimaler Schnitt
Bipartite Graphen und weitere Reduzierungen
Zusammenfassung
Noch offene
Fragen?
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
46
Quellen
Seminarvortrag “Flüsse, Schnitte, bipartite Abbildungen” 2004, Tobias Limmer
Seminarvortrag “Flüsse, Schnitte, bipartite Abbildungen” 2005, Tarek Bezold
Vorlesungsfolien “Algorithmen auf Graphen” WS 2005/2006, Ingrid Fischer & Thorsten Meinl
Robert Sedgewick: Algorithms in Java, 3rd Edition
http://de.wikipedia.org/wiki/Bipartit
http://de.wikipedia.org/wiki/Fl%C3%BCsse_und_Schnitte_in_Netzwerken
Ford­Fulkerson Implementation vollständig:
http://www.cs.sunysb.edu/~skiena/392/programs/netflow.c
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
47
Weiterführende Links
Nützliches Applet zum Veranschaulichen und Herumspielen
http://links.math.rpi.edu/applets/appindex/graphtheory.html
Auszüge aus verschiedenen Büchern u.a. zum Thema Graphentheorie
http://oopweb.com/Algorithms/Files/Algorithms.html
Vorlesungsfolien “Algorithmen auf Graphen” WS 2005/2006, Ingrid Fischer & Thorsten Meinl
http://www2.informatik.uni­erlangen.de/Lehre/WS200506/Graphen/
Verschiedene Links zu Implementationen von Graphalgorithmen
http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK4/NODE167.HTM
31.05.2006
Seminar "Hallo Welt!" für Fortgeschrittene
48
Herunterladen