我正在学习A *算法和dijkstra算法。并且发现唯一的区别是A *算法使用的启发式值。但是我怎样才能在我的图表中获得这些启发式值?我找到了A *算法的示例图(从A到J)。你们可以帮助我如何计算这些启发式值。
RED数字表示启发式值。
我目前的问题是创建迷宫逃脱。
答案 0 :(得分:2)
启发式是对您到目的地所需的额外距离的估算。
具体问题,针对不同问题以不同形式出现。对于你的图表,一个好的启发式方法可能是:从节点到目的地的实际距离,以英寸磁带或厘米刻度来衡量。有趣的权利,但这正是我的大学教授所做的。他在黑板上拿了一英寸的胶带,并提出了非常好的启发式方法。
所以h(A)可以是10个单位意味着通过物理上从A到J的测量尺度测量的长度。
当然,要使算法运行,启发式必须为admissible,否则可能会给出错误答案。
答案 1 :(得分:1)
为了获得估计(下界)两个节点之间的最小路径成本的启发式,有两种可能性(我知道):
了解图表所属的基础空间
作为示例,假设节点是平面上的点(具有x和y坐标),并且每个边的成本是相应节点之间的欧氏距离。在这种情况下,您可以通过计算U
和V
之间的欧氏距离来估算(下限)从节点U.position
到节点V.position
的路径成本。
另一个例子是道路网络,你知道它躺在地球表面。边缘的成本可能代表以分钟为单位的旅行时间。为了估算从节点U
到节点V
的路径成本,您可以计算两者之间的大圆距离,并将其除以可能的最大行进速度。
图表嵌入
另一种可能性是将图形嵌入到可以有效估计两个节点之间的路径距离的空间中。这种方法不对底层空间做任何假设,但需要预先计算。
例如,您可以在图表中定义地标L
。然后,您可以预先计算图形的每个节点与地标之间的距离,并在节点处确保此距离。为了估计A *搜索期间的路径距离,您现在可以使用预先计算的距离,如下所示:节点U
和V
之间的路径距离受|dist(U, L) - dist(V,L)|
的限制。您可以改进这种启发式方法使用了多个地标。
对于图表,您可以使用节点A和节点H作为地标,这将为您提供图形嵌入,如下图所示。您必须事先预先计算节点A和H与所有其他节点之间的最短路径,以便计算此嵌入。当您想要估算两个节点B和J之间的距离时,您可以计算两个维度中每个维度的距离,并使用两个距离中的最大值作为估计。这对应于L-infinity norm。