Prolog中的启发式搜索

时间:2014-01-24 15:53:12

标签: prolog heuristics

我通过简单的深度优先搜索解决了Prolog中的Bridge和Torch拼图。现在我试图通过启发式搜索来解决它。但我不知道如何在Prolog中定义启发式。

由于我在SWI-Prolog手册和谷歌中没有找到有用的例子,你能帮我找一些Prolog中使用启发式搜索的例子吗?或者给我一个提示,开始尝试启发式地解决这个问题。

2 个答案:

答案 0 :(得分:2)

你可以看看我使用Warnsdorff的启发式解决大型骑士之旅的答案:https://stackoverflow.com/a/21069014/220700但Warnsdorff的启发式(Warnsdorff规则)是非常强大 - 它始终有效,这对于一般的启发式来说并不常见。

一般使用启发式的主要思想是,如果你有一个列出所有可能移动的谓词,请按照一些规则对它们进行排序:第一个最短,第一个最大,等等。

A *(A star)是最常用的基于启发式算法的算法之一。只是google" prolog中的明星"很多信息。

约束逻辑编程也一直使用启发式方法:first_fail,most_constrained,maximum等。

答案 1 :(得分:2)

查看使用Logtalk分发的状态空间搜索示例(可以使用几个后端Prolog编译器运行,包括SWI-Prolog):

https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/searching

此示例定义了一个状态空间搜索框架,支持盲搜索和启发式搜索,并附带了几个示例,包括一个可能与您自己的解决方案进行比较的“桥”。您将在一些提供的示例中找到启发式示例。这个“搜索”示例还提供了分析支持,这对于比较不同启发式和搜索策略的有效性很有用。