【问题标题】:A* algorithm example - is it correct [closed]A *算法示例-是否正确[关闭]
【发布时间】:2012-01-29 18:19:06
【问题描述】:

我有以下图表:

如果我使用 A* 算法,我会得到这个解决方案:

                      S (0+1=1)
                    /          \
                  /             \
          a(3+3=6)                b(2+3=5)
        /    |    \                /       \
      /      |     \              /         \
  c(4+0=4) b(6+3=9) d(6+0=6)    d(5+0=5)    c(7+0=7)

问题:我们将找到哪种解决方案,使用算法 A* 和启发式估计(见图)

解决办法:

  • 选择 b(=5):

                      S (0+1=1)
                    /          \
                  /             \
          a(3+3=6)               b(2+3=5)
    
  • 选择 d(=5):

                     S (0+1=1)
                    /          \
                  /             \
          a(3+3=6)                b(2+3=5)
                                   /       \
                                  /         \
                                d(5+0=5)    c(7+0=7)
    
  • 停止搜索 - 因为“成本 5”小于 a(3+3=6) -> 我们不搜索其他解决方案? 解决方案是: s-b-d,成本 = 5

对吗?

【问题讨论】:

  • 问题是什么? “去 D 最便宜的方式”?
  • 问题:我们将找到哪种解决方案,使用算法 A* 和启发式估计(见图)。目标是 D 或 C
  • 是的,看起来差不多。 C 很烂,但这就是你用一个糟糕的启发式函数得到的结果。

标签: algorithm search graph a-star


【解决方案1】:

理论上看你写的是正确的。 但是,您在其上运行 A* 的图有一个非常重要的属性应该是有效的,以便您知道算法会产生最佳解决方案:您使用的启发式函数应该是乐观的,即永远不要高估到目标的实际距离。如果我理解正确,你有几个目标节点 C 和 D,问题是 A 的启发式值并不乐观,实际上它高估了(从 A 到目标节点 C 的路径只有 1,小于 h (A) = 3)。这就是为什么您实际上没有得到最佳解决方案的原因。

【讨论】:

  • 好的,所以 s-b-d, cost = 5 在这种情况下是解决方案。非常感谢您的解释。
猜你喜欢
  • 2016-05-26
  • 2016-08-26
  • 1970-01-01
  • 2013-10-13
  • 2013-11-26
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多