对于16-Puzzle,假设我有3种启发式方法:h1,h2,h3
h1返回放错位置的瓷砖的数量
h2返回曼哈顿距离之和
h3返回反向对的总和
设置每个动作的成本,以使所有动作均不可接受(并非所有n的h(n)<= h *(n)都不是)。我想知道如何根据任何节点/状态的速度对它们进行排名。
我尝试测试我的代码。我的结果是(可预测):h3> h2> h1
由于它们不是最佳值,因此速度似乎取决于h个返回值的大小的降序。但是,我不确定该模式是否适用于所有节点/状态。我想知道是否有人可以帮助我确定。我曾尝试浏览资源以寻找这种模式的一般规则,但找不到任何东西。
我还想知道如何比较可允许和不可允许启发式算法的性能。
答案 0 :(得分:0)
在Logtalk发行版中,我有一个状态空间搜索示例,其中使用事件来比较搜索方法(例如,爬坡与最佳优先)和启发式性能。对于8谜题,包含启发式统计信息的输出示例为:
solution length: 6
number of state transitions: 15
ratio solution length / state transitions: 0.4
minimum branching degree: 2
average branching degree: 3.13333
maximum branching degree: 4
time: 0.02
使用性能 monitor 收集统计信息,以用于利用启发式方法的事件(读取的消息,用于公共谓词的消息)(特别是,计算谓词的下一个候选状态的谓词)。给定状态)。该示例的完整源代码可以在以下位置浏览:
https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/searching
针对您的情况,类似的解决方案应该是可能的。