使用Iterative Deepening Search将Prolog卡在无限循环中

时间:2014-03-22 11:59:35

标签: prolog depth-first-search iterative-deepening

我正在Prolog中写一个目标搜索代理。我有两个名为search的谓词。问题有Type == explore而另一个Type == climb
请注意,使用的深度是常量= 10.程序为我的所有测试用例提供了正确的路径,但它们并不是最短的,所以from here我想到了使用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).


修改
好的,现在我知道它与指定的“深度”有关。我从MaxDepth中移除了约束depthfirst,现在它正在运行。然而,最初的第一个是在给定深度中找到解决方案,那么为什么它无法使用迭代深化来完成 - 按照我指定的方式完成?

0 个答案:

没有答案