在利用可接受的启发式算法时,A *是否需要知道最优解决方案成本?

时间:2016-05-24 01:18:12

标签: search optimization artificial-intelligence a-star

我已经阅读了关于此主题的几个堆栈溢出,以及关于A *的维基百科,但我仍然有点困惑。我认为这篇文章几乎完全向我解释:A* heuristic, overestimation/underestimation?

我唯一的困惑是,A *如何知道最佳解决方案?看起来似乎有一个可接受的启发式方法,你可以抛出超出已知最优解的路径,因为启发式保证小于或等于。但A *如何提前知道最佳状态?

如果您不了解最佳路径成本,此搜索是否有效并保证最佳解决方案?

2 个答案:

答案 0 :(得分:1)

A *不知道最佳解决方案,启发式只提供有根据的猜测,这有助于加快搜索过程。看到你已经阅读了一些理论解释,让我们尝试一种不同的方法,举个例子:

enter image description here

  1. 从绿色节点开始,A *探索具有最小成本+启发式的节点(1.5 + 4 = 5.5,节点' a')。成本+启发式可以被理解为"多少,直到有多少我认为留给目标"。换句话说,它是目标的估计总成本。所以我们选择最小的值是有意义的。节点' d'成本较高(2 + 4.5 = 6.5),所以我们把它留在队列中。
  2. 通过扩大' a'邻居,我们添加' b'到队列并计算其值, 1.5 + 2 + 2 = 5.5(成本,直到粗体,另一个术语是我认为剩下多少)。它仍然比成本更好,所以我们一直在探索这条道路。请注意,' b'是2,这意味着我们认为这是达到目标所剩余的额外成本......这显然是错误的,没有办法从' b'成本2!但它对A *算法没有任何问题,因为我们低估了的实际成本。
  3. 扩展' b',我们添加其邻居' c'执行值 1.5 + 2 + 3 + 4 = 10.5的队列。现在,请记住“' d'还在排队吗?现在它具有最小的值(6.5),所以我们离开' c'在队列中尝试' d'因为这是一条更有希望的道路。这个决定是可能的,因为我们知道只有6.5才能获得成本,我们认为达到目标仍然需要4个成本。在这种情况下,启发式是正确的,这也适用于A *算法。
  4. 通过扩展' d'我们添加' e'到值为 2 + 3 + 2 = 7的队列。这里的启发式是正确的,我们已经知道这对于A *是可以的。然后我们会探索' e'并找到目标。 但是,假设我们有h(e)= 6 ,给予' e'值 2 + 3 + 6 = 11.这意味着' c'将是下一个最好的猜测(10.5),我们会尝试一条绝望的道路!这意味着过高估计启发式不允许,因为它会使A *采取错误的探索路径。
  5. 如果你正在寻找证据,这里是维基百科关于可接受性的非正式证明:

      

    当A *终止其搜索时,它找到了一条路径,其实际成本低于通过任何开放节点的任何路径的估计成本。但由于这些估计是乐观的,A *可以安全地忽略这些节点。换句话说,A *永远不会忽视低成本路径的可能性,因此是可以接受的。

    为了达到最佳效果:

      

    现在假设某些其他搜索算法B终止其搜索,其路径的实际成本不低于通过某个开放节点的路径的估计成本。基于它具有的启发式信息,算法B不能排除通过该节点的路径具有较低成本的可能性。因此,虽然B可能会考虑比A *更少的节点,但它不可接受。因此,A *考虑任何可接受的搜索算法的最少节点。

    您可能还想查看此视频:A* optimality proof

答案 1 :(得分:0)

它通过使用启发式方法传递所有可能的变体/机会来实现它。因此,您将在关闭列表中拥有所有需要的平铺/顶点/航点。