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