Graphen und Graphenalgorithmen

Werbung
Graphen und Graphenalgorithmen
Robert Mückenheim
ASQ-Modul Literaturarbeit und Präsentation — 12.12.2016
1
Grundlegende Einführung in die
Graphentheorie
1.1
1.1.1
Aufbau von Graphen
Formaler Aufbau von Graphen
Ein gerichteter Graph G = (V, E) besteht aus
• V = {v1 , v2 , ..., v|V | } Knoten und
• E = {e1 , e2 , ..., e|E| } Kanten, wobei E ⊆ V × V
Dabei heißt ein Paar (v, v 0 ) ∈ E Kante von v nach v’ und eine Abfolge von
Kanten Weg von u nach v, wenn die Kantenfolge die Knoten u und v verbindet.
1.1.2
Darstellung von Graphen
Abbildung 1: ein gerichteter Graph
Gerichteter Graph G mit
• V = 1, 2, 3, 4
• E = e1, e2, e3, e4, e5
Wie in Abbildung 1 werden Knoten im Allgemeinen als Kreise dargestellt und
enthalten ihren Namen.
Kanten werden zumeist als Linien, im Falle von gerichteten Graphen als Pfeile,
dargestellt.
1.1.3
Weitere Formen von Graphen
• ungerichteter Graph
Bei ungerichteten Graphen läuft jede Kante sowohl von Knoten v zu Knoten v’, als auch von v’ zu v. Zudem ist auch hier jede Kante gleichwertig
und hat dasselbe Kantengewicht.
• gewichteter Graph
Ein gewichteter Graph kann sowohl ein gerichteter als auch ein ungerichteter Graph sein.Dabei hat jede Kante ein definiertes Gewicht (z.B. Kosten
oder Länge).
1
Mit gewichteten Graphen soll nun das Kürzeste-Wege-Problem betrachtet und
gelöst werden.
2
Methoden der Graphsuche und Lösung des
Problems
2.1
uninformierte Breitensuche mit Gewichtung
Bei der Breitensuche soll ein kürzester Weg von Startknoten S zu Zielknoten Z
gefunden werden. Dazu werden sukzessive alle Knoten des Graphen abgearbeitet. Dabei wird jeweils der Knoten als nächstes betrachtet, der die geringsten
Kosten hat um vom Startknoten zu ihm zu gelangen.
• Laufzeit
Im worst case müssen zudem alle Kanten betrachtet werden um den kürzesten Weg zu finden. Daher wird die Laufzeit mit O(| V | + | E |)
abgeschätzt.
• Vollständigkeit
Die Breitensuche ist vollständig, da in jedem Knoten V nur endlich viele
Alternativen (Kanten) vorhanden sind und damit ebenso nur endlich viele
verschiedene Wege von S zu Z. Das bedeutet dass, sofern eine Lösung
existiert, sie auch vom Algorithmus gefunden wird.
• Optimalität
Ohne Gewichtung der Kanten (oder äquivalenter Gewichtung) ist die Breitensuche optimal, da immer der Weg von S nach Z mit kürzestem Pfad
gefunden wird. Mit Einführung verschiedener Gewichtung der Kanten ist
Breitensuche optimal für nicht-negative Kantengewichte. Das bedeutet
dass immer der kürzeste Weg gefunden wird bzw. eine optimale Lösung
des Problems.
2.2
informierte Suche mit A*-Algorithmus
Im Gegensatz zu uninformierten Suchverfahren wie Breitensuche gibt es bei der
Anwendung des A*-Algorithmus eine zusätzliche Information zur Suche des kürzesten Weges. Dabei handelt es sich um eine Schätzfunktion, auch h-Funktion
genannt. Diese Funktion schätzt die verbleibende Entfernung des aktuellen
Knotens zum Zielknoten Z. Bei Routennavigation wird dazu meist die Luftlinie
zwischen Start- und Zielpunkt verwendet. Diese erfüllt die wichtige Bedingung
für die Schätzfunktion:
Die geschätze Entfernung zum Ziel muss immer kleiner sein als die tatsächliche Entfernung.
2.2.1
Funktionsweise:
Der A*-Algorithmus untersucht stets den Knoten der geschätzt am schnellsten
zum Ziel führt. Dazu wird für jeden Knoten ein sogenannter f-Wert definiert.
Dabei gilt:
f (x) = g(x) + h(x)
wobei:
• g(x) ... bisherige Kosten von Startknoten zu aktuellem
• h(x) ... geschätzte Restkosten von aktuellem zu Zielknoten
2
Somit wird für jeden gefundenen Knoten dieser f-Wert bestimmt und der Knoten anhand dessen in eine Warteschlange eingefügt. Das heißt, dass die Knoten
innerhalb dieser aufsteigend nach ihrem f-Wert sortiert sind.
Zur Bestimmung des kürzesten Weges von S nach Z wird nun S aus der Warteschlange entfernt, da er zunächst den kleinsten f-Wert besitzt.
Es werden alle Nachbarn betrachtet und entweder ihr f-Wert bestimmt und
der Knoten an die korrekte Stelle eingefügt, oder der bereits bestehende f-Wert
und Position in der Warteschlange aktualisiert, sofern der neue Weg zu diesem
Knoten kürzer ist.
Dies wird genau so lange für den jeweils ersten Knoten der Warteschlange wiederholt bis diese entweder leer ist (→ keine Lösung) oder der Zielknoten entnommen wird. Da jeder Knoten seinen Vorgänger auf dem kürzesten Weg zu
ihm speichert, kann dann über einen Rücklauf vom Ziel- zum Startknoten der
kürzeste Weg konstruiert werden.
Listing 1: Pseudocode A*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
s t r u c t node {
node ∗ p a r e n t ;
int x , y ;
float f , g, h;
}
i n i t i a l i z e t h e open l i s t
i n i t i a l i z e the closed l i s t
p u t t h e s t a r t i n g node on t h e open l i s t ( you can l e a v e i t s f
at zero )
w h i l e t h e open l i s t i s n o t empty
f i n d t h e node w i t h t h e l e a s t f on t h e open l i s t , c a l l
i t "q"
pop q o f f t h e open l i s t
g e n e r a t e q s s u c c e s s o r s and s e t t h e i r p a r e n t s t o q
f o r each s u c c e s s o r
i f s u c c e s s o r i s the goal , stop the search
s u c c e s s o r . g = q . g + d i s t a n c e b e t w e e n s u c c e s s o r and
q
s u c c e s s o r . h = d i s t a n c e from g o a l t o s u c c e s s o r
successor . f = successor . g + successor . h
i f a node w i t h t h e same
t h e OPEN l i s t \
which has a l o w e r f
successor
i f a node w i t h t h e same
t h e CLOSED l i s t \
which has a l o w e r f
successor
o t h e r w i s e , add t h e node
21
22
23
24
25
26
27
end
push q on t h e c l o s e d
p o s i t i o n as s u c c e s s o r i s i n
than s u c c e s s o r , s k i p t h i s
p o s i t i o n as s u c c e s s o r i s i n
than s u c c e s s o r , s k i p t h i s
t o t h e open l i s t
list
end
2.2.2
Eigenschaften
• Vollständigkeit und Optimalität
Der A*-Algorithmus ist vollständig, da eine Lösung gefunden wird sofern
sie existiert.
Desweiteren ist er optimal für monotone Schätzfunktionen. Eine Schätzfunktion h(x) ist monoton ↔
– h(x) ist zulässig, d.h. sie überschätzt die Kosten nicht
3
– Für jeden Knoten k und jeden Nachfolgeknotenk 0 von k gilt:
h(k) ≤ c(k, k 0 ) + h(k 0 ),
wobei c(k, k 0 ) die tatsächlichen Kosten von k nach k 0 sind.
• Laufzeit
Die Laufzeit hat bei A*-Algorithmus eine geringere Bedeutung, da der
Hauptvorteil darin liegt dass deutlich weniger Knoten abgearbeitet werden als beispielsweise bei der Breitensuche. Außerdem hängt die Laufzeit
des Algorithmus maßgeblich von der verwendeten Schätzfunktion h und
der Implementierung der Open- und Closed-List ab. „Die verwendete Heuristik ist monoton. Die Open List wird als binärer Heap implementiert, die
Closed List als Array. (Jeder Knoten besitzt ein Flag, ob er auf der Liste
ist oder nicht.) Der A*-Algorithmus hat damit eine quadratische worstcase Laufzeit: O(| V |2 )“ (wikipedia.org: A*-Algorithmus)
• Vor- und Nachteile
Der A*-Algorithmus findet, sofern er nach Entnahme des Zielknotens nicht
gestoppt wird, auch den zweit-, dritt-, usw. kürzesten Weg zum Zielpunkt.
Das größte Problem des A*-Algorithmus ist folgendes:
„Computation time is not, however, A*’s main drawback. Because it keeps
all generated nodes in memory [...] A* usually runs out of space long before it runs out of time.“ (Russell, Norvig, 2003, S.101 )
Das bedeutet dass der zu geringe Speicherplatz oft die Funktionalität des
Algorithmus begrenzt.
3
Fazit
Trotz des hohen Speicherbedarfs und quadratischer Laufzeit im worst case ist
der A* Algorithmus einer der wichtigsten Algorithmen zur Bestimmung der kürzesten Wege und immernoch deutlich besser als uninformierte Algorithmen wie
Breitensuche.
Er wird nicht nur zur Bestimmung von Verkehrsrouten, sondern auch zur intelligenten Steuerung von Computerspielgegnern verwendet. Welches Verfahren
zur Lösung des Problems verwendet werden kann hängt von Komponenten wie
Größe des Graphen, vorhandene Gewichtung und Speicher ab.
Zudem gibt es unzählige weitere Suchverfahren mit verschiedenen informierten
und uninformierten Ansätzen.
Quellen:
• https://de.wikipedia.org/wiki/A*-Algorithmus(Stand: 12.12.2016)
• Russell, S.,Norvig, P.(2003): „Artificial Intelligence: A Modern Approach “, Pearsons Education Inc., Upper Sadle River, New Jersey, 73,
97-101.
• Abbildung 1: https://upload.wikimedia.org/wikipedia/commons/
thumb/5/51/Directed_graph.svg/231px-Directed_graph.svg.png
• Pseudocode: https://web.mit.edu/eranki/www/tutorials/search/
4
Herunterladen