Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung GIS Seminar WS 02/03 Christian Siemes
Übersicht Wiederholung Ableitung des A*-Algorithmus Dijkstra-Algorithmus Ableitung des A*-Algorithmus Wichtigste Eigenschaften Adaption auf die Routenplanung Vergleich mit Floyd-Algorithmus und Dijkstra-Algorithmus
Problemvorstellung 1 2 3 4 5 20 10 15
Problemvorstellung 1 2 3 4 5 20 10 15 Startknoten Zielknoten
Problemvorstellung 1 2 3 4 1 2 3 4 5 20 10 15 kürzester Weg 5 20 10 15 Startknoten Zielknoten
Problemvorstellung Laufzeit Bestimmende Faktoren Anzahl der untersuchten Knoten im Graphen Rechenzeit für jeden Knoten
Datenstrukturen Graph G Suchbaum T Liste OPEN G(N) Kosten des Pfades von S bis N N ist der aktuell betrachtete Knoten
Dijkstra-Algorithmus Initialisieren OPEN und T schaffen S auf OPEN setzen mit G(N) = 0 10 S Z 1 2 3 4 5 20 15 OPEN G(N) T 1
Dijkstra-Algorithmus Schleife Falls OPEN leer, beende die Schleife 10 1 T OPEN G(N) 3 S 1 1 5 5 20 4 2 Z 15
Dijkstra-Algorithmus OPEN G(N) S Z 1 2 3 4 5 20 10 15
Dijkstra-Algorithmus Schleife Falls OPEN leer, beende die Schleife Entferne den ersten Knoten aus OPEN und setze ihn in T 10 1 T OPEN G(N) 3 S 1 1 5 5 20 4 2 Z 15
Dijkstra-Algorithmus Schleife Falls OPEN leer, beende die Schleife Entferne den ersten Knoten aus OPEN und setze ihn in T 10 1 T OPEN G(N) 3 S 1 1 5 5 20 4 2 Z 15
Dijkstra-Algorithmus Schleife Falls OPEN leer, beende die Schleife Entferne den ersten Knoten aus OPEN und setze ihn in T Falls Z gefunden, rekonstruiere Pfad und beende die Schleife 10 1 T OPEN G(N) 3 S 1 1 5 5 20 4 2 Z 15
Dijkstra-Algorithmus Schleife Falls Z gefunden, rekonstruiere Pfad und beende die Schleife Falls Z nicht gefunden, setze alle Nachfolger auf OPEN und berechne deren Kosten G(N) 10 1 T OPEN G(N) 3 S 1 1 5 5 20 4 2 Z 15
Dijkstra-Algorithmus Schleife Falls Z gefunden, rekonstruiere Pfad und beende die Schleife Falls Z nicht gefunden, setze alle Nachfolger auf OPEN und berechne deren Kosten G(N) 10 1 T OPEN G(N) 3 S 1 1 2 20 5 5 20 3 10 4 2 Z 15
Dijkstra-Algorithmus Schleife Falls Z gefunden, rekonstruiere Pfad und beende die Schleife Falls Z nicht gefunden, setze alle Nachfolger auf OPEN und berechne deren Kosten G(N) Ordne OPEN bezüglich G(N) aufsteigend 10 1 T OPEN G(N) 3 S 1 1 2 20 5 5 20 3 10 4 2 Z 15
Dijkstra-Algorithmus Schleife Falls Z gefunden, rekonstruiere Pfad und beende die Schleife Falls Z nicht gefunden, setze alle Nachfolger auf OPEN und berechne deren Kosten G(N) Ordne OPEN bezüglich G(N) aufsteigend 10 1 T OPEN G(N) 3 S 1 1 3 10 5 5 20 2 20 4 2 Z 15
Dijkstra-Algorithmus Schleife Wiederhole die Schleife S Z 1 2 3 4 5 20 10 15 T OPEN G(N)
Dijkstra-Algorithmus Z 1 2 3 4 5 20 10 15 T OPEN G(N) S Z 1 2 3 4 5 20 10 15 T OPEN G(N)
Dijkstra-Algorithmus Z 1 2 3 4 5 20 10 15 T OPEN G(N) S Z 1 2 3 4 5 20 10 15 T OPEN G(N) 11
Dijkstra-Algorithmus Z 1 2 3 4 5 20 10 15 T OPEN G(N) 11 S Z 1 2 3 4 5 20 10 15 T OPEN G(N) 11
Dijkstra-Algorithmus Z 1 2 3 4 5 20 10 15 T OPEN G(N) 11 S Z 1 2 3 4 5 20 10 15 T OPEN G(N) 1 3 4 G(4) = 11
Spezialisierung zu Algorithmus A Problem Dijkstra-Algorithmus sucht in allen Richtungen Idee Suche bevorzugt in Richtung des Zielknotens S Z Gerichtete Suche Ungerichtete Suche
Spezialisierung zu Algorithmus A Problem Dijkstra-Algorithmus sucht in allen Richtungen Idee Suche bevorzugt in Richtung des Zielknotens Umsetzung Abschätzung der Kosten von N zu Z: H(N) F(N) = G(N) + H(N) berechnen und OPEN bezüglich F(N) aufsteigend sortieren
Spezialisierung zu Algorithmus A G(N) N S 10 1 3 H(N) 1 5 20 5 4 Z 2 15 F(N) schätzt die Kosten, die der kürzeste Pfad von S zu Z, der zwangsweise über N führt, besitzt.
Algorithmus A* Notation G(N), H(N) (geschätzte Kosten) G*(N), H*(N) (wirkliche Kosten) Gilt H(N) H*(N), dann findet Algorithmus A immer den kürzesten Pfad zum Zielknoten. Algorithmus A wird zu Algorithmus A*.
Eigenschaften von A* Definition Eigenschaft 4 Eigenschaft 6 Ein Algorithmus ist zulässig, wenn er immer den kürzesten Pfad vom Startkonten zum Zielkonten findet, wenn dieser existiert. Eigenschaft 4 A* ist zulässig. Eigenschaft 6 A1 und A2 sind zwei Versionen von A* A2 ist besser informiert als A1, falls H1(N) < H2(N) A2 erkundet höchstens die gleiche Anzahl von Knoten wie A1
Eigenschaften von A* Nj H(Nj) C(Nj ,Nk) Nk H(Nk) Monotonie-Einschränkung C(Nj ,Nk) H(Nj) - H(Nk), bzw. H(Nk) + C(Nj ,Nk) H(Nj)
Eigenschaften von A* Eigenschaft 7 Ist die Monotonie-Einschränkung erfüllt, dann hat der A*-Algorithmus den kürzesten Pfad zu jedem Knoten gefunden, der zur Erkundung ausgewählt wird.
Eigenschaften von A* 4 2 Z 1 S H(2)=6 3 OPEN 7 F(3)=7+1=8 H(3)=1
Eigenschaften von A* 4 2 Z 1 S H(2)=6 3 OPEN 7 F(2)=3+6=9 H(3)=1 Widerspruch! C(2,3)=2 H(6)-H(3)=5
Adaption des A*-Algorithmus auf die Routenplanung Graph besitzt Geometrie H(N) H*(N) muss erfüllt sein. Luftlinie von N zu Z * höchste Geschwindigkeit
Adaption des A*-Algorithmus auf die Routenplanung Luftlinie = euklidischen Abstand eukl(N) = Wurzel [(xZ - xN)² + (yZ - yN)²] Höchste Geschwindigkeit = maximale im Graph vorkommende Geschwindigkeit Vmax H(N) = Vmax * eukl(N)
Vergleich mit anderen Algorithmen Beispiele für die Größenordnung der Graphen:
Laufzeit und Speicherplatz ( n ... Anzahl der Knoten e ... Anzahl der Kanten) Floyd-Algorithmus einmal ausführen, um alle kürzesten Wege im Graphen zu finden Anwenden, wenn viele kürzeste Wege im Graphen gesucht werden
Dijkstra-Alogrithmus Unterschied zum A*-Algorithmus Dijkstra-Algorithmus: F(N) = G(N) A*-Algorithmus: F(N) = G(N) + H(N) Speicherplatz ist für beide Algorithmen gleich Laufzeitunterschiede wegen H(N)
Dijkstra-Alogrithmus Empirische Untersuchungen von Stephan Hasselberg haben ergeben: A*-Algorithmus untersucht 2 bis 5 mal weniger Knoten Vorteil wird nahezu aufgehoben wegen H(N) Bei großen geometrischen Distanzen zwischen S und Z wird H(N) so rechenintensiv, dass der Dijkstra-Algorithmus schneller ist
Schlussbemerkung War alles umsonst? Overdo-Faktor: F(N) = G(N) + fOV * H(N) mit fOV > 1 Bei guter Wahl maximale Fehler in Grenzen durchschnittliche Fehler klein
Vielen Dank für die Aufmerksamkeit!