Graphen: Problem des Handlungsreisenden

Werbung
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Gliederung
Algorithmen und Datenstrukturen II
Graphen: Problem des Handlungsreisenden
1
Graphen: Problem des Handlungsreisenden
Einleitung
Problem
D. Rösner
Greedy-Verfahren
Nächste Nachbarn
Kürzeste Verbindung
Institut für Wissens- und Sprachverarbeitung
Fakultät für Informatik
Otto-von-Guericke Universität Magdeburg
Dynamisches Programmieren
c
Sommer 2009, 1. Juli 2009, 2009
D.Rösner
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
1
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
2
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
ein klassisches graphentheoretisches
(Optimierungs-)Problem
Definition des Problems:
ursprüngliche Bezeichnung: traveling salesman problem
Gegeben ist ein gewichteter, ungerichteter Graph.
jetzt übliche Bezeichnung: traveling salesperson problem
(kurz: TSP)
Knoten repräsentieren Städte,
Kanten die mit Kosten (z.B. Entfernung, Zeit) gewichteten
Verkehrswege zwischen den Städten.
auch bekannt als: Problem der minimalen Rundtour (engl.
minimum tour problem)
zahlreiche Anwendungen in der Praxis, u.a.
Gesucht ist eine „Rundtour“ durch den Graph, bei der jeder
Knoten exakt einmal besucht wird und die am
Ausgangsknoten endet, derart, dass die Kosten minimal
sind.
Routenplanung
Produktionsplanung
Kommunikationsnetze
...
s.a. [BG99], 13.2.2; [RL99], Ch. 9.6
s.a. [BG99], 13.2.2; [RL99], Ch. 9.6
D. Rösner AuD II 2009 . . .
4
D. Rösner AuD II 2009 . . .
5
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Bemerkungen:
Ein – wie hier gesucht – einfacher Zyklus in einem
ungerichteten Graphen, der durch jeden Knoten genau
einmal geht, heisst auch Hamilton-Zyklus (engl.
Hamiltonian cycle).
Ein Pfad in einem ungerichteten Graphen, der durch jedem
Knoten genau einmal geht, heisst auch Hamilton-Pfad
(engl. Hamiltonian path).
Neben dem traditionellen TSP mit ungerichtetem Graphen
gibt es auch die Variante mit gerichtetem Graphen.
wir betrachten zunächst zwei Greedy-Verfahren für das
TSP, die sich durch geeignete Anpassungen aus
Greedy-Verfahren für das Problem des minimalen
aufspannenden Baumes (MST) ergeben
s.a. [BG99], 13.8.1
s.a. [BG99], 13.2.2; [RL99], Ch. 9.6
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
6
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
8
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Erinnerung:
20
Prim’s Algorithmus
1
beginnt mit einem beliebigen Startknoten und
baut den Baum dadurch auf, dass in jeder Iteration „gierig “
jeweils diejenige Kante zwischen einem bereits im Baum
befindlichen und einem noch ausserhalb liegenden Knoten
gewählt wird, die minimales Gewicht hat.
2
15
35
Kruskal’s Algorithmus
10
25
arbeitet mit den Kanten und
wählt „gierig “ jeweils die nächste Kante mit geringstem
Gewicht, sofern diese mit bereits gewählten Kanten keinen
Zyklus bildet
4
3
12
Abbildung: TSP-Problem: Ein Beispielgraph (vgl. [BG99], Fig. 13.5)
s.a. [BG99], 13.8.1
D. Rösner AuD II 2009 . . .
9
D. Rösner AuD II 2009 . . .
10
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
algorithm nearestTSP(V,E,W)
Wähle einen beliebigen Knoten s als Startpunkt des Zyklus
C.
v = s;
while es gibt noch Knoten, die noch nicht in C:
die Strategie der nächsten Nachbarn (engl.
nearest-neighbor strategy) modifiziert Prim’s Algorithmus
wie folgt:
da ein Pfad gesucht ist, wird immer mit dem letzten
eingefügten Knoten weitergearbeitet und
als letztes dann der Pfad zum Startknoten zu schliessen
versucht.
Wähle eine Kante vw von minimalem Gewicht, wobei w
noch nicht in C.
Füge Kante vw zu C hinzu;
v = w;
s.a. [BG99], 13.8.2
Füge Kante vs zu C hinzu;
return C
s.a. [BG99], 13.8.2
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
11
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
12
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
wenn dieser Algorithmus auf obiges Beispiel mit
Startknoten 1 angewendet, welcher Zyklus mit welchem
Gewicht entsteht?
Antwort:
die Strategie der kürzesten Verbindung (engl. shortest-link
strategy) modifiziert Kruskal’s Algorithmus wie folgt:
eine Kandidatenkante muss dann aussortiert werden, wenn
sie nicht Teil eines einfachen Pfades werden kann, der aus
den bisher bereits ausgewählten Kanten weiter aufgebaut
wird
konkret heisst dies:
.....................................
.....................................
.....................................
es darf (ausser im allerletzten Schritt) kein Zyklus entstehen
(vgl. Kruskal),
die Kandidatenkante darf in keinem ihrer Endpunkte zu einer
dritten ausgewählten Kante werden (sonst Bedingung
verletzt: genau einmal jeden Knoten besuchen)
Ist das Ergebnis optimal?
......................................
......................................
......................................
s.a. [BG99], 13.8.2
s.a. [BG99], 13.8.2
D. Rösner AuD II 2009 . . .
13
D. Rösner AuD II 2009 . . .
14
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Wenn dieser Algorithmus auf obiges Beispiel angewendet,
welche Kanten werden ausgewählt?
Antwort:
algorithm shortestLinkTSP(V,E,W)
R = E; // R . . . die verbliebenen Kanten
C = ∅; // C . . . die Kanten im Zyklus
while R ist nicht leer:
.....................................
.....................................
.....................................
Entferne die leichteste (kürzeste) Kante, vw, aus R.
If vw kreiert keinen Zyklus mit Kanten aus C
and vw ist nicht die dritte Kante in C, die in v oder w
endet:
Then Füge vw zu C hinzu.
// Schleife geht weiter
Welches Gewicht hat der Zyklus? Ist das Ergebnis
optimal?
......................................
......................................
......................................
Füge die Kante zu C hinzu, welche die beiden Endpunkte
des Pfads verbindet.
return C
s.a. [BG99], 13.8.3
s.a. [BG99], 13.8.3
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
15
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
16
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
im folgenden wird eine optimale Lösung des TSP mit Hilfe
des Dynamischen Programmierens gewonnen
O.B.d.A gilt dabei:
Wie immer, ist die zentrale Frage für den Ansatz des
Dynamischen Programmierens:
Lässt sich das Problem so fassen, dass eine Lösung durch
Rekurrenz-Beziehungen sich aus Lösungen ’kleinerer’
Unterprobleme ergibt?
die Menge der Knoten V im Graph G = (V , E) bestehe aus
den Zahlenwerten 1, 2, . . . , n,
der Anfangs- und Endknoten ist immer der Knoten n
s.a. [RL99], Ch. 9.6
s.a. [RL99], Ch. 9.6
D. Rösner AuD II 2009 . . .
18
D. Rösner AuD II 2009 . . .
19
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Berechnen lässt sich ci,S wie folgt:
Initialisierung: ci,∅ = wi,n für i 6= n
Rekurrenz: ci,S = minj∈S [wi,j + cj,S\{j} ] für i 6= n, i ∈
/S
da Pfade in einem Graphen sich (im Prinzip) aus
beliebigen Teilmengen der Menge aller Knoten
zusammensetzen können, hilft hier die folgende
Problemdefinition:
m.a.W.:
Wenn die zu durchlaufende Knotenmenge leer ist, ist das
Gewicht der Kante von i nach n, also wi,n , der Wert von ci,∅ .
ci,S ergibt sich dadurch, dass
Die Kosten ci,S seien assoziiert mit der kürzesten Route,
die in i beginnt,
durch alle Knoten in der Menge S führt und
in n endet.
für jedes j ∈ S der Wert von cj,S\{j} bestimmt
(nachgeschlagen) wird und dazu das Gewicht wi,j addiert
und
über alle j ∈ S minimiert wird.
s.a. [RL99], Ch. 9.6
s.a. [RL99], Ch. 9.6
D. Rösner AuD II 2009 . . .
Graphen: Problem des Handlungsreisenden
20
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
D. Rösner AuD II 2009 . . .
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
21
Graphen: Problem des Handlungsreisenden
2
die Lösung ergibt sich dann als cn,V \{n} für die Menge V
aller Knoten
1
s.a. [RL99], Ch. 9.6
4
1
5
1
3
8
5
2
5
2
6
6
4
Abbildung: TSP-Problem: Ein Beispielgraph (vgl. [RL99], Fig. 9.8)
D. Rösner AuD II 2009 . . .
22
D. Rösner AuD II 2009 . . .
23
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Graphen: Problem des Handlungsreisenden
Einleitung
Greedy-Verfahren
Dynamisches Programmieren
Literatur: I
2
1
4
1
5
1
3
8
5
2
5
2
6
6
4
Sara Baase and Allen Van Gelder.
Computer Algorithms: Introduction to Design and Analysis.
Addison Wesley Longman, Inc., Reading, MA, USA, 1999.
ISBN-10: 0201612445; ISBN-13: 978-0201612448.
Fethi Rabhi and Guy Lapalme.
Algorithms – A Functional Programming Approach.
Pearson Education Ltd., Essex, 1999.
2nd edition, ISBN 0-201-59604-0.
Abbildung: TSP-Problem: Ein Beispielgraph mit kürzester Tour (vgl.
[RL99], Fig. 9.8)
D. Rösner AuD II 2009 . . .
24
D. Rösner AuD II 2009 . . .
25
Herunterladen