Grundlagen des A*-Algorithmus und Anwendung in der

Werbung
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
• Vergleich mit Floyd-Algorithmus und
Dijkstra-Algorithmus
Problemvorstellung
10
3
1
5
4
15
5
1
20
2
Problemvorstellung
10
3
1
5
Zielknoten
4
15
5
1
20
2
Startknoten
Problemvorstellung
kürzester Weg
10
3
1
5
Zielknoten
4
15
5
1
20
2
Startknoten
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
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
0
Dijkstra-Algorithmus
• Schleife
– Falls OPEN leer, beende die Schleife
10
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
0
Dijkstra-Algorithmus
5
OPEN
Z
10
3
1
5
4
15
5
2
1
20
S
G(N)
Dijkstra-Algorithmus
• Schleife
– Falls OPEN leer, beende die Schleife
– Entferne den ersten Knoten aus OPEN und
setze ihn in T
10
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
0
Dijkstra-Algorithmus
• Schleife
– Falls OPEN leer, beende die Schleife
– Entferne den ersten Knoten aus OPEN und
setze ihn in T
10
3
1
5
Z
4
15
5
2
1
20
S
T
1
OPEN
G(N)
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
3
1
5
Z
4
15
5
2
1
20
S
T
1
OPEN
G(N)
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
3
1
5
Z
4
15
5
2
1
20
S
T
1
OPEN
G(N)
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
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
2
3
20
10
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
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
2
3
20
10
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
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
3
2
10
20
Dijkstra-Algorithmus
• Schleife
– Wiederhole die Schleife
10
3
1
5
Z
4
15
5
2
1
20
S
T
OPEN
G(N)
1
3
2
10
20
Dijkstra-Algorithmus
10
3
1
5
Z
4
5
1
5
15
20
5
2
T
OPEN
G(N)
1
2
20
T
OPEN
G(N)
1
3
2
10
20
3
10
3
Z
S
2
15
4
1
1
20
S
Dijkstra-Algorithmus
10
3
1
5
Z
4
5
1
5
15
20
5
2
T
OPEN
G(N)
1
2
20
T
OPEN
G(N)
1
2
4
15
11
3
10
3
Z
S
2
15
4
1
1
S
20
3
Dijkstra-Algorithmus
10
3
1
5
Z
4
5
1
5
15
20
5
2
T
OPEN
G(N)
1
4
2
11
15
T
OPEN
G(N)
1
2
4
15
11
3
10
3
Z
S
2
15
4
1
1
S
20
3
Dijkstra-Algorithmus
10
3
1
5
Z
4
5
1
5
15
20
5
T
OPEN
G(N)
1
4
2
11
15
T
OPEN
G(N)
1
2
15
3
10
3
Z
S
2
15
4
1
1
S
20
3
2
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
S
Z
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
H(N)
10
3
1
5
Z 4
15
5
1
S
20
2
• 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)
– G*(N), H*(N)
(geschätzte Kosten)
(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
Eigenschaften von A*
Nj
H(Nj)
C(Nj ,Nk)
Nk H(N )
k
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*
2
H(2)=6
4
2
Z
4
3
OPEN
S 1
7
3
H(3)=1
F(3)=7+1=8
F(2)=3+6=9
Eigenschaften von A*
2
H(2)=6
4
2
Z
4
3
OPEN
S 1
7
Widerspruch!
C(2,3)=2  H(6)-H(3)=5
3
H(3)=1
F(2)=3+6=9
F(4)=11
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:
Köln
NRW
Kalifornien
# Knoten # Kanten
31.011
67.490
457.124 1.046.087
1.580.305 3.934.788
Laufzeit und Speicherplatz
Floyd
Dijkstra
A*
Speicherplatz O(n²)
O(n + e)
O(n + e)
Laufzeit
O(n³) O(e+n log n) O(e+n log n)
( 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 DijkstraAlgorithmus 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!
Herunterladen