A *是一种最优的搜索算法(即它会找到最佳解决方案),即使它是非单调的吗?为什么或为什么不呢?
答案 0 :(得分:1)
只要启发式是可以接受的,A *是最佳搜索算法。
但是,如果启发式不一致,则需要重新扩展节点以确保最佳性。 (也就是说,如果找到关闭列表中节点的较短路径,则需要更新g-cost并将其放回打开的列表中。)
这种重新扩展会在状态空间中引入指数性开销,并且边际成本呈指数增长。 A *的变体通过在每个A *节点扩展之间基本上交叉dijkstra搜索来将其减少为多项式开销。
This paper概述了最近的工作,特别是Martelli和Mero对其他工作的引用,他们详细介绍了这些最坏情况的图表并提出了改进A *的优化建议。
答案 1 :(得分:0)
当且仅当启发式既可接受又单调(也称为一致)时,A *是最佳搜索算法。有关这些标准之间区别的讨论,请参阅this question。有效地,一致性要求意味着启发式不能高估被搜索图中任何节点对之间的距离。这是必要的,因为任何高估都可能导致搜索忽略了一条有利于实际更糟的路径的好路径。
让我们来看看为什么这是真的一个例子。考虑两个节点A和B,分别具有5和6的启发式估计。如果启发式是可接受的且一致的,那么可能存在的最短路径经过A并且不小于5.但是如果启发式不一致会怎么样?为了使启发式可以接受但不一致,它必须始终低估到目标的距离,但不会导致图中节点的启发式估计之间存在明确的关系。有关具体示例,请参阅我对this question的回答。在此示例中,启发式函数在两个其他函数之间随机选择。如果A和B的启发式估计不是基于相同的函数计算的,我们实际上并不知道它们中的哪一个当前有可能导致更短的路径。实际上,我们并没有使用相同的比例来衡量它们。因此,当B实际上是更好的选择时,我们可以选择A.这可能会导致我们通过次优路径找到目标。