找到A *算法的启发式有哪些好方法?

时间:2011-04-16 16:26:58

标签: algorithm graph heuristics shortest-path a-star

你有一个方形瓷砖地图,你可以在8个方向中的任何一个方向移动。假设您有一个名为cost(tile1, tile2)的函数,它告诉您从一个相邻区块移动到另一个区块的成本,您如何找到一个可接受且一致的启发式函数h(y,goal)?在给定此设置的情况下,是否可以推广用于查找启发式的方法,或者根据cost函数的不同,它是否会有所不同?

3 个答案:

答案 0 :(得分:10)

Amit的教程是我在A * (Amit's page)上看到的最好的教程之一。你应该在这个页面上找到关于启发式的一些非常有用的提示。

以下是关于您的问题的引用:

  

在允许8个方向移动的方格上,使用对角线距离(L∞)。

答案 1 :(得分:5)

这取决于成本函数。

有一些常见的启发式方法,例如Euclidean distance(2d平面上两个图块之间的绝对距离)和Manhattan distance(绝对x和y三角形之和)。但是这些假设实际成本从不低于一定数量。如果您的代理人能够有效地沿对角线移动(即移动到对角线的成本小于2),则排除曼哈顿距离。如果移动到相邻区块的成本小于该移动的绝对距离(例如,如果相邻区块是从该区域“下坡”),则排除欧几里德距离。

修改

无论您的费用函数如何,您始终都会在h(t1, t2) = -∞中使用可接受且一致的启发式算法。这不是一个好的。

答案 2 :(得分:0)

是的,启发式方法取决于成本函数,有两种方式。首先,它必须是相同的单位。其次,实际节点的成本路径不能低于启发式算法的成本。

在现实世界中,用于道路网络导航之类的东西,你的启发式可能是“汽车在1.5倍速度限制下直接行驶的时间”。每个路段的成本将使用实际速度限制,这将提供更高的成本。

那么,瓷砖之间的成本函数是多少?它是基于物理属性还是在图表之外定义的?