如果启发式函数h是单调的,为什么在A-star算法中减去h(x)?

时间:2019-01-14 22:07:00

标签: algorithm graph shortest-path a-star

也许我遗漏了一些非常简单明显的东西。

但是,如果试探函数h是单调的(一致的),我不明白为什么从总估算成本中减去源顶点的估算成本:

单音功能:f(x) = g(x) + h(x) 非单调函数:d'(x, y) = d(x, y) + h(y) − h(x)

UPD

我很困惑,完全误解了单调/非单调启发法。 @david-aisenstat's answer帮助我更正了以下问题:

A *算法可以用作Dijkstra算法的扩展。在其主循环的每次迭代中,它选择估计成本加上该顶点的路径成本最小的顶点:

对于顶点u及其后继v,使用某些启发式函数f(u, v) = d(u, v) + h(v),根据公式h计算总成本。其中:

    d(u,v)u的路径的
  • v成本
  • h(v)估算从v到目标顶点t的成本

如果对于任何相邻的顶点uv,则h(u) <= d(u, v) + h(v)确实是h是单调的。换句话说,图拥有triangle inequality属性。

它在A* algorithm的Wiki页面中声明:

  

如果启发式h满足图的每个边(x,y)的附加条件h(x)≤d(x,y)+ h(y)(其中d表示该边的长度),则h称为单调或一致。在这种情况下,可以更高效地实现A *-粗略地说,无需处理一次以上的节点(请参见下面的封闭集),并且A *等效于以降低的成本d'(x,运行Dijkstra算法) y)= d(x,y)+ h(y)− h(x)。

我的问题是:

  

和A *等效于以降低的成本d'(x,y)= d(x,y)+ h(y)-h(x)运行Dijkstra算法。

有任何等价证据吗?

很明显0 <= d(x, y) + h(y) - h(x)是可行的。但是:

  • 为什么选择此公式作为新的距离函数?
  • 是否有任何正式的证据证明它可行?
  • 为什么用d'(x,y)= d(x,y)+ h(y)来运行Dijkstra是不够的?
  • 其背后的数学原理是什么?

1 个答案:

答案 0 :(得分:2)

标记为“非单调”的条件实际上是单调的条件。 “单调”下的方程式是如何推导新的距离函数d'的过程,该函数将一致的启发式h合并到d中。然后,您可以在d'上运行Dijkstra,除非通过h的值,否则它不会查看d'

维基百科中A *的伪代码省略了减法,因为它涉及一般可允许的启发式情况,该情况将f(n) = g(n) + h(n)用作通过路径使用节点n的解决方案成本的下限费用为g(n)