410 likes | 628 Views
Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung. GIS Seminar WS 02/03 Christian Siemes. Übersicht. Wiederholung Dijkstra-Algorithmus Ableitung des A*-Algorithmus Wichtigste Eigenschaften Adaption auf die Routenplanung
E N D
Grundlagen des A*-AlgorithmusundAnwendung in der Routenplanung GIS Seminar WS 02/03 Christian Siemes
Übersicht • Wiederholung • Dijkstra-Algorithmus • Ableitung des A*-Algorithmus • Wichtigste Eigenschaften • Adaption auf die Routenplanung • Vergleich mit Floyd-Algorithmus und Dijkstra-Algorithmus
10 1 3 1 5 20 5 4 2 15 Problemvorstellung
Startknoten 10 1 3 1 Zielknoten 5 20 5 4 2 15 Problemvorstellung
kürzester Weg 10 10 1 1 3 3 1 1 5 5 20 20 5 5 4 4 2 2 15 15 Problemvorstellung 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
10 T OPEN G(N) 1 S 3 1 1 0 5 5 20 4 2 Z 15 Dijkstra-Algorithmus • Initialisieren • OPEN und T schaffen • S auf OPEN setzen mit G(N) = 0
Dijkstra-Algorithmus • Schleife • Falls OPEN leer, beende die Schleife 10 T OPEN G(N) 1 S 3 1 1 0 5 5 20 4 2 Z 15
5 Z 10 1 S 3 1 5 5 20 4 2 15 Dijkstra-Algorithmus OPEN G(N)
Dijkstra-Algorithmus • Schleife • Falls OPEN leer, beende die Schleife • Entferne den ersten Knoten aus OPEN und setze ihn in T 10 T OPEN G(N) 1 S 3 1 1 0 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 T OPEN G(N) 1 S 3 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 T OPEN G(N) 1 S 3 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 T OPEN G(N) 1 S 3 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 T OPEN G(N) 1 S 3 1 2 20 1 5 5 20 3 10 4 2 Z 15
Dijkstra-Algorithmus • Ordne OPEN bezüglich G(N) aufsteigend • 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 T OPEN G(N) 1 S 3 1 2 20 1 5 5 20 3 10 4 2 Z 15
Dijkstra-Algorithmus • Ordne OPEN bezüglich G(N) aufsteigend • 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 T OPEN G(N) 1 S 3 1 3 10 1 5 5 20 2 20 4 2 Z 15
10 T OPEN G(N) 1 S 3 1 3 10 1 5 5 20 2 20 4 2 Z 15 Dijkstra-Algorithmus • Schleife • Wiederhole die Schleife
10 T OPEN G(N) 1 S 3 1 3 10 1 5 5 20 2 20 4 2 Z 15 10 T OPEN G(N) 1 S 3 1 2 20 1 5 5 20 3 4 2 Z 15 Dijkstra-Algorithmus
10 T OPEN G(N) 1 S 3 1 2 20 1 5 5 20 3 4 2 Z 15 10 T OPEN G(N) 1 S 3 1 2 15 1 5 5 20 4 11 3 4 2 Z 15 Dijkstra-Algorithmus
10 T OPEN G(N) 1 S 3 1 2 15 1 5 5 20 4 11 3 4 2 Z 15 10 T OPEN G(N) 1 S 3 1 4 11 1 5 5 20 2 15 3 4 2 Z 15 Dijkstra-Algorithmus
10 T OPEN G(N) 1 S 3 1 4 11 1 5 5 20 2 15 3 4 2 Z 15 1 3 4 10 T OPEN G(N) 1 S 3 1 2 15 1 5 5 20 3 4 2 Z 15 4 Dijkstra-Algorithmus G(4) = 11
S Z S Z Gerichtete Suche Ungerichtete Suche Spezialisierungzu Algorithmus A • Problem • Dijkstra-Algorithmus sucht in allen Richtungen • Idee • Suche bevorzugt in Richtung des Zielknotens
Spezialisierungzu 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
Spezialisierungzu Algorithmus A • F(N) schätzt die Kosten, die der kürzeste Pfad von S zu Z, der zwangsweise über N führt, besitzt. G(N) N S 10 1 3 H(N) 1 5 20 5 4 Z 2 15
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 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
Nj H(Nj) C(Nj ,Nk) Nk H(Nk) Eigenschaften von A* Monotonie-EinschränkungC(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.
H(2)=6 4 2 Z 2 4 3 OPEN 3 7 F(3)=7+1=8 1 S H(3)=1 F(2)=3+6=9 Eigenschaften von A*
H(2)=6 4 2 Z 2 4 3 OPEN 3 7 F(2)=3+6=9 1 S H(3)=1 F(4)=11 Widerspruch! C(2,3)=2 H(6)-H(3)=5 Eigenschaften von A*
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