A *启发式,过高估计/低估?

时间:2009-06-18 13:42:54

标签: algorithm search graph artificial-intelligence a-star

我对高估/低估这些术语感到困惑。我完全理解A *算法是如何工作的,但我不确定具有高估或低估的启发式算法的效果。

当您采用直接鸟瞰线的平方时,是否会高估?为什么它会使算法不正确?所有节点都使用相同的启发式方法。

当你采用直接鸟瞰线的平方根时会低估吗?为什么算法仍然正确?

我找不到一篇解释得很好而且清晰的文章,所以我希望这里的人有一个很好的描述。

6 个答案:

答案 0 :(得分:30)

您高估了启发式估算何时高于实际最终路径成本。你低估了什么时候它低了(你不必低估,你只需要高估; 正确的估计没问题)。如果你的图的边缘成本都是1,那么你给出的例子会提供高估和低估,尽管普通坐标距离在笛卡尔空间中也很有效。

过高估计并不能使算法“不正确”;这意味着您不再拥有可接受的启发式,这是A *保证产生最佳行为的条件。由于不可接受的启发式算法,该算法最终可以完成大量多余的工作,检查它应该忽略的路径,并且可能因为探索这些路径而找到次优路径。是否实际发生取决于您的问题空间。之所以发生这种情况,是因为路径成本与估算成本“脱节”,这实际上让算法搞砸了哪些路径比其他路径更好的想法。

我不确定你是否会找到它,但你可能想看看Wikipedia A* article。我提到(和链接)主要是因为谷歌几乎不可能为它做准备。

答案 1 :(得分:11)

Wikipedia A* article开始,算法描述的相关部分是:

  

算法继续,直到目标节点的值 f 低于队列中的任何节点(或直到队列为空)。

关键的想法是,A *只有在知道路径的总成本将超过目标的已知路径的成本时,只有低估,A *才会停止探索到目标的潜在路径。由于路径成本的估算值始终小于或等于路径的实际成本,因此只要估算的成本超过已知路径的总成本,A *就可以丢弃路径。

由于过高估计,A *不知道何时可以停止探索潜在的路径,因为可能存在实际成本较低但估计成本高于目标最佳路径的路径。

答案 2 :(得分:3)

据我所知,您通常希望低估,以便您仍然可以找到最短的路径。您可以通过高估来更快地找到答案,但您可能找不到最短的路径。因此,为什么过高估计是“不正确的”,而低估仍然可以提供最佳解决方案。

对不起,我无法对鸟瞰线提供任何见解......

答案 3 :(得分:3)

简短回答

@chaos回答有点误导imo(可以突出显示)

  

过高估计并不能完全使算法"不正确&#34 ;;这意味着您不再具有可接受的启发式,这是保证A *产生最佳行为的条件。使用不可接受的启发式算法,算法可以结束大量多余的工作

正如@AlbertoPL暗示

  

您可以通过高估来更快地找到答案,但您可能找不到最短的路径。

最后(除了数学最优),最佳解决方案在很大程度上取决于您是否考虑计算资源,运行时,特殊类型的"地图" /状态空间等。

答案很长

作为一个例子,我可以想到一个实时应用程序,其中机器人通过使用过高估计启发式更快地到达目标,因为通过采用最短路径但是等待更长时间来计算这个时间优势通过更早的时间开始比时间优势更大溶液

为了给您留下更好的印象,我分享了一些我用Python快速创建的示例性结果。结果源于相同的A *算法,只有启发式不同。每个节点(网格单元)都有除了墙之外的所有八个邻居的边缘。对角线边缘成本为sqrt(2)= 1.41

第一张图显示了一个简单示例案例的算法的返回路径。您可以从过高的启发式(红色和青色)中看到一些次优路径。另一方面,有多个最佳路径(蓝色,黄色,绿色),它取决于首先找到的启发式。

当达到目标时,不同的图像显示所有扩展的节点。颜色显示使用此节点的估计路径成本(考虑"已经采用"从开始到此节点的路径;从数学角度来看,它是迄今为止的成本加上该节点的启发式算法)。在任何时候,算法都会以最低的估计总成本扩展节点(如前所述)。

Paths

<强> 1。零(蓝色)

  • 对应于Dijkstra算法
  • 节点扩展:2685
  • 路径长度:89.669

Zero

<强> 2。乌鸦苍蝇(黄色)

第3。理想(绿色)

  • 没有障碍物的最短路径(如果你遵循八个方向)
  • 最高估计值而不过高估计(因此&#34;理想&#34;)
  • 节点扩展:854
  • 路径长度:89.669
  • https://i.stack.imgur.com/VqMtF.png

<强> 4。曼哈顿(红色)

  • 没有障碍物的最短路径(如果你不对角移动;换句话说:&#34;对角移动&#34;估计为2)
  • 高估
  • 节点扩展:562
  • 路径长度:92.840
  • https://i.stack.imgur.com/gD9t4.png

<强> 5。当乌鸦飞行十次(青色)

答案 4 :(得分:0)

直观答案

要使A *正常工作(总是找到“最佳”解决方案,而不仅仅是找到最佳解决方案),您的估算功能需要乐观

乐观在这里意味着您的期望总是比现实要强。

乐观主义者会尝试许多最终可能令人失望的事情,但他们会找到所有的好机会。

悲观主义者期望得到不好的结果,因此不会尝试很多事情。因此,他们可能会错过一些千载难逢的机会。

因此,对于A *,乐观意味着总是总是低估成本(即“可能还不算太远”)。当您这样做时,一旦找到路径,您可能仍会对几个未开发的选项感到兴奋,这可能会更好。 这意味着您不会停止第一个解决方案,而仍然尝试其他解决方案。大多数人可能会感到失望(不是更好),但它保证您将始终找到最佳解决方案。当然,尝试更多的选择会花费更多的时间。

悲观 A *总是会高估成本(例如,“该选项可能非常糟糕”)。一旦找到解决方案并知道该路径的真实成本,其他所有路径都将变得更糟(因为估算总是比实际情况差),并且一旦找到目标就永远不会尝试任何替代方法。

最有效的A *永远不会低估,但会完美估计或略微过度乐观。这样您就不会天真,尝试太多错误的选择。

对每个人来说都是一个很好的教训。永远要略微乐观!

答案 5 :(得分:0)

将启发式视为 f(x)=g(x)+h(x),其中 g(x) 是从 start-nodecurrent-node 的实际成本,h(x)current-node 的预测成本到goal。假设最优成本为 R 则:

  1. h(x) 对搜索的早期产生影响。给定三个节点 A,B,C

    (*)                               => current pos: A
     A -------> B - 。。。 -> C
     |_______________________|        => the prediction range of h(x)
    

    一旦你踩到 B,从 A 到 B 的成本是真实,预测 h(x) 不再包含它:

               (*)                    => current pos: B
     A -------> B - 。。。 -> C
                |____________|        => the prediction range of h(x)
    
  2. 当我们说低估时,这意味着您的 h(x) 将导致 f(x) < R 在前往 {{1 }}。

  3. 高估确实使算法不正确

    假设 xgoal。鉴于这两个成本 R19已经达到目标的路径的成本:

    20

    但是说21Front Rear ------------------------- => This is a priority queue PQ. | 20 | 20 | 30 | ... | 99 | ^-------- => This is the "fake" optimal. 确实是实现最优成本f(y)=g(y)+h(y)的正确路径,但是由于y高估了强>,所以 R 当前是 h(y) 中的 f(y),所以在我们将 30 更新为 PQ 之前,算法已经会弹出 {{1 }} 来自 30 并错误地认为它是“最佳”解决方案。