Пролог застрял в бесконечной петле, используя поиск итерационных углублений

110
18

Я пишу агент поиска цели в Prolog. У меня есть два предиката с именем search. Один из них, в котором проблема имеет Type == explore и другой Type == climb.
Обратите внимание на глубину используется константа = 10. Программа дает правильные пути для всех моих тестов, однако они не были короткими, так здесь у меня появилась идея использования length(Actions,_).
Он отлично работает для первого предиката search но когда я пытаюсь добавить что-то подобное для последнего предиката поиска, удовлетворяющего Type == climb, он переходит в бесконечный цикл/занимает слишком много времени. Это то, что у меня было для этого:

search(Problem,Actions):-
Problem = [Goal-A-X,Y-Depth],
Goal = [Type,_,_],
Type == climb,
length(List,_),
depthfirst([A-X,Y],List,Depth),!,concat(List,[climb],Actions).

Почему это происходит?


Вот полный код:

search(Problem,Actions):-
Problem = [Goal-A-X,Y-Depth],
Goal = [Type,_,_],
Type == explore,
length(Actions,_),
depthfirst([A-X,Y],Actions,Depth),!.
search(Problem,Actions):-
Problem = [Goal-A-X,Y-Depth],
Goal = [Type,_,_],
Type == climb,
depthfirst([A-X,Y],List,Depth),concat(List,[climb],Actions).

depthfirst([A-X,Y],[],_):-
goal([_,Gx,Gy]),
Gx == X,
Gy == Y.
depthfirst([A-X,Y],[Action|Sol],Maxdepth):-
Maxdepth > 0,
s([A-X,Y],[A1-X1,Y1],Action),
Max1 is Maxdepth - 1,
depthfirst([A1-X1,Y1],Sol,Max1).


EDIT:
Хорошо, теперь я знаю, что это связано с заданием "Глубина". Я удалил ограничение MaxDepth с depthfirst, и теперь он работает. Однако исходная глубина находила решение в данной глубине, а затем, как получилось, что она не в состоянии сделать это с помощью Iterative Deepening - сделана так, как я указал?

спросил(а) 2014-03-22T14:59:00+04:00 6 лет, 7 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема