【问题标题】:Astar-like algorithm with unknown endstate具有未知最终状态的类 Astar 算法
【发布时间】:2009-05-09 11:10:09
【问题描述】:

A-star 用于在图中找到起始节点和结束节点之间的最短路径。如果目标状态不明确,而我们只有目标状态的标准,使用什么算法来解决问题?

例如,一个数独游戏可以用类似 Astar 的算法来解决吗?我们不知道最终状态会是什么样子(哪个数字在哪里),但我们知道数独的规则,即获胜状态的标准。因此我有一个起始节点和一个结束节点的标准,使用哪种算法?

【问题讨论】:

    标签: algorithm language-agnostic a-star sudoku


    【解决方案1】:

    A* 需要一个图、一个用于遍历该图的成本函数、一个关于图中某个节点是否比另一个节点更接近目标的启发式算法,以及一个是否达到目标的测试。

    搜索数独解决方案空间并没有真正需要最小化的遍历成本,只有全局成本(未解决方格的数量),所以所有遍历的成本都是相等的,所以 A* 并没有真正的帮助 - 任何单元格您可以分配成本一步,使您更接近目标,因此 A* 不会比随机选择下一步更好。

    可以根据在每个点应用不同技术的估计/测量成本来应用 A* 搜索,然后尝试以最少的计算成本找到通过解空间的路径。在这种情况下,图表不仅是拼图的解决方案状态,而且您将在该点应用的技术之间进行选择 - 您将知道转换成本的估计值,但不知道转换的位置'去”,只不过如果成功了,那就离目标更近了一步。

    【讨论】:

    • 是的,我现在可以看到数独是一个不好的例子。假设您遵守数独规则,对于任何给定的游戏,您最终将使用相同数量的移动处于相同状态。尽管问题的核心是如果我们只知道最终状态的标准,而不是确切的最终状态本身,是否可以应用 astar,但数独只是此类问题的一个示例。也许我应该改写这个问题。不过答案很好。 :)
    【解决方案2】:

    是的,当无法识别特定目标状态时可以使用 A*。 (Pete Kirkham's answer 暗示了这一点,但没有过多强调。)

    当无法确定特定的目标状态时,有时很难针对完成部分解决方案所需的剩余成本提出有用的启发式下限 - 而 A* 的效率取决于选择有效的启发式.但这并不意味着它不能应用。 任何可以在计算机上解决的问题都可以使用广度优先搜索来解决,再加上一组指示以前是否见过状态的标志;这与 A* 相同,具有始终为零的启发式下限。 (当然,这不是解决许多问题的最有效算法。)

    【讨论】:

      【解决方案3】:

      您不必知道确切的目标最终状态。这一切都归结为启发式函数,当它返回 0 时,您可以假设已经找到(至少)一个有效的最终状态。

      所以在 a* 期间,不是检查 current_node == target_node,而是检查 current_node.h() 是否返回 0。如果是,它应该无限接近和/或与目标/结束状态重叠。

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 2023-01-31
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        • 2014-03-11
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多