Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Denksportaufgaben mit Prolog lösen

Ähnliche Präsentationen


Präsentation zum Thema: "Denksportaufgaben mit Prolog lösen"—  Präsentation transkript:

1 Denksportaufgaben mit Prolog lösen

2 Aufgabe Am Nordufer eines Flusses stehen 3 Missionare und 3 Kannibalen. Ihr Boot kann höchstens 3 Personen tragen. Bei der Flussüberquerung dürfen die Missionare nie in der Minderzahl sein, weder am Ufer noch im Boot, da sie sonst von den Kannibalen überwältigt werden. Wie kann die Überfahrt organisiert werden? Gesucht ist ein „Weg“, der von einem vorgegebenen Anfangszustand in den gewünschten Endzustand führt. Dabei durchläuft er eine Menge möglicher Zustände. Denksportaufgaben mit Prolog

3 Modellierung Beschreibung eines Zustands durch eine Liste [M,K,B]
M: Anzahl der Missionare am Nordufer K: Anzahl der Kannibalen am Nordufer B: 1 / -1 für Boot am Nord- / Südufer Wegsuche von [3,3,1] nach [0,0,-1] (Tiefensuche) Denksportaufgaben mit Prolog

4 Drei Kannibalen im Boot Zwei Kannibalen im Boot
Mögliche Züge zug([M1,K1,B1],[M2,K2,B2]) :- B2 is –B1, Drei Kannibalen im Boot Zwei Kannibalen im Boot Ein Kannibale im Boot Kein Kannibale im Boot K2 is K1, M2 is M1-B1, oder M2 is M1-2*B1, oder M2 is M1-3*B1, K2 is K1-B1, M2 is M1, oder M2 is M1-1*B1, oder M2 is M1-2*B1, K2 is K1-2*B1, M2 is M1, K2 is K1-3*B1, M2 is M1, not(verboten([M2,K2])). Denksportaufgaben mit Prolog

5 Drei Kannibalen im Boot Zwei Kannibalen im Boot
Mögliche Züge zug([M1,K1,B1],[M2,K2,B2]) :- B2 is –B1, K1 Drei Kannibalen im Boot Zwei Kannibalen im Boot Ein Kannibale im Boot Kein Kannibale im Boot K2 is K1, M2 is M1-B1, oder M2 is M1-2*B1, oder M2 is M1-3*B1, K2 is K1-B1, M2 is M1, oder M2 is M1-1*B1, oder M2 is M1-2*B1, K2 is K1-2*B1, M2 is M1, K2 is K1-3*B1, M2 is M1, not(verboten([M2,K2])). K1 Fließmuster: (i,o) Denksportaufgaben mit Prolog

6 Verbotene Zustände verboten([M,_]):- M < 0.
verboten([_,K]):- K < 0. verboten([M,_]):- M > 3. verboten([_,K]):- K > 3 . verboten([M,K]):- M < K, M > 0 . (Gefahr am Nordufer) verboten([M,K]):- 3-M < 3-K . (Gefahr am Südufer) Denksportaufgaben mit Prolog

7 Problem Bei Start [3,3,1] und Ziel [0,0,-1] „verirrt“ sich die Suche.
Abhilfe: Die Suchtiefe wird beschränkt. suchT(Ziel,Weg,Weg,_):- Weg=[Ziel|_]. suchT(Ziel,Spur,Weg,N) :- N > 0, istNeu(Neu,Spur), suchT(Ziel,[Neu|Spur],Weg,N-1). Denksportaufgaben mit Prolog

8 Problem Bei Start [3,3,1] und Ziel [0,0,-1] „verirrt“ sich die Suche.
Abhilfe: Die Suchtiefe wird beschränkt. suchT(Ziel,Weg,Weg,_):- Weg=[Ziel|_]. suchT(Ziel,Spur,Weg,N) :- N > 0, istNeu(Neu,Spur), suchT(Ziel,[Neu|Spur],Weg,N-1). Fließmuster: (i,o) istNeu(Neu,[A|Liste]) :- zug(A,Neu), not (member(Neu,Liste)). Denksportaufgaben mit Prolog

9 Anfrage goal(N):-Start=[3,3,1], Ziel=[0,0,-1], sucheT(Start,[Ziel],WegListe,N), ausgabeL([WegListe]), fail. Start und Ziel vertauscht, weil die Züge in umgekehrter Reihenfolge in der Liste gespeichert werden. Denksportaufgaben mit Prolog

10 Anfrage goal(N):-Start=[3,3,1], Ziel=[0,0,-1], sucheT(Start,[Ziel],WegListe,N), ausgabeL([WegListe]), fail. Prädikat zur Ausgabe des gefundenen Weges Denksportaufgaben mit Prolog

11 Weitere Aufgaben Ein Bauer steht mit einem Wolf, einer Ziege und einem Kohlkopf am Nordufer eines Flusses. Es gibt ein Boot zum Übersetzen, doch es kann außer dem Bauern nur einen weiteren Passagier befördern. Wolf und Ziege sowie Ziege und Kohlkopf dürfen nicht allein an einem Ufer zurückgelassen werden. Wie kann der Bauer alle heil zum Südufer befördern? Denksportaufgaben mit Prolog

12 Weitere Aufgaben Es gibt zwei Krüge, die 8 bzw. 5 Liter fassen und keine Markierungen haben. Das Problem ist, mit diesen zwei Krügen 4 Liter abzufüllen. Ein 8-Liter-Gefäß ist mit Milch gefüllt. Mit Hilfe zweier weiterer Gefäße von 3 und 5 Litern sollen durch mehrmaliges Umfüllen 4 Liter Milch abgemessen werden. Denksportaufgaben mit Prolog

13 Weitere Aufgaben Vier Personen wollen nachts eine Hängebrücke benutzen. Aus Sicherheitsgründen muss dabei eine Taschenlampe benutzt werden. Es ist nur eine Lampe vorhanden, die eine Leuchtzeit von genau 60 Minuten hat. Außerdem dürfen nur zwei Personen gleichzeitig auf der Brücke sein. Die Personen sind unterschiedlich schnell: Anna braucht 5 Minuten, Boris braucht 10 Minuten, Clara braucht 20 Minuten, Dirk braucht 25 Minuten. Wenn zwei Personen zusammen gehen, muss sich die schnellere nach der langsameren richten. Die Lampe darf nicht zurückgeworfen werden, sondern muss von Hand zu Hand übergeben werden. In welcher Reihenfolge müssen die Personen die Brücke benutzen, damit in 60 Minuten alle vier die Brücke überquert haben? Denksportaufgaben mit Prolog

14 Ende

15 Ausgabe einer Lösung Ausgabe der einzelnen Lösungslisten ausgabeL([]).
ausgabeL([Kopf|Rest]) :- write('[M, K, B]'), nl, ausgabe(Kopf),nl, ausgabeL(Rest). Ausgabe der einzelnen Glieder einer Lösungsliste ausgabe([]). ausgabe([Kopf|Rest]) :- write(Kopf), nl, ausgabe(Rest). Denksportaufgaben mit Prolog

16 Ende

17 Tiefensuche sucheT(Ziel,[Ziel|_]). sucheT(Ziel, Spur) :-
istNeu(Neu,Spur), sucheT(Ziel, [Neu|Spur]). istNeu(Neu, [A|La]):- benachbart(Neu, A), not(member(Neu, La)). Denksportaufgaben mit Prolog


Herunterladen ppt "Denksportaufgaben mit Prolog lösen"

Ähnliche Präsentationen


Google-Anzeigen