Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Prolog] игра-задача "Обезьяна и банан"


Автор: Stom 26.3.2008, 21:07
Предполагается, что существует некоторая комната, к потолку которой подвешена связка бананов. Также в комнате находится обезьяна и стул. Достать бананы без помощи стула обезьяна не может. 
Исходное состояние: обезьяна в точке a, стул в точке b, бананы в точке c, бананы - z, (S-перемещение)
S(a,b,c,[]).
Правила: 
1. Обезьяна, находясь в той же точке x0 что и стул, может перенести его в точку x1 
S(x1,x1,z,[carry(x0,x1);S]):-S(x0,x0,z,S).
2. Обезьяна, находясь в любой точке х0 может свободно перемещаться по комнате в произвольную точку х1
S(x1,y,z,[walk(x0,x1);S]):-S(x0,y,z,S).
Условие достижения успеха при котором обезьяна достает бананы:
Q([climb;S]):-S(x,x,x,S).
Цель: необходимо найти значение переменной S, удовлетворяющее предикату Q(S) - выполнение предиката реализует выполнение задачи
goal Q(S).
Т.е. решением будет выражение вида [climb, carry(b,c), walk(a,b)] - идти из точки А в точку Б; взять стул и отнести из точки Б в точку С; влезть на стул и сорвать бананы
Скрытый подводный камень: В дереве поиска этой задачи имеется бесконечная ветвь, попав в которую компилятор не сможет выйти, и несмотря на логическую корректность программы, ответа мы не получим. В данном примере компилятор пытается построить такое решение, при котором обезьяне пришлось бы носить стул по комнате бесконечно долго. Для преодоления этого нужно зафиксировать критерий, которому должны удовлетворять промежуточные решения задачи. Они формулируются в виде условий и правил с тем, чтобы  во время их выполнения гарантировать своевременный выход из бесконечной ветви дерева поиска
Программная реализация:
Код

clauses
S(a,b,c,[],Sx).
S(x1,x1,x,[carry(x0,x1)|S],Sx):-not(in_list(carry(_,_),Sx)),S(x0,x0,z,S,Sx).
S(x1,y,Z,[walk(x0,x1)|S],Sx):-not(in_list(walk(_,_),Sx)).
in_list(x,[x|z]):-List(z),in_list(x,z),!.
Q([climb|S]):-S(x,x,x,S,S).

goal
Q(S).

Помогите пожалуйста корректно описать домены и предикаты для задачки
user posted image 

Автор: Shaggie 27.3.2008, 07:13
Внимательно http://isr.by.ru/prolog/ch2_5.htm.

Автор: Stom 27.3.2008, 12:29
Цитата(Shaggie @ 27.3.2008,  07:13)
Внимательно http://isr.by.ru/prolog/ch2_5.htm.

Спасибо Shaggie
задача решена

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)