【问题标题】:A*: Finding a better solution for 15-square puzzle with one given solutionA*:用一个给定的解决方案为 15 方拼图找到更好的解决方案
【发布时间】:2014-05-19 03:03:57
【问题描述】:

鉴于有一个 15 方格的谜题,我们将使用 a-star 搜索来解决这个谜题。启发式函数是曼哈顿距离。

现在有人提供了一个成本为 T 的解决方案,我们不确定这个解决方案是否是最优的。有了这些信息,

  • 是否有可能找到成本
  • 是否可以优化搜索算法的性能?

对于这个问题,我考虑了几种方法。

  1. h(x) = MAX_INT if g(x) >= T。也就是说,如果解大于 T,则 f(x) 值将最大。
  2. 如果 g(x) >= T,则将搜索节点更改为 CLOSED 状态。

【问题讨论】:

  • 你在解决什么样的难题?
  • SO 的想法是你解释你到目前为止所做的事情并寻求具体的帮助以更进一步。
  • 我想这是一种适用于任何类型谜题的通用解谜技术。因此,我没有指定拼图类型。具体来说,我应该以 15 平方谜题为例,它使用曼哈顿距离作为 A-Star 搜索算法的启发函数。
  • 设置 h(x) = MAX_INT if g(x) >= T 如果您以最佳优先顺序提取部分解决方案,则实际上不会有任何效果,因为您永远无法提取无论如何,这些节点。如果 f(x) >= T,你可以做些什么来节省一些时间和内存是简单地避免将任何子节点 x 推到堆上。

标签: a-star


【解决方案1】:

有没有可能找到更好的解决方案?

你需要知道 T 是否是最优解。如果不知道最优解,使用平均成本;一条好的路径比平均的要好。如果 T 已经优于平均水平,则无需寻找新路径。

是否可以优化搜索算法的性能?

是的。启发式是帮助算法做出正确决策的假设。 A*算法做了以下假设:

  • 最佳路径成本最低(Djikstra 算法 - 靠近搜索原点)
  • 最佳路径是最直接的路径(贪婪搜索 - 最小化到目标的距离)

良好的启发式方法可以极大地提高性能(因此,A* 很有用)。糟糕的启发式方法会导致搜索远离良好的解决方案并抹杀性能。我的建议是了解您正在搜索的游戏;在国际象棋中,通常最好避免失去皇后,因此这可能是一个很好的启发式方法。

启发式对性能的影响最大,尤其是在 15x15 搜索空间的情况下。在较大的搜索空间 (2000x2000) 中,充分利用高效数据结构(如数组和整数)可能会提高性能。

可能的解决方案

您提供的两种解决方案实际上是相同的;如果路径不如您拥有的其他路径,请忽略它们。像 A* 这样的搜索算法会为您完成这项工作,正如 j_random_hacker 以迂回的方式所说的那样。

OPEN 列表是一组可能的移动;选择最好的,忽略其余的。 CLOSED 列表是一组已经被选中的动作,不是你想忽略的。

(1) d(x) = Djikstra's Algorithm 
(2) g(x) = Greedy Search
(3) a*(x) = A* Algorithm = d(x) + g(x) 

为了让你的 A* 更贪心(更喜欢次优但快速的解决方案),乘以 g(x) 的成本以支持贪心搜索; (4) a*(x) = d(x) + 1.1 * g(x) 我实际上在 1500x2000 的搜索空间中对此进行了测试。 (3),一个标准的 A*,大约需要 5 秒才能找到对面的目标。 (4) 只需几毫秒即可找到目标,证明了很好地使用启发式算法的价值。

您还可以向 A* 添加其他启发式方法,例如:

  • 深度优先搜索(喜欢更多的移动)
  • 面包优先(喜欢较少的动作)
  • 坚持道路(如果地形决定移动速度,则增加选择不良地形的成本)
  • 远离敌方领土(如果你想避免失去单位,不要让他们处于危险之中)

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2012-03-31
    相关资源
    最近更新 更多