【发布时间】:2013-01-30 18:59:34
【问题描述】:
已知 A 星算法是完整的。但是,我在网上找到的所有实现似乎只返回第一个(最佳)解决方案。
例如,这个实现: A star algoritthm implementation
由于算法总是扩展具有最小 f 值的节点,并且当第一个节点是解决方案时,实现似乎停止,如何调整上述代码以输出所有(或第一个 n ) 通向目标的路径,而不考虑重复的操作(即一遍又一遍地包含相同操作的路径)?
【问题讨论】:
-
只要找到少于
n的解决方案就不要停下来,你会得到n最好的解决方案。 -
这肯定行不通吗?
-
@flup:为什么?搜索空间是一棵树,A*-算法保证找到一个最优解,如果你从树中切割出这个解,A*-算法将为缩减的树找到一个最优解。您不需要重新开始搜索,因为树的每个节点的计算没有改变。
-
@MrSmith42 就the wikipedia description of astar 而言,封闭集中指向到达它们的最佳方式的
came_from箭头的值将毫无意义。整个内部数据结构与您刚刚找到的最佳解决方案相协调。我真的不明白你怎么能继续或跳过一个解决方案。 -
@flup:正如您在图形示例(维基百科)中看到的那样,当搜索路径导致盲端(或其他路径接缝更便宜)时,下一个有希望的(就成本而言)路径将是搜索。如果您通过切割叶子来声明已经找到的“盲端”最佳解决方案,就好像该解决方案从未存在过一样。