Graphen und Graphenalgorithmen Robert Mückenheim Informatik B.Sc. Gliederung • 1. allgemeine Motivation für Graphen • 2. Einführung in die Graphentheorie • Grundlagen der Graphentheorie • Darstellung von Graphen • Weitere Formen von Graphen • 3. einfache Graphen-Algorithmen am Beispiel Breitensuche • 4. komplexere Suchalgorithmen • Algorithmus von Dijkstra • A* - Algorithmus • 5. Fazit 1. Allgemeine Motivation für Graphen • Problem: kürzester Weg zwischen 2 Punkten (Knoten) Modellierung als Probleme der Graphentheorie 1. Allgemeine Motivation für Graphen • Das Königsberger Brückenproblem • Ist es möglich einen Rundweg zu bestimmen, sodass • Jede Brücke genau einmal überquert wird • Startpunkt und Endpunkt gleich sind ? Bildquelle: http://www.mathe.tu-freiberg.de/~hebisch/cafe/koenigsberg.gif 1. Allgemeine Motivation für Graphen • Das Königsberger Brückenproblem Antwort: Nein, es ist nicht möglich. 2. Einführung in die Graphentheorie • 2. Einführung in die Graphentheorie • Grundlagen der Graphentheorie • Darstellung von Graphen • Weitere Formen von Graphen Bildquelle: http://www.python-kurs.eu/images/simple_graph_isolated.png Grundlagen der Graphentheorie Formalien • Gerichteter Graph G = (V,E) besteht aus • V = {1,2,…,|V|} Knoten • E = {e1,e2,…,|E|} Kanten, wobei E ⊆ V x V • Paar (v,v‘) ∈ E heißt Kante von v nach v‘ • Abfolge von Kanten heißt Weg von u nach v wenn Kantenfolge die Knoten u und v verbindet Darstellung von Graphen Knoten und Kanten v Knoten werden als Kreise dargestellt e v‘ Kanten werden als Pfeile dargestellt Darstellung von Graphen gerichtete Graphen Insgesamt: Gerichteter Graph G = (V,E) mit V = {v1,v2,v3,v4,v5,v6) und E = {e1,e2,e3,e4,e5,e6,e7,e8} Bildquelle: http://wvsg.schulen2.regensburg.de/joomla/images/Faecher/Informatik/Infor matik_11/Bilder/3_1_Einfache_Graphen/graph_2.png Weitere Formen von Graphen • Es gibt viele Formen von Graphen • Bisher: ungerichteter Graph • Jede Kante hat eine feste Richtung von Knoten v zu Knoten v‘ • Jede Kante ist gleichwertig Weitere Formen von Graphen • Ungerichteter Graph • Jede Kante läuft von v zu v‘ und von v‘ zu v keine feste Richtung • Jede Kante gleichwertig • Gewichteter Graph • Kann gerichteter oder ungerichteter Graph sein • Jede Kante hat ein Gewicht (z.B. Länge oder Kosten) 3. einfache Graphen-Algorithmen am Beispiel Breitensuche 1 10 gewichteter Graph G 9 4 Ziel: kürzester Weg zwischen 2 Knoten 3 2 4 Möglich mit Breitensuche 9 2 5 7 6 7 1 10 Funktionsweise ohne Gewichtung • Durchläuft die Knoten nach ihrer Entfernung zum Startknoten S zuerst direkte Nachbarn, dann Nachbarn dieser Knoten • läuft bis keine neuen Nachbarn gefunden werden Def. Nachbarn: Sei G=(V,E) ein einfacher ungerichteter Graph. Ein Knoten x ∈ V heißt Nachbar von v ∈ V d.h. es gibt eine Kante zwischen x und v. ∃ e ∈ E mit e=(x,v) Funktionsweise mit Gewichtung • Durchläuft die Knoten nach der Länge des bisherigen Weges von Startknoten S Demonstration an kleinem Beispiel 1 10 gesucht: 9 4 Kürzester Weg von Knoten 1 zu Knoten 7 3 2 4 9 2 5 7 6 7 1 10 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 1.Schritt: Wähle Kante (1,3) mit Gewicht 4 Weg (1,3) hat Gewicht 4 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 2.Schritt: Wähle Kante (3,5) mit Gewicht 9 Weg (1,3,5) hat Gewicht 13 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 3.Schritt: Wähle Kante (1,4) mit Gewicht 9 da 9 < 13 Weg (1,3,5) hat Gewicht 13 Weg (1,4) hat Gewicht 9 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 4.Schritt: Wähle Kante (4,6) mit Gewicht 10 Weg (1,3,5) hat Gewicht 13 Weg (1,4,6) hat Gewicht 19 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 5.Schritt: Wähle Kante (1,2) mit Gewicht 10 da 10 <13 <19 Weg (1,3,5) hat Gewicht 13 Weg (1,4,6) hat Gewicht 19 Weg (1,2) hat Gewicht 10 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 6.Schritt: Wähle Kante (2,5) mit Gewicht 2 Weg (1,3,5) hat Gewicht 13 Weg (1,4,6) hat Gewicht 19 Weg (1,2,5) hat Gewicht 12 Demonstration an kleinem Beispiel 1 10 9 4 3 2 4 9 2 5 7 6 7 1 10 6.Schritt: Wähle Kante (5,7) mit Gewicht 7 Weg (1,3,5) hat Gewicht 13 Weg (1,4,6) hat Gewicht 19 Weg (1,2,5,7) hat Gewicht 19 Demonstration an kleinem Beispiel 1 10 7.Schritt: Weg (1,2,5,7) hat Gewicht 19 und erreicht Zielknoten 7 2 Weg (1,2,5,7) mit Gewicht 19 ist ein kürzester Weg von Knoten 1 zu Knoten 7 2 5 7 7 4. komplexere Suchalgorithmen • uninformierte Suchalgorithmen • zu langsam • speicheraufwendig • Komplexere Verfahren notwendig Algorithmus von Dijkstra und A*-Algorithmus Algorithmus von Dijkstra Funktionsweise • Berechnet kürzeste Wege von Startknoten S zu allen anderen Knoten • schrittweise alle Nachbarn bis jeder Knoten besucht • Umsetzung über Warteschlange Algorithmus von Dijkstra Funktionsweise • Warteschlange zunächst leer • Knoten mit kürzestem Weg von Startknoten steht ganz vorn (zu Beginn Startknoten selbst, da Entfernung 0) • Kosten für alle anderen werden auf INF gesetzt Algorithmus von Dijkstra Funktionsweise Knoten enthalten und neuer Weg kürzer? Ja: Setze Kosten auf neuen Wert Nein: Knoten noch garnicht besucht worden? Ja: Knoten einfügen und Kosten setzen Algorithmus von Dijkstra Funktionsweise • Wiederholung bis Warteschlange leer und alle Knoten abgearbeitet Ergebnis: Kürzeste Wege von S zu allen anderen Knoten Algorithmus von Dijkstra Pseudocode d(v[1]) ← 0 FOR i = 2,..,n DO d(v[i]) ← ∞, parent(v[i]) ← NULL WHILE queue ≠ ∅ DO u = queue.extractMin() FOR ALL (u,w) ∈ E DO dist ← d(u) + l(u,w) IF w ∈ queue AND d(w) > dist DO d(w) = dist, parent(w) = (u,w) ELSE IF parent(w) == NULL THEN d(w) = dist, parent(w) = (u,w) queue.insert(w,dist) Algorithmus von Dijkstra praktische Anwendung • Demonstration an kleinem Beispiel und mit Pseudocode Applet TU München zu Algorithmus von Dijkstra Algorithmus von Dijkstra Zusammenfassung • Schon guter Algorithmus zur Bestimmung des kürzesten Weges • ABER: • Zu viele besuchte Knoten • Nur Weg zu einem Endknoten gesucht (z.B. Navigation) A* - Algorithmus A*-Algorithmus Funktionsweise • Informierter Suchalgorithmus • Was ist diese zusätzliche Information? Eine Schätzfunktion ! A*-Algorithmus Funktionsweise • jeder Knoten in einem von drei Zuständen: • Knoten unbekannt • Knoten in Warteschlange • Knoten fertig abgearbeitet A*-Algorithmus Funktionsweise • Startknoten wird in leere Warteschlange eingefügt • Jeder Knoten hat f-Wert • Endet wenn Warteschlange leer (kein Weg gefunden) oder Zielknoten entnommen A*-Algorithmus Funktionsweise • Wenn Knoten entnommen wird Fertig abgearbeitet, fahre mit Nachbarn fort • Für jeden Nachbarn: • Nachbar bereits abgearbeitet ? • Nachbar in Warteschlange? • Nachbar noch nicht in Warteschlange (unbekannt)? A*-Algorithmus Konstruktion des Weges • Jeder Knoten speichert Vorgänger auf kürzestem Weg zu ihm ab • Rücklauf von Ziel- zu Startknoten über diese Vorgänger Kürzester Weg von Start- zu Zielknoten gefunden A*-Algorithmus Pseudocode d(v[1]) ← 0, parent(v[1]) ← v[1] FOR i = 2,..,n DO d(v[i]) ← ∞, parent(v[i]) ← NULL h(v[i]) ← √(Σ(v[i].coord-ziel.coord)2) WHILE queue ≠ ∅ DO u = queue.extractMin() I F u == ziel DO RETURN "Weg gefunden" FOR ALL (u,w) ∈ E DO dist ← d(u) + l(u,w) IF w ∈ queue AND d(w) > dist DO d(w) = dist, f = dist + h(u) parent(w) = u ELSE IF parent(w) == NULL THEN d(w) = dist, f = dist + h(u) parent(w) = u, queue.insert(w,f) RETURN "Ziel nicht erreichbar" A*-Algorithmus praktische Anwendung • Demonstration an kleinem Beispiel und mit Pseudocode Applet TU München zu A* - Algorithmus A*-Algorithmus Besonderheiten • Findet Weg zwischen 2 bestimmten Knoten • findet auch zweit-, dritt-, viert-,… kürzesten Weg • Optimal für jede gegebene Schätzfunktion Einer der besten und häufigsten Algorithmen für kürzeste Wege und Navigation 5. Fazit • Verschieden Formen / Ansätze für Suchalgorithmen • Verschiedenste Anwendungen • A*- Algorithmus bester bekannter für das Problem 5. Fazit • Diskussion • Fragen? Anmerkungen? Vielen Dank für Ihre Aufmerksamkeit! Quellen • https://electures.informatik.uni-freiburg.de/portal/download/56/6782/26_Graphen_4up.pdf • http://www.tilman.de/uni/ws03/alp/tiefen-breitensuche.php • https://soi.ch/contests/2016/round2H/overview/ • Stuart Russell & Peter Norvig: „Artificial Intelligence: A Modern Approach“ (Second Edition 2003) • Melanie Herzog, Wolfgang F. Riedl, Lisa Velden Technische Universität München: „Der A* - Algorithmus“ (https://www-m9.ma.tum.de/graph-algorithms/spp-a-star) • Melanie Herzog, Wolfgang F. Riedl, Lisa Velden Technische Universität München: „Der Dijkstra-Algorithmus“ (https://www-m9.ma.tum.de/graph-algorithms/spp-dijkstra) • https://www-m9.ma.tum.de/graph-algorithms/spp-a-star/index_de.html