![Page 1: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/1.jpg)
PATHFINDING WITH PROLOG
Simon Glumpler, Lukas Schelbert
AAI HS16
![Page 2: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/2.jpg)
INHALT
• Einführung
• Verwendung
• Pathfinding Algorithmen
• Prolog
• Pathfinding mit Prolog
![Page 3: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/3.jpg)
EINFÜHRUNG
• Meistens: Optimaler Weg zwischen zwei Punkten
• Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten
Hindernissen
• Große Anstrengungen um Pathfinding-Algorithmen zu optimieren
• Reduzierung von Laufzeit und Speicherbedarf
![Page 4: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/4.jpg)
VERWENDUNG
• Games
• Routen-Planer
• Autonomes Navigieren
![Page 5: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/5.jpg)
PATHFINDING ALGORITHMEN
• Depth First Search
• Breadth First Search
• Dijkstra
• A*
![Page 6: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/6.jpg)
DEPTH FIRST SEARCH
S
1
862 4
5
97 103
![Page 7: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/7.jpg)
DEPTH FIRST SEARCH
• Einfach zu implementieren
• Gefundener Pfad ist nicht immer der kürzeste Pfad
• Berücksichtigt Pfadkosten nicht
![Page 8: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/8.jpg)
BREADTH FIRST SEARCH
S
1
653 4
2
98 107
![Page 9: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/9.jpg)
BREADTH FIRST SEARCH
• Einfach zu implementieren
• Findet immer kürzesten Pfad
• Schlechte Laufzeit
• Berücksichtigt Pfadkosten nicht
![Page 10: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/10.jpg)
DJIKSTRA
0
1 ?
4
7
6
2 3
1
7
32
4
![Page 11: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/11.jpg)
0
1 7
3
7
6
2 3
1
7
32
4
DJIKSTRA
![Page 12: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/12.jpg)
0
1 6
3
5
6
2 3
1
7
32
4
DJIKSTRA
![Page 13: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/13.jpg)
0
1 6
3
5
6
2 3
1
7
32
4
DJIKSTRA
![Page 14: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/14.jpg)
0
1 6
3
5
6
2 3
1
7
32
4
DJIKSTRA
![Page 15: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/15.jpg)
DIJKSTRA
• Berücksichtigt Pfadkosten
• Greedy Algorithmus
• Kann nicht mit negativen Kantengewichten umgehen
![Page 16: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/16.jpg)
A*
• Erweiterter Dijkstra-Algorithmus
• Nutzt Kenntnisse über die Suchstruktur zum Vorteil aus -> Heuristiken
• z. B. Luftlinie bzw. Euklidische Distanz
• Nächster zu besuchender Knoten wird gewählt mit
• Kosten total = Kosten bisher + geschätzte weitere Kosten
• Der nächste Knoten ist der mit den geringsten totalen Kosten
![Page 17: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/17.jpg)
A*
• Schnellster Algorithmus für Pathfinding (falls Heuristik gut gewählt)
• Findet immer optimale Lösung
• Eventuell grosser Speicherverbrauch
![Page 18: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/18.jpg)
PROLOG
• Deklarative Programmiersprache
• Wichtigste Logische Programmiersprache
• Programmation en Logique
• Alain Colmerauer
• Anfang 70er-Jahre
• Verschiedene Syntax-Dialekte und Implemenationen
• Computerlinguistik und Künstliche Intelligenz
• KI-Systems Watson aus Jeopardy!
![Page 19: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/19.jpg)
PROLOG
• Wissensdatenbank (Fakten und Regeln)
• Anfragen an die Wissensdatenbank
• Resultat: True wenn ableitbar, sonst False
• Hello-World-Beispiel ist eine Wissensdatenbank mit Stammbauminformationen
![Page 20: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/20.jpg)
PROLOG
Wissensdatenbank:
mann(adam).
mann(tobias).
frau(eva).
vater(adam,tobias).
mutter(eva,tobias).
Anfragen:
?- mann(tobias). => yes.
?- mann(stefan). => no.
?- mann(X).
X=adam
X=tobias
![Page 21: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/21.jpg)
PROLOG
Relgeloperator :-
grossvater(X,Y) :- vater(X,Z), vater(Z,Y).
grossvater(X,Y) :- vater(X,Z), mutter(Z,Y).
?- grossvater(adam,anna). => yes.
?- grossvater(X,frank). => X=adam
![Page 22: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/22.jpg)
PROLOG
Listen
[1,2,3,4] => Head: 1 und Tail: [2,3,4]
=> [ 1, [ 2, [ 3, [ 4, [] ] ] ] ]
![Page 23: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/23.jpg)
PROLOG
member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
?- member(2, ['anton', 'berta', 'caesar']).
false.
?- member('berta', ['anton', 'berta', 'caesar']).
true.
![Page 24: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/24.jpg)
CODE BEISPIEL
• Bahnverbindungen
• Kürzeste Verbindung
• Wissensdatenbank:
kante(saintgall, zurich, 80). kante(zurich, basel, 85).
kante(basel, bern, 100). kante(fribourg, lausanne, 10).
kante(lausanne , geneve, 68). kante(zurich , bern, 120).
kante(bern, fribourg, 10). kante(bern , neuchatel, 48).
kante(neuchatel , lausanne, 78). kante(zurich , solothurn, 99).
kante(solothurn , biel, 27). kante(biel , neuchatel, 29).
![Page 25: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/25.jpg)
CODE BEISPIEL
• Ziel:
?- go(zurich,geneve,Route).
Route = [zurich,bern,fribourg,lausanne,geneve]
![Page 26: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/26.jpg)
CODE BEISPIEL
go(Start, Dest, Route) :-
kurz_pfad([r(0, [Start])], Dest, R),
reverse(R, Route).
[ r( 0, [ Start ] ) ]
![Page 27: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/27.jpg)
CODE BEISPIEL
kurz_pfad([r(0, [Start])], Dest, R):
kurz_pfad(Routes, Dest, Route) :-
shortest(Routes, Shortest, RestRoutes),
proceed(Shortest, Dest, RestRoutes, Route).
![Page 28: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/28.jpg)
CODE BEISPIEL
shortest(Routes, Shortest, RestRoutes):
shortest([Route|Routes], Shortest, [Route|Rest]):-
shortest(Routes, Shortest, Rest),
shorter(Shortest, Route),
!.
shorter(r(M1,_), r(M2,_)):- M1 < M2.
![Page 29: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/29.jpg)
CODE BEISPIEL
proceed(Shortest, Dest, RestRoutes, Route):
proceed(r(Dist, [Last|Trail]), Dest, Routes, Route):-
findall(
r(D1, [Z, Last|Trail]),
legalnode(Last, Trail, Z, Dist, D1),
List
),
append(List, Routes, NewRoutes),
kurz_pfad(NewRoutes, Dest, Route).
![Page 30: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/30.jpg)
CODE BEISPIEL
legalnode(Last, Trail, Z, Dist, D1):
legalnode(X, Trail, Y, Dist, NewDist) :-
(kante(X, Y, Z); kante(Y, X, Z)),
legal(Y, Trail),
NewDist is Dist + Z.
![Page 31: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/31.jpg)
CODE BEISPIEL
go(Start, Dest, Route) :-
kurz_pfad([r(0, [Start])], Dest, R),
reverse(R, Route).
kurz_pfad(Routes, Dest, Route) :-
shortest(Routes, Shortest, RestRoutes),
proceed(Shortest, Dest, RestRoutes, Route).
![Page 32: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/32.jpg)
CODE BEISPIEL
shortest: Sucht die aktuell kürzeste Route
proceed: Sucht alle benachbarte Knoten des temporären Endpunktes der
kürzesten Route. Anschliessend wird auf alle gesammelten Routen
wieder die Methode kurz_pfad aufgerufen.
![Page 33: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/33.jpg)
![Page 34: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/34.jpg)
![Page 35: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/35.jpg)
![Page 36: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/36.jpg)
![Page 37: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/37.jpg)
![Page 38: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/38.jpg)
DEMO
![Page 39: PATHFINDING WITH PROLOG fileEINFÜHRUNG •Meistens: Optimaler Weg zwischen zwei Punkten •Suche nach der kostengünstigsten oder kürzesten Route mit den wenigsten Hindernissen](https://reader030.vdokument.com/reader030/viewer/2022040219/5e1a530d39d61c6a7c670836/html5/thumbnails/39.jpg)
FRAGEN?