【问题标题】:It is possible to create an A* admissible heuristic with zero cost path values?是否可以创建具有零成本路径值的 A* 可接受启发式?
【发布时间】:2013-07-04 17:24:21
【问题描述】:

当我们将 A* 与不可允许的启发式算法一起使用时,我们有时会得到一条非最优路径。

但是当它被允许具有零成本的路径时,我想到的唯一可接受的启发式是h(x) = 0,它将 A* 变成“简单”的 Dijkstra 算法。

我说的对吗?这是唯一可能的启发式方法吗?不使用可接受的启发式算法的真正损失是什么?还有其他寻路算法更适用于零成本路径吗?


一个例子:

假设下图(边上方的数字表示成本):

   1      1      0      1      1
S --> V1 --> V2 --> V3 --> V4 --> G

地点:

  • S 表示起始顶点
  • V 表示内部顶点
  • G 表示目标顶点

通过查看图表,我们看到C(S) = 4

我可以使用什么启发式函数h(x)?如果我使用欧几里得距离,我得到:

f(S) = g(S) + h(S)
f(S) = 0 + 5 = 5

我们可以看到,这种启发式方法高估了真实距离,因此对于更复杂的图,它可能找不到最优解。

【问题讨论】:

    标签: path-finding a-star


    【解决方案1】:

    不正确。启发式函数h(x) 具有由当前搜索状态组成的参数x。它返回从x 到目标的距离估计值。在一个简单的图中,x 是一个图节点。

    可接受性要求h(x) 只能是低估(或等于目标距离)。此条件适用于每个特定的 x。 (您似乎在推断条件适用于所有可能的 x,这太强了。如果有必要,A* 将毫无用处。)

    关于您提出的案例的正确说法是h(x) = 0 是必要的x 是与目标距离为零的状态。任何其他值都将被高估。但是,对于任何其他需要转换总成本至少为 C>0 才能达到目标的x(在同一状态空间中),我们可以有任何h,例如h(x)<=C

    当然,如果x 到目标的距离为零,那么x 目标状态并且搜索完成。所以你的担忧是空洞的——没有任何值得关注的案例。

    构建h(x) 的信息来自您对搜索空间的了解(例如图的特征)。光靠一般的图表并不能提供任何有用的东西。你能做的最好的事情是h(x) = cost of min weight outgoing edge of x 用于非目标节点,正如已经讨论过的,h(x) = 0 用于目标。再次注意这是到目标距离的下限。它给了你 Dijkstra!

    要做得更好,您需要了解图表的结构。

    编辑

    在您的示例中,您提供了详细的知识,因此制作一个好的h 很简单。你可以使用

            /  4   if x == S
           |   3   if x == V1 
    h(x) = {   2   if x == V2 or V3 
           |   1   if x == V4
            \  0   if x == G
    

    或者您可以使用任何其他函数h'(x),例如h'(x) <= h(x) 用于所有x。例如,这是可以接受的:

             /  3   if x == S
            |   2   if x == V1 
    h'(x) = {   2   if x == V2 or V3 
            |   1   if x == V4
             \  0   if x == G
    

    加法

    OP 指出,对于很多问题,h(x) 可能很难选择!这是完全正确的。如果你找不到一个好的可接受的启发式算法,那么 A* 就是错误的算法!尽管如此,A* 对于可以找到启发式的问题非常有效。我自己试过的例子:

    1. 欧几里得距离是任意两个节点之间可能距离的良好下限的图形。例如,每对城市 A 和 B 之间的距离为 D,“就像乌鸦飞过一样”,但是从 A 到 B 的道路距离至少是 D 并且可能更多,即它的成本 C 大于或等于 D。在这种情况下,D 是一个很好的启发式算法,因为它是一个低估计值。

    2. 与获胜状态的“距离”涉及移动游戏棋子的谜题。在这种情况下,当前相对于获胜状态不在位置的棋子数量是一种很好的启发式方法。例如,来自第 7 位客人的 8 主教问题(尚未处于最终位置的主教数量)和魔方问题(从所有棋子当前位置到获胜状态下正确位置的总曼哈顿距离)。

    【讨论】:

    • This link 表示可接受的启发式方法不会高估实际距离。也许这就是我感到困惑的地方。
    • 待命。我很困惑。不能高估是对的。你必须低估或完美。但是你的推理偏离轨道的地方仍然是正确的。仅当 mindist(x, G) = 0 时才需要 h(x)=0
    • 您建议的启发式函数使用尚未“访问”的顶点的知识。例如,当图形具有数千个顶点时,这种方法是不切实际的。在初始顶点 S 中,启发式函数如何“猜测”出零成本的一步?
    • @borges 所有启发式都使用搜索空间的知识。这正是启发式方法:对这些知识进行编码!如果你找不到一个,那么 A* 就不是一个好的算法,当然有很多问题是这样的。我认为您仍然从错误的角度看待这一点。尝试添加到我的帖子中。也许会有所帮助。
    • @borges 解释示例的另一种方式:如果您知道每当看到零权重的边 (a,b) 时,那么目标至少要花费 2 (甚至更多) ,那么您可以安全地说h(z)=2 代表z=a, z=b。您需要更多信息来处理其他节点y \not\in {a,b}。否则你必须像你说的那样说h(y)=0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2016-11-10
    • 2013-05-09
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多