algorithm - 使用 A* 使用启发式算法可以找到多少次优路径,该启发式算法稍微高估了剩余距离?

标签 algorithm optimization graph shortest-path a-star

假设您使用 A* 算法,其中启发式可能会高估剩余距离几米。最终的路径会不会比真正最短的路径长几公里?你能举一个发生这种情况的图的例子吗?它是什么样的图? 欧氏(直线)距离可能高估剩余距离的场景是:

  • 图的顶点位于平面上的 (x, y) 坐标,其中 x 和 y 是浮点型
  • 图形的某些顶点之间存在某些浮点长度的弧。弧的长度不小于其顶点之间的欧几里得距离(但对于弯曲/非直弧可以更大)
  • 但是,在运行 A* 算法时,您使用向下舍入的整数算术,而 A* 估计值向上舍入(这是不合理的,但这只是差异有多小的一个示例):因此您对每个弧的长度进行舍入向下舍入到整数米,然后将 A* 估计值向上舍入到整数米

是否有一个公式可以说明给定 A* 启发式高估剩余距离多少的上限,最终路径次优性的上限?

最佳答案

当 A* 检索到的部分答案(即到达目标的估计总距离最小的部分答案)实际上已达到目标时,A* 返回。标准 A* 保证找到正确的答案,因为根据启发式的定义,到达目标的所有估计总距离都是下限,因此其他答案都不能做得更好。

假设一个答案的启发式最终结果是总距离 T 可以达到 KT,其中 K > 1。如果 A* 以成本 KT 检索到一个答案,并认为它已经成功,因为答案达到了目标,那么这可能不是最好的答案。我们知道池中的每个部分答案至少有 KT 成本,但由于启发式,具有启发式 KT 的答案实际上可能会变成总成本 T < KT 的答案(但不能变成成本更便宜的答案) )。因此,通过这种启发式,A* 返回的答案的成本可能高达最佳答案的 K 倍,但仅此而已。

这实际上在维基百科条目 http://en.wikipedia.org/wiki/A 中进行了总结。 _search_algorithm#Bounded_relaxation - 故意使用此类启发式方法是加速 A 的一种方法,但代价是返回更差的答案。

关于algorithm - 使用 A* 使用启发式算法可以找到多少次优路径,该启发式算法稍微高估了剩余距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26551024/

相关文章:

algorithm - 如何在必须通过特定节点的有向图中找到最短路径?

c++ - 红黑树固定插件

c++ - Tic Tac Toe 失败的 MiniMax 算法

algorithm - 考虑上次更新,对动态集的部分进行装箱

java - 嵌套for循环优化

c++ - 在偏序上使用 min_element

Java任意数字阿姆斯壮数

检查数字是否可分解为一组素数的算法

asp.net - 为什么我应该或不应该将数据集、数据表等作为 session 变量存储在 ASP.NET 页面中?

javascript - 当图表准备好/渲染时如何隐藏 cytoscape 节点?