【发布时间】:2017-02-02 05:34:37
【问题描述】:
我尝试编写具有对角线和两点之间直线距离启发式的星型算法。但是,在这样的特定情况下,路径并不是最短的
走 (2,2) -> (3,2) -> (4,2) -> (5,2) 会更快,但它选择了切入。
我无法弄清楚我的理解有什么问题,因为当我想出来时,它实际上是这样工作的。
我的理解:
- 从 (1,1) 开始发现 (2,2) 最好
- 发现 (3,3) 最好,发现 (4,3) 最好,因为你不能偷工减料
- 发现 (5,3) 最好,但将 (5,2) 的 f 值计算为 X
- 无法转到 (6,2) 并将 f(5,2) 计算为 Y > X,因此路径回溯到 (4,3)
- 由于 (5,3) 不再在开放集中,因此选择次佳 (5,2)
- 路径的其余部分都很好,没有任何回溯,因为没有遇到“死胡同”。
它应该意识到的是 f(5,2) 低于 (4,2) 低于 (3,2),因为它选择了 (3,3),所以永远不会计算出来
p>这到底有什么问题?
编辑:水平/垂直的步长为 1,对角线的步长为 sqrt(2)
【问题讨论】:
-
从 (2,2) 到 (3,3) 的实际成本是多少?是 1 还是 sqrt(2)?
-
sqrt(2)。启发式方法是 sqrt(4^2 + 2^2)
-
在这种情况下,您的实现中存在错误。
-
对不起?我列出的步骤是无论代码如何都会在我脑海中发生的事情,所以......你能告诉我我的推理中哪一步是错误的吗?
-
A*,如果正确完成,会找到最短路径。您显示的路径不是最短的。在您的示例推理中,您没有显示开放集中的所有节点,因此很难判断哪里出了问题。
标签: algorithm