A *算法示例 - 是否正确

时间:2011-12-29 09:30:40

标签: algorithm search graph a-star

我已经关注了图表:

enter image description here

如果我使用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 *和启发式估算(见图表)

Sollution:

  • 选择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

是不是?

1 个答案:

答案 0 :(得分:4)

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