【问题标题】:Monotonicity and A*. Is it optimal?单调性和 A*。是最优的吗?
【发布时间】:2014-01-16 22:46:04
【问题描述】:

即使 A* 是非单调的,它是否是一种最佳搜索算法(即它会找到最佳解决方案)吗?为什么或为什么不?

【问题讨论】:

  • “单调”和“非单调”是什么意思?
  • @templatetypedef Monotonic, monotone/consistent? (当然,不一定针对您。)
  • IIRC(已经有一段时间了),A* 只需要一个可接受的启发式。

标签: search artificial-intelligence a-star


【解决方案1】:

只要启发式是可以接受的,A* 就是最优搜索算法。

但是,如果启发式不一致,您将需要重新扩展节点以确保最优性。 (也就是说,如果你在封闭列表中找到了一个节点的较短路径,则需要更新 g-cost 并将其放回开放列表中。)

这种重新扩展可能会在状态空间中引入指数开销,并且边缘成本呈指数增长。 A* 的一些变体通过在每个 A* 节点扩展之间基本上交错一个 dijkstra 搜索来将其减少为多项式开销。

This paper 概述了最近的工作,特别是对 Martelli 和 Mero 的其他工作的引用,他们详细介绍了这些最坏情况的图表并提出了优化以提高 A*。

【讨论】:

    【解决方案2】:

    A* 是一个最优搜索算法当且仅当启发式是可接受的和单调的(也称为一致的)。有关这些标准之间区别的讨论,请参阅this question。实际上,一致性要求意味着启发式不能高估正在搜索的图中任何一对节点之间的距离。这是必要的,因为任何高估都可能导致搜索忽略一条好的路径,而选择一条实际上更差的路径。

    让我们通过一个例子来说明为什么这是真的。考虑两个节点 A 和 B,启发式估计分别为 5 和 6。如果启发式是可接受且一致的,则可能存在的最短路径通过 A 并且不短于 5。但是如果启发式不一致怎么办?为了使启发式方法可以接受但不一致,它必须始终低估到目标的距离,但不能导致图中节点的启发式估计之间存在明确的关系。具体例子见我对this question的回答。在此示例中,启发式函数在其他两个函数之间随机选择。如果 A 和 B 的启发式估计不是基于相同的函数计算的,我们实际上不知道其中哪一个当前有可能导致更短的路径。实际上,我们没有使用相同的尺度来衡量它们。因此,当 B 实际上是更好的选择时,我们可以选择 A。这可能会导致我们通过次优路径找到目标。

    【讨论】:

    • 如果您允许 A* 在找到到已扩展节点的较短路径时执行节点重新扩展,这是不正确的。
    • 这真的很有趣!但是,如果您碰巧遇到从树的不同分支到您已经扩展的节点的路径,它不是才有效吗?在我上面的示例中,假设 A 导致 C,B 导致 D,C 和 D 都导致目标。在有机会重新扩展任何内容之前,您会先扩展 A,然后再扩展 C,然后再扩展目标。
    • 哦,好的,我现在明白了。一个可接受的启发式方法不会允许这种情况发生。因此,基本上放弃一致性消除了 A* 的许多保证(尽管不是最优性,如果您允许节点重新扩展),但实际上通常会产生更好的结果。
    • 没错。不一致的启发式在运行时可能具有更大的值,尤其是当它由多个独立的启发式组合在一起时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2010-09-13
    相关资源
    最近更新 更多