70 likes | 359 Vues
The “Russian Farmer” Problem Continued. (F,W,G,C) (l, l, l, l). (r, l, r, l). (l, l, r, l). (r, r, r, l) (r, l, r, r). (l, r, l, l) (l, l, l, r). (r, r, l, r) (r, r, l, r). (l, r, l, r) (l, r, l, r). (r, r, r, r).
E N D
The “Russian Farmer” Problem Continued Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued
(F,W,G,C) (l, l, l, l) (r, l, r, l) (l, l, r, l) (r, r, r, l)(r, l, r, r) (l, r, l, l) (l, l, l, r) (r, r, l, r)(r, r, l, r) (l, r, l, r)(l, r, l, r) (r, r, r, r) Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued
?- go( state(left,left,left,left), state(right,right,right,right) ). A solution is: The farmer takes the Goat from left of the river to right The farmer crosses the river from right to left The farmer takes the Wolf from left of the river to right The farmer takes the Goat from right of the river to left The farmer takes the cabbage from left of the river to right The farmer crosses the river from right to left The farmer takes the Goat from left of the river to right A solution is: The farmer takes the Goat from left of the river to right The farmer crosses the river from right to left The farmer takes the cabbage from left of the river to right The farmer takes the Goat from right of the river to left The farmer takes the Wolf from left of the river to right The farmer crosses the river from right to left The farmer takes the Goat from left of the river to right No Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued
go(Start,Target):- path(Start, Target,[Start],Path), write(‘A solution is:’),nl, write_path(Path). path(Start, Target,Visited,Path):- move(Start, NextNode),% Generate a move not( unsafe(NextNode) ),% Check that it issafe not( member(NextNode,Visited) ),% Check for recurrence path(NextNode, Target,[NextNode |Visited],Path),!. path(Target, Target,Path,Path).% Reached the goal Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued
move(state(X,X,G,C),state(Y,Y,G,C)):-opposite(X,Y). % FARMER & WOLF move(state(X,W,X,C),state(Y,W,Y,C)):-opposite(X,Y).% FARMER &GOAT move(state(X,W,G,X),state(Y,W,G,Y)):-opposite(X,Y).%FARMER & Cbg. move(state(X,W,G,C),state(Y,W,G,C)):-opposite(X,Y).% FARMER alone unsafe( state(F,X,X,_) ):- opposite(F,X),!. % The wolf eats the goat Other unsafe clauses opposite(left,right). opposite(right,left). Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued
write_path( [] ). write_path( [H1,H2|T] ) :-write_move(H1,H2), write_path([H2|T]). write_move( state(X,W,G,C), state(Y,W,G,C) ) :-!, write(‘The farmer crosses the river from ‘), write(X),write(‘ to ‘),write(Y),nl. write_move( state(X,X,G,C), state(Y,Y,G,C) ) :-!, write(‘The farmer takes the Wolf from the ‘), write(X),write(‘side of the river to ‘),write(Y),nl. Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued
?-go(X,Y). ?-go(state(left,left,left,left),Y). Lecture 24 Farmer, Goat, Cabbage and Wolf Problem Continued