Top Banner
PATHFINDING WITH PROLOG Simon Glumpler, Lukas Schelbert AAI HS16
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

Oct 27, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FRAGEN?