Knoten

Werbung
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
Herunterladen