我已经阅读了关于此主题的几个堆栈溢出,以及关于A *的维基百科,但我仍然有点困惑。我认为这篇文章几乎完全向我解释:A* heuristic, overestimation/underestimation?
我唯一的困惑是,A *如何知道最佳解决方案?看起来似乎有一个可接受的启发式方法,你可以抛出超出已知最优解的路径,因为启发式保证小于或等于。但A *如何提前知道最佳状态?
如果您不了解最佳路径成本,此搜索是否有效并保证最佳解决方案?
答案 0 :(得分:1)
A *不知道最佳解决方案,启发式只提供有根据的猜测,这有助于加快搜索过程。看到你已经阅读了一些理论解释,让我们尝试一种不同的方法,举个例子:
如果你正在寻找证据,这里是维基百科关于可接受性的非正式证明:
当A *终止其搜索时,它找到了一条路径,其实际成本低于通过任何开放节点的任何路径的估计成本。但由于这些估计是乐观的,A *可以安全地忽略这些节点。换句话说,A *永远不会忽视低成本路径的可能性,因此是可以接受的。
为了达到最佳效果:
现在假设某些其他搜索算法B终止其搜索,其路径的实际成本不低于通过某个开放节点的路径的估计成本。基于它具有的启发式信息,算法B不能排除通过该节点的路径具有较低成本的可能性。因此,虽然B可能会考虑比A *更少的节点,但它不可接受。因此,A *考虑任何可接受的搜索算法的最少节点。
您可能还想查看此视频:A* optimality proof。
答案 1 :(得分:0)
它通过使用启发式方法传递所有可能的变体/机会来实现它。因此,您将在关闭列表中拥有所有需要的平铺/顶点/航点。