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