prolog中的启发式算法

时间:2011-01-05 00:14:32

标签: prolog

我对Prolog不是很有经验,我正在尝试解决一个关于使用启发式算法(例如A *或BFS或Hill-Climbing)的练习来找到给定问题的解决方案。

由于我不熟悉这种编程,谷歌搜索并没有真正帮助我,我想知道是否有人可以给我一个类似的已经解决过的例子的链接,看看这是怎么做的。<登记/> 我不是要复制任何东西,只是我确实研究过很多关于prolog commants等的东西。我确实知道这些算法在理论上是如何工作的以及它们如何解决问题(在我的练习中我认为BFS或A *会是好的选择)但我不明白我应该如何在prolog中编写一个实际使用算法并提供解决方案的程序。

只是一个澄清,我真的相信真正的prolog代码示例将非常有用,而不是对算法如何工作的理论解释。我知道如何解决问题,使其成为现实,特别是在prolog中什么我不明白..

Thnx提前..

1 个答案:

答案 0 :(得分:0)

奇怪的是,我最近在Prolog中实施了BFS。我没有在任何地方发布代码,我对此犹豫不决,因为它是一个可能重用的赋值的重新实现。

我可以给你实际的BFS定义:

% performs a BFS, with the given goal and queue
bfs( Goal, [[Goal|[Path]]|_], Path ).
bfs( Goal, [State|Rest], Result ) :-
    successors_list( State, Successors ),
    remove_seen( Successors, NewStates ),
    add_to_seen( NewStates ),
    append( Rest, NewStates, Queue ),
    bfs( Goal, Queue, Result ).

对于这个问题,“目标”是一个特定的数字,“路径”是达到该目标所需的一系列行动。第二个参数是队列,其中每个状态表示为两个元素的列表(第一个是当前数字,第二个是生成该数字所需的路径)。它返回在“Path”中获取给定数字所需的路径。使用断言将所见状态集记录在数据库本身中。

在此定义之外,一切都是特定于问题的。

编辑: 我应该说大多数都是特定于问题的。我重新访问了我的代码,进行了一些小的编辑,并改变了它解决的问题。这与我觉得发布它的任务有很大的不同,所以这里是:BFS in Prolog(AI)