Vorlesung OR

Werbung
Vorlesung OR
Prof. M. Voigt
31. Mai 2017
1
Einführung in die Graphentheorie
1.1
Grundbegriffe, Bezeichnungen
1. Ein (endlicher) Graph G = (V, E) ist eindeutig bestimmt
durch
(a) V = V (G): endliche, nicht-leere Menge
Knotenpunktmenge von G genannt
(b) E = E(G) ⊆ V × V : endliche Menge - Kantenmenge
von G genannt
2. Ist e ∈ E(G) mit e = (x, y) für x, y ∈ V = V (G) so sagen
wir
(a) x und y sind adjacent (benachbart) in G
(b) e verbindet x und y in G
(c) x und y sind Endknotenpunkte von e bzw. inzident mit
der Kante e
kurz: e = xy oder e = yx
1
3. Sei e1 ̸= e2 und e1 = xy, e2 = xy. Dann heißen e1 und e2
parallele Kanten
4. e = xx heißt Schlinge an x.
5. Ein Graph ohne Schlingen und parallele Kanten heißt
schlichter Graph
6. Der Grad oder die Valenz d(x) = dG (x) von x ∈ V (G) ist die
Zahl der zu x inzidenten Kanten. Dabei zählen Schlingen
doppelt.
Ein Knoten mit der Valenz 0 heißt isolierter Knoten. Der
Maximalgrad von G ist ∆(G) := max{d(x) : x ∈ V }. Der
Minimalgrad von G ist δ(G) := min{d(x) : x ∈ V }.
7. H ∼
= G ( H ist isomorph zu G), falls es eine bijektive
Abbildung f : V (H) → V (G) gibt mit xy ∈ E(H) ⇐⇒
f (x)f (y) ∈ E(G). Man nennt f dann einen Isomorphismus
von H auf G.
8. Ein Graph H = (V1 , E1 ) heißt Untergraph von G = (V, E),
sofern V1 ⊆ V und E1 ⊆ E.
9. G = (V, E) heißt leerer Graph ⇐⇒ E = ∅
10. G heißt vollständiger Graph, wenn jeder Knoten von G zu
jedem anderen Knoten von G benachbart ist.
Der vollständige Graph mit n Knoten wird mit Kn bezeichnet.
11. G = (V, E), F = (x1 , e1 , x2 , e2 , . . . , xr−1 , er−1 , xr , er , xr+1 ),
x1 , . . . , xr+1 ∈ V (G), e1 , . . . , er ∈ E(G)
2
(a) F mit ei = xi−1 xi ∀i = 1, . . . , r heißt Kantenfolge in G
F verbindet den Anfangsknoten x1 mit dem Endknoten
xr+1 . F ist (x1 , xr )-Kantenfolge.
Länge(F )=r (Anzahl der Kanten)
F heißt offen ⇐⇒ x1 ̸= xr+1 , F heißt geschlossen ⇐⇒
x1 = xr+1 .
(b) F heißt Kantenzug in G ⇐⇒ F ist Kantenfolge, dessen
Kanten verschieden sind.
(c) F heißt (einfacher) Weg in G ⇐⇒ F ist offener Kantenzug dessen Knotenpunkte verschieden sind.
(d) F heißt Kreis in G ⇐⇒ F ist geschlossener Kantenzug, dessen Knoten mit Ausnahme von Anfangs- und
Endknoten verschieden sind.
(e) Eine Kante e = xy mit {x, y} ∈ {x1 , . . . , xr+1 } heißt
Sehne, sofern e ̸∈ {e1 , . . . , er }
12. G heißt zusammenhängend ⇐⇒ je zwei Knoten von G sind
durch eine Kantenfolge in G verbunden.
13. H heißt Komponente von G ⇐⇒ H ist maximaler zusammenhängender Untergraph von G.
3
1.2
Darstellung von Graphen im Computer
(1) G = (V, E) sei ein schlichter Graph mit V = {x1 , . . . , xn }.
Dann heißt A = (aij ) i, j = 1, . . . , n mit
{
1 f alls xi xj ∈ E
aij =
0 sonst
Adjazenzmatrix von G.
(2) G = (V, E) sei ein schlichter Graph mit V = {x1 , . . . , xn }
und E = {e1 , . . . , em }. Dann heißt B = (bij ) i =
1, . . . , n, j = 1, . . . , m mit
{
1 f alls xi Endknoten von ej
bij =
0 sonst
Inzidenzmatrix von G.
(3) In einer Adjazenzliste wird für jeden Knoten x die Liste Lx
der zu x inzidenten Kanten durch Angabe der jeweiligen
Endknoten (Nachbarn von x) beschrieben:
Knoten Liste der N achbarn
4
1.3
Bäume
Definition:
G heißt Wald ⇐⇒ G enthält keinen Kreis (G ist kreisfrei).
G heißt Baum ⇐⇒ G ist zusammenhängend und kreisfrei.
Ein Knoten x ∈ V heißt Blatt ⇐⇒ d(x) = 1
Satz 1.1 Es sei G = (V, E) ein Graph mit |V | = n ≥ 1. Dann
gilt G ist Baum ⇔ G ist kreisfrei und |E| = n − 1
2
2.1
Algorithmen auf Graphen
Minimalgerüste
Beispiele: Serie 1, Aufgabe 2, Telekomnetz Baden-Würtemberg
Definition: Sei G = (V, E) ein Graph. Ein Untergraph T =
(V ′ , E ′ ) heißt Gerüst von G, falls V = V ′ , E ′ ⊆ E und T ist ein
Baum.
Satz 2.1 Der vollständige Graph Kn mit V (Kn ) = {1, . . . , n}
und E(Kn ) = {ij ; 1 ≤ i < j ≤ n} hat nn−2 Gerüste.
s. Hausaufgabe: K4 hat 16 Gerüste.
K20 hat 2018 = 2, 62... · 1023 Gerüste.
K50 hat 5048 = 3, 55... · 1081 Gerüste.
Problem:
Gegeben: zusammenhängender schlichter Graph G, Kantengewichtsfunktion f : E(G) → R
∑
Gesucht: Ein Gerüst T von G mit f (T ) :=
f (e) → min
e∈E(T )
5
Bezeichnung: Ein Gerüst T0 von G wird Minimalgerüst (minimum spanning tree) von (G, f ) (oder kürzer von G) genannt,
falls f (T0 ) ≤ f (T ) ist, für alle Gerüste T von G.
f wird auch kurz Kostenfunktion genannt.
3
2
2
5
4
8
4
5
4
1
3
1
3
3
1
2
6
2
9
5
8
7
8
9
Beispiel:
Satz 2.2 Sei G ein zusammenhängender Graph mit Kostenfunktion f : E → R. Ferner sei u ⊆ V und e0 ∈ E eine Kante
zwischen U und V \ U mit minimalem Gewicht. Dann existiert
ein Minimalgerüst T0 , das die Kante e0 enthält.
Algorithmus 2.1 (Prim)
Eingabe: zusammenhängender Graph G = (V, E) mit V =
{1, . . . , n} und eine Kostenfunktion f : E → R mit f (ij) = ∞
⇐⇒ ij ̸∈ E.
1. Initialisierung: Setze t := 1; B := ∅; U := {1};
for all i, j ∈ V, i ̸= j, setze d(ij) = f (ij); (technische
Maßnahme)
2. bestimme einen Knoten u ∈ V \ U mit
d(tu) = min{d(tv) ; v ∈ V \ U };
(d(tv) ist der minimale Abstand eines Knoten v ∈ V \ U zu
einem Knoten t ∈ U )
6
bestimme eine Kante e := xu ∈ E mit f (e) = d(tu) und
x ∈ U ; (da G zusammenhängend ist, ist d(tu) endlich)
3. B := B ∪ {e};
4. U := U ∪ {u};
5. Falls U ̸= V : Neuberechnung von d(tv)
für alle v ∈ V \ U setze d(tv) := min{d(tv), d(uv)}; (Dies
ist der Abstand von v zum nächstgelegenen Knoten aus U )
6. Wiederhole die letzten 4 Schritte bis U = V ist
Ausgabe: Die Kantenmenge B eines Minimalgerüstes von G
Bemerkung: Der Algorithmus ist ein Beispiel für die sogenannte Greedy-Methode (greedy = gefräßig, raffgierig), die in jedem
Schritt unter Berücksichtigung der Nebenbedingungen das lokal
beste Element auswählt.
7
3
2
2
5
4
8
4
5
4
1
3
1
3
2
2
3
1
6
9
5
8
7
8
9
Starte mit t = 1
v ∈V \U
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
2
2
∞
2
-
3
3
∞
3
5
3
1
1
-
4
∞
∞
∞
3
3
∞
3
4
3
-
5
∞
∞
∞
∞
∞
3
3
∞
3
8
3
-
6
∞
2
2
∞
2
-
B = {17, 12, 67, 63, 24, 56, 58, 59}
8
7
1
-
8
∞
9
9
∞
9
8
8
∞
8
∞
8
2
2
-
9
∞
∞
∞
∞
∞
∞
∞
∞
∞
∞
∞
4
4
5
4
u = 7, e = 17
u = 2, e = 12
u = 6, e = 67
u = 3, e = 63
u = 4, e = 24
u = 5, e = 56
u = 8, e = 58
u = 9, e = 59
2.2
Kürzeste Wege, Algorithmus von Dijkstra
Gegeben:
• zusammenhängender schlichter Graph G mit n ≥ 2 Knotenpunkten
• f : Kantenbewertung (Kostenfunktion) von G,
f : E(G) → R
• s, t: zwei Knotenpunkte von G mit s ̸= t
Gesucht:
Ein Weg W zwischen s und t in G mit
∑
f (e) → min .
f (W ) :=
e∈E(W )
Definitionen:
1. Ist f : E → R eine Kantenbewertung von G, so heißt (G, f )
kurz Netzwerk.
2. Ein Weg W = (x0 , x1 , . . . , xl ) in G mit Anfangsknoten x0
und Endknoten xl wird kurz (x0 , xl )-Weg genannt. Wir nennen xi−1 den Vorgänger von xi in W und W ′ = (x0 , . . . , xi )
den (x0 , xi )-Teilweg von W
∑
3. f (W ):=
f (e)
e∈E(W )
4. Ein kürzester (x, y)-Weg in (G, f ) ist ein (x, y)-Weg W0
in G mit f (W0 ) ≤ f (W ) für alle (x, y)-Wege W in
G. Die Länge eines kürzesten (x, y)-Weges wird mit
dist(x, y):=f (W0 ) bezeichnet.
9
Satz 2.3 Es sei (G, f ) ein Netzwerk mit f (e) ≥ 0 für alle e ∈
E(G), und es seien x, y zwei verschiedene Knoten von G.
Ist W0 ein kürzester (x, y)-Weg in (G, f ) und ist y ′ der
Vorgänger von y in W0 , so ist der (x, y ′ )-Teilweg W ′ von W
ein kürzester (x, y ′ )-Weg in (G, f ).
Algorithmus 2.2 (Dijkstra)
Eingabe: zusammenhängender Graph G = (V, E) mit Kostenfunktion f : E → R+ und Startknoten x1 ∈ V = {x1 , . . . , xn }.
1. Initialisierung:
für j := 1, . . . , n setze d(xj ) := ∞; B := ∅
2. x = x1 , d(x1 ) := 0;
OFFEN:=V \ {x1 }; (OFFEN= Menge der Knoten xi , für
die die permanente Distanz d(xi ) := dist(x1 , xi ) noch nicht
bekannt ist.)
3. für alle xi ∈ OF F EN mit xxi ∈ E setze
dt (xi ) := d(x) + f (xxi );
4. für alle xi ∈ OF F EN mit xxi ∈ E setze
d(xi ) := min{d(xi ), dt (xi )}; (Neuberechnung des Abstandes)
v(xi ) := x falls d(xi ) = dt (xi ); (Bestimmung des
Vorgängers)
5. wähle ein x ∈ OFFEN
mit d(x) = min{d(y) : y ∈ OF F EN };
setze OF F EN := OF F EN \ {x};
falls x ̸= x1 , setze B := B ∪ {v(x)x}
6. Wiederhole die letzten drei Schritte bis OF F EN = ∅
10
Ausgabe: Eine Liste d(xi ) (i = 1, . . . , n), die die Distanzen
dist(x1 , xi ) = d(xi ) enthält, sowie die Kantenmenge B eines
Gerüstes von G, wobei der eindeutige (x1 , xi )-Weg in G[B] stets
ein kürzester (x1 , xi )-Weg in G ist.
Beispiel:
10
2
13
1
16
13
8
11
13
4
13
17
17
3
12
6
22
8
5
21
13
10
10
18
16
11
16
12
7
11
9
15
d(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
1
0
-
2
∞
13
13
1
3
∞
16
16
1
25
16
1
4
∞
12
12
1
5
∞
-
-
16
1
24
16
1
-
-
-
-
33
33
4
29
29
7
21
21
2
33
21
2
-
-
-
-
-
-
13
1
13
1
-
6
∞
23
23
2
23
2
38
23
2
7
∞
13
13
1
23
13
1
8
∞
9
∞
10
∞
x=1
x=4
x=7
-
31
31
7
25
25
7
x=2
-
31
7
25
7
x=3
-
25
7
x=5
25
7
x=6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
31
7
45
31
7
36
31
7
35
31
7
-
-
-
-
-
-
-
-
-
12
25
7
-
39
39
6
40
39
6
44
39
6
x=9
8
10
2.3
Eulerkreise
Das Königsberger Brückenproblem (frühes 18. Jahrhundert)
wird als Geburtsstunde der Graphentheorie angesehen.
Problem: Gegeben ist ein Graph G, nicht notwendig schlicht.
Gesucht ist ein Kreis in G, der jede Kante genau einmal enthält.
Anwendung: Problem des chinesischen Postboten, Müllabfuhr,
Kalken der Linien auf einem Tennisplatz
Definitionen:
• Ein Eulerzug eines ungerichteten nicht notwendig schlichten
Graphen G = (V, E) ist ein Kantenzug P in dem jede Kante
aus E genau einmal vorkommt und bei dem Anfangs- und
Endknoten übereinstimmen.
• Verlangen wir nicht, daß Anfangs- und Endknoten übereinstimmen, so sprechen wir von einem offenen Eulerzug.
• Ein Graph heißt Eulersch, falls er einen Eulerzug besitzt.
Beispiel: Das Haus vom Nikolaus
Bemerkung: In der Literatur wird ein Eulerzug vielfach als
Eulerkreis und ein offener Eulerzug als Eulerweg bezeichnet.
2.3.1
Existenz und Konstruktion
Satz 2.4 (Euler, 1736) Ein nicht notwendig schlichter Graph
G = (V, E) ist genau dann Eulersch, wenn G (bis auf isolierte
13
Knoten) zusammenhängend ist und alle Knoten geraden Grad
haben (Schlingen werden doppelt gezählt).
Satz 2.5 (Euler, 1736) Ein nicht notwendig schlichter Graph
G = (V, E) besitzt einen offenen Eulerzug, wenn G (bis auf isolierte Knoten) zusammenhängend ist und die Anzahl der Knoten mit ungeradem Grad ist 0 oder 2 (Schlingen werden doppelt
gezählt).
Ein Linearzeitalgorithmus zur Konstruktion eines (offenen) Eulerzuges
Eingabe: Graph G = (V, E), zusammenhängend, nicht notwendig schlicht
1. Setze W = ∅, Stelle fest ob der Graph
(a) 0 Knoten ungeraden Grades
(b) 2 Knoten ungeraden Grades: x, y besitzt.
2. (a) Starte bei beliebigem Knoten v
(b) Starte bei x
3. Konstruiere einen nicht verlängerbaren Kantenzug (im Fall
(b) einen offenen Kantenzug) und füge die benutzten Kanten zu W hinzu.
Kommentar: Im Fall (a) endet der Kantenzug zwangsläufig
bei v, da bei jedem anderen Knoten der Kantenzug durch
die gerade Valenz verlängerbar ist.
Im Fall (b) endet der offene Kantenzug zwangsläufig bei y
4. Ist W ̸= E, wähle beliebigen Knoten v ′ mit noch unbenutzten Kanten aus dem schon fertigen Kantenzug.
14
Konstruiere nicht verlängerbaren Kantenzug von v ′ aus (endet bei v ′ ) und füge die benutzten Kanten zu W hinzu.
Füge den neuen Kantenzug an der entsprechenden Stelle in
den alten Kantenzug ein.
5. Wiederhole 4. so lange, bis W = E.
Ausgabe: (a) Eulerzug, (b) offener Eulerzug von G
2.3.2
Das Problem des chinesischen Postboten
Gegeben: Straßennetz mit Entfernungsangaben zwischen Verzweigungen, der Postbote startet an einer Ecke (Postamt), muß
jede Straße mindestens einmal durchlaufen und zum Postamt
zurückkehren.
Gesucht: Tour kürzester Länge
Modell: Graph G = (V, E) mit Kantenbewertung (Kostenfunktion) f : E → R+ .
Startegie: Wenn G Eulersch ist, konstruieren wir einen Eulerzug, fertig.
Wenn G nicht Eulersch ist, konstruieren wir durch Verdoppelung von “einigen passenden“ Kanten einen (nicht schlichten)
Graphen G∗ = (V, E ∗ ), so daß G∗ Eulersch ist und f (E ∗ \ E)
minimal ist. Ein Eulerzug in G∗ ist dann der Weg des Postboten.
15
Beispiel:
2
4
3
2
1
4
5
1
3
2
3
2
3
5
1
2
4
4
8
2
6
5
3
7
9
8
16
2.4
Laufzeiten von Algorithmen
17
2.5
Der Algorithmus von Ford & Fulkerson
Gegeben: Leitungsnetz mit Kapazitäten und möglichen Durchflußrichtungen, ein Erzeuger (Quelle), ein Abnehmer (Senke)
Gesucht: Maximalfluß von der Quelle zur Senke
2.5.1
gerichtete Graphen
Problem: Die Kanten im Netzwerk dürfen jeweils nur in einer
vorgegebenen Richtung durchlaufen werden (Einbahnstraßen).
Definitionen: (s. Folie)
1. Ein gerichteter Graph (directed graph, Digraph) D =
(V, A) ist eindeutig bestimmt durch
(a) V = V (D) endliche nichtleere Menge (Knotenpunktmenge)
(b) A = A(D) endliche Menge von geordneten Paaren von
Knoten (Kantenmenge, arc-gerichtete Kante)
2. Statt e = (x, y) schreiben wir kurz e = xy
⃗ oder e = xy,
wenn klar ist, daß es sich um einen gerichteten Graphen
handelt.
3. Sei e = xy,
⃗ dann heißt x Anfangsknoten und y Endknoten
von e und e Kante von x nach y.
4. Der einem gerichteten Graph D = (V, A) zugrundeliegende
(ungerichtete) Graph G = (V, E) ist definiert durch: xy ∈ E
⇐⇒ xy ∈ A oder yx ∈ A.
18
5. gerichtete Kantenfolge, gerichteter Weg und gerichteter
Kreis werden analog zu den entsprechenden bekannten (ungerichteten) Begriffen definiert.
∑
6. d+
aD (x, y) heißt Ausgangsgrad (AusgangsvaD (x) =
y∈V (D)
lenz, outdegree)
∑ von x.
−
dD (x) =
aD (y, x) heißt Eingangsgrad (Eingangsvay∈V (D)
lenz, indegree) von x.
7. Ein gerichteter Graph D = (V, A) heißt zusammenhängend,
sofern sein zugrundeliegender ungerichteter Graph zusammenhängend ist.
8. Ein gerichteter Graph D
=
(V, A) heißt
stark zusammenhängend ⇐⇒ für alle x, y ∈ V existieren
ein gerichteter Weg von x nach y und ein gerichteter Weg
von y nach x.
2.5.2
Definitionen und Bezeichnungen:
Bemerkung: Im folgenden bezeichne G = (V, E) einen gerichteten Graphen, wobei E jetzt die Menge der gerichteten Kanten
ist.
• Ein (s,t)-Netzwerk N = (G, c, s, t) besteht aus
1. G - gerichteter Graph ohne Schlingen
2. c - Kantenbewertung von G mit c(e) ≥ 0, ganzzahlig,
∀e ∈ E(G).
19
3. s, t - zwei verschieden Knoten von G.
Man nennt c die Kapazität des Netzwerkes N , s die Quelle,
sowie t die Senke von N .
• Sei G ein gerichteter Graph und A ⊆ V (G).
Skizze
I + (A) := {e ; e = xy, x ∈ A und y ∈ V \ A}
I − (A) := {e ; e = xy, x ∈ V \ A und y ∈ V }
Eine Kantenmenge F = I + (A) heißt Schnitt von G. Ist
außerdem s ∈ A und t ∈ V \ A, so heißt F = I + (A) ein
(s, t)-Schnitt von G.
Die Kapazität des Schnittes F = I + (A) in N ist definiert
durch:
∑
c(F ) :=
c(e),
e∈F
wobei c(∅) = 0 sei.
Beispiel:
• Das Minimalschnittproblem:
Gegeben: N = (G, c, s, t) ein (s, t)-Netzwerk
Gesucht: (s, t)-Schnitt F von G mit c(F ) → min. Ein
solcher Schnitt wird kurz Minimalschnitt von N genannt.
• Ist f : E → R eine Kantenbewertung von G, so sei für
x∈V
∑
∑
f (e)
f (e) −
df (x ) :=
e∈I + (x)
20
e∈I − (x)
die Divergenz von f in x.
Beispiel
• Eine Kantenbewertung f : E → R heißt (s,t)-Fluß von G,
falls df (x) = 0 für alle x ∈ V \ {s, t}. Dann ist df (s) =
−df (t).
• Wert(f ) := df (s).
• Ein (s, t)-Fluß f von G heißt zulässiger (s, t)-Fluß in N =
(G, c, s, t) falls für alle e ∈ E(G) gilt: 0 ≤ f (e) ≤ c(e).
• Das Maximalflußproblem
Gegeben: Ein (s, t)-Netzwerk N = (G, c, s, t)
Gesucht: Ein zulässiger (s, t)-Fluß f von N mit
W ert(f ) → max. Ein solcher Fluß wird kurz Maximalfluß
in N genannt.
2.5.3
Das max-flow-min-cut Theorem
Satz 2.6 (Ford & Fulkerson, 1956) Sei N = (G, c, s, t) ein
(s, t)-Netzwerk. Dann ist der maximale Wert eines (s, t)-Flusses
in N gleich der minimalen Kapazität eines (s, t)-Schnittes von
N , d.h.
max
f ist (s,t)−F luß in N
W ert(f ) =
min
F ist (s,t)−Schnitt von N
c(f )
Folgerung:
Ist f ein zulässiger (s, t)-Fluß in N und F ein (s, t)-Schnitt von
N und gilt: W ert(f ) = c(F ), so ist f ein Maximalfluß und F
ein Minimalschnitt von N .
21
2.5.4
Algorithmus
Eingabe:
Ein (s, t)-Netzwerk N = (G, c, s, t)
Datenstruktur:
• c(e) : Kapazität der Kante e, c(e) ≥ 0, ganzzahlig
• f (e) : Fluß von f in der Kante e mit 0 ≤ f (e) ≤ c(e)
• A : Menge der markierten Knotenpunkte
• B : Menge der markierten, aber noch nicht überprüften
Knotenpunkte
• V or(x): Vorgänger des Knoten x auf einem markierten (⊆
A) (s, x)-Kantenzug
• d(x) : Werte zur Berechnung der Erhöhung des aktuellen
Flusses
• Wert(f ) : Wert des aktuellen (s, t)-Flusses
Anfangsschritt:
1. f (e) := 0 für alle e ∈ E, Wert(f ) := 0
Markierungsschritt:
2. A := {s}, B := {s}, d(s) = ∞
3. Ist B = ∅ gehe zu 9.
4. Wähle x ∈ B und setze B := B \ {x}
22
5. Für alle e = xy
⃗ mit y ̸∈ A führe aus:
Ist f (e) < c(e), dann setze
V or(y) := +x, d(y) := min{c(e) − f (e), d(x)}
A := A ∪ {y}, B := B ∪ {y}
6. Für alle e = yx
⃗ mit y ̸∈ A führe aus:
Ist f (e) > 0, dann setze
V or(y) := −x, d(y) := min{f (e), d(x)}
A := A ∪ {y}, B := B ∪ {y}
7. Ist t ∈ A, so gehe zu 8., sonst zu 3.
Verbesserungsschritt:
8.
• Wert(f):=Wert(f ) + d(t)
• x1 = V or(t), falls V or(t) > 0 setze
f (x⃗1 t) := f (x⃗1 t) + d(t) sonst
⃗ 1 ) := f (tx
⃗ 1 ) − d(t)
f (tx
• x2 = V or(x1 ), falls V or(x1 ) > 0 setze
f (x2⃗x1 ) := f (x2⃗x1 ) + d(t) sonst
f (x1⃗x2 ) := f (x1⃗x2 ) − d(t)
• . . . bis s erreicht ist
• gehe zu 2.
Ausgabe:
Ein Maximalfluß f von N und ein Minimalschnitt I + (A)
23
2.6
Das Zuordnungsproblem
2.6.1
Problemstellung
Tourenplanung
Gegeben: n LKWs A1 , . . . , An , n Touren B1 , . . . , Bn , cij seien
die Kosten, wenn der LKW i die Tour j fährt, C = (cij ) sei die
Kostenmatrix
Gesucht: Zuordnung der LKWs zu den Touren derart, daß die
Kosten minimal werden, d.h.
Z=
n ∑
n
∑
cij xij → min
i=1 j=1
{
mit xij =
Beispiel:
C B1
A1 3
A2 8
A3 9
A4 8
2.6.2
1 LKW i fährt Tour j
0 sonst
n=4
B2 B3 B4
7 9 12
2 11 2
10 4
6 5
5
7
Das Zuordnungsproblem (ungewichtet)
Problem: Tanzstunde
Geg.: eine Menge von Frauen und eine Menge von Männern
es ist bekannt, welche Paare sich gegenseitig symphatisch finden
Ges.: maximale Anzahl von (Tanz)Paaren mit gegenseitiger
Symphatie
24
Definition: Ein Graph G = (V, E) ist ein paarer Graph (bipartiter Graph), falls V = A ∪ B und E ⊆ A × B.
D.h. es gibt nur Kanten zwischen den Knotenmengen A und B,
aber keine Kanten in A und keine Kanten in B.
Modell: Paarer Graph G = (V, E):
A entspricht der Menge der Frauen, B entspricht der Menge der
Männer, x ∈ A ist benachbart zu y ∈ B, sofern x und y sich
symphatisch finden.
Gesucht ist ein Matching mit maximaler Kantenanzahl in G
Bemerkung: Das Problem kann mit verschiedenen Algorithmen gelöst werden.
• Ford & Fulkerson
1. Konstruiere aus G einen gerichteten Graphen G∗ =
(V, A):
– Alle vorhandenen Kanten werden von A nach B
gerichtet.
– Füge eine Quelle s, sowie sämtliche mögliche gerichtete Kanten von s nach A hinzu.
– Füge eine Senke t, sowie sämtliche mögliche gerichtete Kanten von B nach t hinzu.
2. Definiere eine Kantenbewertung:
f : A → R+ : f (e) = 1∀e ∈ A.
3. Bestimme einen maximalen Fluß von s nach t (F& F)
4. I + (A) ist ein maximales Matching in G∗ .
25
• alternierende Wege
Definition: Sei G = (V, E) ein Graph und M ein Matching
in G. Ein bezüglich M alternierender Weg ist ein Weg in G
der abwechselnd Kanten aus M und aus E − M enthält.
1. Suche einen alternierenden Weg W in G, der sowohl
mit einer Kante aus E − M beginnt als auch endet und
nicht verlängerbar ist.
2. Falls kein solcher Weg existiert, ist M ein Matching mit
maximaler Kantenanzahl. Gehe zu 5.
3. Falls ein solcher Weg existiert, konstruiere ein Matching M1 aus M durch Entfernen der Matchingkanten
von W und Hinzunahme der Nichtmatchingkanten von
W . M1 hat mehr Kanten als M . Setze M = M1
4. Wiederhole 1.-3., solange dies möglich ist.
5. Ausgabe von M
2.6.3
Nullzuordnungen
Problem:
Geg.: (n, n)-Matrix A = (aij ), die in jeder Zeile und jeder Spalte
mindestens eine Null enthält.
Ges.: Nullzuordnung: Markierung einer maximalen Anzahl von
Nullen, so dass in jeder Zeile und jeder Spalte höchstens eine
Null markiert ist.
Bemerkung: Das Problem kann als ungewichtetes Zuordnungsproblem modelliert werden:
26
• paarer Graph G = (V, E), V = A ∪ B
• Knoten i in A ist verbunden mit Knoten j in B genau dann
wenn aij = 0
• Bestimme Matching mit maximaler Kantenanzahl in G
• Markiere die den Kanten entsprechenden Nullen
2.6.4
Das Zuordnungsproblem gewichtet - Die Ungarische Methode
(1) Kostenmatrixredunktion
• je Zeile und je Spalte wird jeweils eine passende Zahl zi
bzw. sj addiert oder subtrahiert
• erzeugt in jeder Zeile und in jeder Spalte mindestens eine
Null
• verändert die Struktur des Problems nicht
n
m ∑
n
m
n
m ∑
∑
∑
∑
∑
(cij − zi − sj )xij =
cij xij −
zi
xij −
Z∗ =
n
∑
j=1
da
i=1 j=1
sj
m
∑
i=1
n
∑
xij = Z −
m
∑
zi ai −
i=1
xij = ai = 1 und
j=1
n
∑
n
∑
i=1 j=1
sj bj = Z −
j=1
m
∑
i=1
j=1
n
∑
zi −
i=1
sj ,
j=1
xij = bj = 1
i=1
Somit hängen die Subtrahenden nicht von xij ab.
(2) Anfangszuordnung
• Führe eine Kostenmatrixreduktion durch bis in jeder Zeile
und in jeder Spalte mindestens eine Null vorkommt.
27
• Ziel: Zuordnung (Markierung von Feldern, so daß in jeder
Zeile und jeder Spalte genau ein Feld markiert ist), die
möglichst viele Nullen als reduzierte Kosten enthält.
• Wähle eine Zuordnung mit einer maximalen Anzahl von
Nullen. Mache die entsprechenden Felder kenntlich. s. 2.6.3
• Falls alle gewählten Felder die (reduzierten) Kosten Null
enthalten, ist die Zuordnung optimal, sonst muß die Optimierung durchgeführt werden.
(3) Optimierungsphase
1. Markierung
• Markiere alle Zeilen, die im markierten Feld keine Null
enthalten. sei I die Menge der Indizes dieser Zeilen.
• Markiere alle Spalten, die mindestens eine Null in einer
der bisher markierten Zeilen enthalten. Die Menge der
Indizes dieser Spalten sei J.
• Markiere zusätzlich alle Zeilen, die in den markierten Spalten Zuordnungen (Nullmarkierungen) enthalten. Füge die Indizes zu I hinzu.
• Markiere zusätzlich Spalten, Zeilen,.. entsprechend den
letzten zwei Schritten solange dies möglich ist.
2. Umrechnung
• Ermittle das Minimum der cij in den markierten Zeilen,
aber dort nur in den nichtmarkierten Spalten. (Falls es
keine solche Felder gibt, gibt es eine bessere Ausgangszuordnung)
m := min{cij | i ∈ I, j ̸∈ J}
28
• Für i ∈ I und j ̸∈ J setze: cij = cij − m
• Für i ̸∈ I und j ∈ J setze: cij = cij + m
• Sonst: cij = cij
3. Wähle eine neue Zuordnung unter Verwendung möglichst
vieler Nullen.
4. Wiederhole das Verfahren solange, bis die Zuordnung nur
Nullen enthält (optimal ist).
2.6.5
Variationen
Sei C = (cij ) die “Kostenmatrix“.
(1) Die Zielfunktion ist zu maximieren
• Setze m :=
max
i=1,...,n,j=1,...,n
cij und
• C ′ := (c′ij ) mit c′ij := m − cij
• Minimiere die Zielfunktion bezüglich der “Kostenmatrix“
C′
(2) Anzahl Anbieter ̸= Anzahl Besteller
Führe fiktive Anbieter bzw. fiktive Besteller ein und setze die
entsprechenden “Kosten“ konstant cij = c, c ∈ N0
29
2.7
Hamiltonkreise und das TSP Problem
Das Problem des Handlungsreisenden Traveling Salesman
Problem (TSP):
Gegeben: Liste von Städten, sowie für je zwei Städte die Kosten,
um von einer Stadt in die andere zu gelangen. Ein Handlungsreisender startet in einer Stadt, macht eine Rundtour durch alle
Städte und kehrt an seinen Ausgangspunkt zurück.
Gesucht: Reiseroute mit minimalen Gesamtkosten
Modell: Vollständiger Graph mit Kantenbewertung (Kostenfunktion) f : E → R+ ;
Gesucht ist ein Kreis, der jeden Knoten in G einmal enthält und
minimale Kosten verursacht
Definitionen:
• Ein Hamiltonkreis (Hamiltonweg) eines Graphen G =
(V, E) ist ein Kreis (Weg) in dem jeder Knoten aus V (genau einmal) vorkommt.
• Ein Graph heißt Hamiltonsch, falls er einen Hamiltonkreis
besitzt.
2.7.1
Geschichte des TSP-Problems
• 1832: Handbuch für Handlungsreisende
Das Problem wurde beschrieben, aber nicht mathematisch
behandelt, es wurden Beispieltouren angegeben
• 1856: Spiel mit 20 Knoten und Nebenbedingungen
30
• 1930: Math. Kolloquium in Wien: Das Problem wurde mathematisch formuliert: Botenproblem (Menger)
2.7.2
Komplexität
Wir betrachten das folgende Entscheidungsproblem:
TSP = {(G, f, k) :
• G = (V, E) ist vollständiger Graph, f : E → R+ ist eine
Kostenfunktion, k ∈ N
• Gibt es einen
∑ Hamiltonkreis C = (e1 , . . . , en ) in G mit
f (C) =
f (e) ≤ k}.
e∈E(C)
Satz 2.7 TSP ist NP-vollständig.
2.7.3
Exakte Lösungen
(1) Alle Touren durchsuchen
Bem: Für n Städte gibt es
(n−1)!
2
mögliche Touren.
Beispiel: K4
A − 29 − B − 30 − C − 12 − D − 35 − A : 97
A − 20 − B − 34 − D − 12 − C − 42 − A : 108
A − 42 − C − 30 − B − 34 − D − 35 − A : 141
Für 15 Städte hat man bereits mehr als 4.3·1010 Wege zu durchsuchen.
31
(2) Formulierung als LP-Problem
Geg.: G(V, E) vollständiger Graph, V = {1, . . . , n},
Kostenfunktion f : E → R+
{
⃗ gehört zur Tour
1 ij
Ges.: Sei xij =
0 sonst
n
n
∑∑
Z=
xij f (ij) → min
i=1 j=1
Nebenbedinbungen:
•
n
∑
xij = 1 ∀i = 1, . . . , n,
i=1
n
∑
xij = 1, ∀j = 1, . . . , n
j=1
• Es muss verhindert werden, dass mehrere kurze Kreise entstehen (statt eines Hamiltonkreises)
Die Anzahl dieser Nebenbedingungen steigt exponentiell in
n !!!
(3) Rekorde: s. Wikipedia
2005: Layout integrierter Schaltkreise mit 33 810 Knoten (William Cook, Concorde)
2004: wurde eine optimale Tour durch 24 978 schwedische Städte
berechnet Concorde)
2.7.4
Heuristiken
Zielstellung: Gute Näherungen für TSP finden
Einige Vorschläge:
32
1. NN (Nächster Nachbar)
Wähle einen beliebigen Starknoten x. Sei x der letzte erreichte Knoten. Suche unter allen noch ”nicht erreichten”
Knoten denjenigen Knoten y mit minimalem f (xy).
2. MST (Minimum Spanning Tree)
(a) Konstruiere ein minimales Gerüst T
(b) Verdopple alle Kanten in T und erhalte TD . Konstruiere
einen Eulerzug C in TD .
(c) Konstruiere einen Hamiltonschen Kreis CM ST aus C
durch Überspringen schon besuchter Knoten.
3. CH (Christofides Heuristik)
(a) Konstruiere ein minimales Gerüst T
(b) Sei U die Menge der Knoten ungeraden Grades in T ,
|U | = 2m. Konstruiere gewichtetes minimales (perfektes) Matching M auf U , M = {x1 y1 , . . . , xm ym } und
füge M zu T hinzu, erhalte Eulerschen Graph TD
(c) Konstruiere einen geschlossenen Eulerzug C in TD
(d) Konstruiere einen Hamiltonschen Kreis CCH aus C
durch Überspringen schon besuchter Knoten.
Frage: Wie gut sind nun diese Heuristiken?
Bezeichnungen:
∑
f (e)
1. f (C) =
e∈E(C)
2. Copt bezeichne den Kreis mit minimalen Kosten, d.h.
f (Copt ) ≤ f (C) für jeden Hamiltonkreis C.
33
3. Ein TSP heißt metrisches TSP sofern für die Kostenfunktion die Dreiecksungleichung erfüllt ist: f (xy) ≤ f (xz) +
f (zy) für alle x, y, z.
Satz 2.8 Es sei ein metrisches TSP mit Kostenfunktion f gegeben. Dann gilt
1. f (CM ST ) ≤ 2f (Copt )
2. f (CCH ) ≤ 32 f (Copt )
s. M.Aigner: Diskrete Mathematik, Friedr. Vieweg & Sohn Verlag, Wiesbaden 2006
34
3
Allgemeine Optimierungsmethoden
Bemerkung: In diesem Abschnitt geht es nicht unbedingt um
schnelle Methoden, sondern um systematisches Durchsuchen
3.1
3.1.1
Branch and Bound
Backtracking
(1) Die Idee
Die Backtracking-Methode organisiert das erschöpfende Durchsuchen ohne Schleifen.
Partielle Lösungen werden solange erweitert, wie es möglich ist.
Wenn es nicht mehr weiter geht, geht man einen Schritt zurück
und probiert neu.
Beispiel: Labyrinth
(2) Baumdiagramm
• Gegeben: Mengen A1 , A2 , dots
• Gesucht: (a1 , a2 , . . .) mit ai ∈ Ai die gewisse Bedingungen
erfüllen
• Beginne mit dem leeren Wort () als Wurzel
• Sei S1 die Menge der Kandidaten aus A1
Wähle a1 ∈ S1 → Teillösung (a1 )
• Seien (a1 , . . . , ai ) schon gewählt.
35
• Si+1 sei die Menge der Elemente x aus Ai+1 , so dass
(a1 , . . . , ai , x) den vorgegebenen Bedingungen genügt.
• Wähle aus der Kandidatenmenge Si+1 ⊆ Ai+1 das erste
Element, sofern Si+1 ̸= ∅. Falls Si+1 = ∅, gehe zurück und
teste den nächsten Kandidaten aus Si .
Beispiel:
• Gegeben: n × n-Schachbrett
• Gesucht: Eine Plazierung von möglichst vielen Damen, so
dass keine die andere schlagen kann
Frage: Geht es immer mit n Damen? (Ja n ≥ 4)
• Bemerkung:Die Lösung ist eine Permutation a1 , . . . , an der
Zahlen 1, . . . , n, so dass ai die Spaltennummer der Dame in
Zeile i angibt.
Diagonalbedingung: |ai − aj | ̸= |i − j| für i ̸= j.
• n = 4; Durch Symmetrie können wir a1 ≤ 2 annehmen,
also A1 = {1, 2}
• ...
3.1.2
Idee der Branch and Bound Methode
Bemerkung:
Es handelt sich um eine Variante (Verfeinerung) der BacktrackMethode. Es wird versucht, das Durchsuchen ganzer Teilbäume
überflüssig zu machen.
36
Idee:
In jedem Knoten des Backtrack-Baumes ermitteln wir eine untere Schranke für das gesuchte Minimum copt .
Wir verzweigen (branch), ermitteln und vergleichen die neuen
Schranken (bound) und fahren mit dem Knoten fort der aktuell
die beste Schranke angibt.
Wird für ein Blatt ein Wert c ermittelt, so können alle Teilbäume
mit einer Schranke schlechter als c ignoriert werden.
3.1.3
Beispiele:
(a) Das Asymmetrische Rundreiseproblem (ARP)
1. Gegeben: gerichteter Graph G = (V, A), Kantenbewertung:
w(e) ≥ 0, z.B.
1 2
1 ∞ 2
2 2 ∞
3
8
6
3
4
∞ 5
3 ∞
4
8
5
7
4
6
4
cij gibt die Kosten von i nach j an. Da es cij mit cij ̸= cji
gitb, handelt es sich um ein ARP.
2. Gesucht: Rundtour mit minimalen Kosten.
37
3. bound: Zeilen und Spaltenreduktion
Von jedem Knoten muss eine Kante ausgehen, d.h. die Kosten der Rundtour sind mindestens so hoch, wie die Summe
der minimalen Elemente der einzelnen Zeilen.
Subtrahiere diese Elemente von der jeweiligen Zeile und setze die Summe als untere Schranke.
Analog wird eine Spaltenredunktion durchgeführt (jeder
Knoten muss erreicht werden). Die minimalen Element werden zur vorhandenen Schranke addiert.
Teste, ob es eine Rundtour gibt, bei der alle Kanten die
aktuelle Bewertung 0 haben. Falls ja, ist dies eine Rundtour
mit minimalen Kosten.
4. branch:
Wähle eine Kante e = ij mit aktueller Bewertung 0 und
betrachte die Fälle:
(a) e = ij gehört zur Tour: Streiche Zeile i und Spalte j
und setze cji = ∞.
(b) e = ij gehört nicht zur Tour: Setze cij = ∞.
5. bound:
38
Berechne die neuen Schranken durch Zeilen- und Spaltenreduktion und gehe in den Zweig mit der niedrigeren Schranke.
Teste, ob es eine Rundtour gibt, bei der alle Kanten die
aktuelle Bewertung 0 haben. Falls ja, ist dies eine Rundtour
mit minimalen Kosten.
6. Wiederhole die Schritte 4 und 5 bis eine Rundtour mit minimalen Kosten gefunden wurde.
(b) minimales gewichtetes (perfektes) Matching
1. Geg.: K8 mit folgenden Kantengewichten (s. Serie 6, Aufgabe 4):
1
2
1
2
2
2
-
4
5
3
5
5
3
7
9
7
8 10 11
13 11 15
11 9 13
4 5 3 - 6 4 12 6 10
5 5 3 6 - 10 8 12 11
7 9 7 4 10 - 8 2 6
8 13 11 12 8 8 - 6 3
10 11 9 6 12 2 6 - 4
11 15 13 10 11
6
3
4
-
2. Ges.: minimales gewichtetes Matching
3. Bemerkung: Der K8 hat 7 · 5 · 3 = 105 verschiedene perfekte
Matchings
39
4. Bound: Jeder Knoten gehört zu genau einer MatchingKante ⇒ addiere die Gewichte schon gewählter Kanten,
sowie 21 mal die Summe der minimalen Elemente aller restlichen Zeilen.
5. Branch: Wähle eine Kante e = ij mit minimalem Gewicht
und betrachte die Fälle:
(a) e = ij gehört zum Matching: Streiche Zeilen i und j,
sowie Spalten i und j.
(b) e = ij gehört nicht zum Matching: Setze w(ij) =
w(ji) = ∞
6. berechne die unteren Schranken neu.
7. Wiederhole die Schritte 5 und 6 bis ein minimales gewichtetes Matching gefunden wurde.
40
Herunterladen