【问题标题】:Time for A* algorithm to solve a 8 tile sliding puzzleA* 算法解决 8 块滑动拼图的时间
【发布时间】:2012-01-12 15:20:15
【问题描述】:

只是想知道是否有人可以帮助我提供一些我目前正在为 uni 编写的代码。这是我正在编写的一个滑动拼图拼图,我已经实现了一个带有曼哈顿距离启发式的 A* 算法。目前,对于某些配置,它解决难题的时间可以从几百毫秒到大约 12 秒不等。我想知道的是这个时间范围是否是我应该期待的?

我以前从未真正做过任何人工智能,我必须随时学习这一点,因此我们将不胜感激。

【问题讨论】:

  • 嗯,这取决于硬件等。确切的时间很难定义,但如果你觉得它太慢了,你可以分析你的代码,然后发布你认为减慢它的部分。此外,您可能想大致了解您是如何实现 A* 算法的,以便我们可以查找您的算法本身的缺陷。

标签: java artificial-intelligence a-star


【解决方案1】:

我想知道的是这个时间范围是否符合我的预期?

仅从您提供的信息中很难弄清楚。如果您能描述一下您是如何实现 A* 的,或者如果您对您的应用程序进行了概要分析并需要在特定领域的缓慢方面提供帮助,将会有所帮助。

有一点需要注意,这可能会加快您的平均解题时间:任何 n 块拼图的一半起始位置永远不会导致解题,因此您可以非常快速地立即排除某些配置。 例如,您无法解决如下所示的 8 格拼图:

1 2 3 
4 5 6
8 7 .

要了解原因,请注意,由于空白区域必须在其开始的位置结束,因此“向上”/“向下”移动的总数必须相等,“向左”/“向右”移动的总数也必须相等”动作。这意味着移动的总数必须是偶数。

但是这里的 7/8 换位是从开始的谜题开始的一步,而不改变空白位置!所以这个谜题无法解开。 (但是,如果我们进行两次换位,那么它就可以再次解决。)

【讨论】:

    【解决方案2】:

    您应该知道,您不能期待任何一般时间。它每次都取决于代码本身,尤其是您的实现在树中的哪个deap,以及您的代码是否可以利用处理器功能的优势。

    为了调试,我会保存或打印出(但这需要时间!)你在树的哪个级别。

    还要记住,权重非常重要。例如:

    123
    4 6 <- your final state
    789
    
               213                               1 3
    To change  4 6  is much more expensive than  426
               789                               789
    

    希望对你有帮助。

    【讨论】:

    • 这是错误的。你的213 / 4.6 / 789 的例子是无法解决的,不仅仅是“更贵”。
    • 这个例子可能是错误的,但我想表明权重的计算很重要。
    【解决方案3】:

    显然,这不仅取决于您的硬件,还取决于您的实现。 但是,这并不是衡量性能的好方法:您要做的是确定启发式方法的有效分支因子,与其他一些非启发式方法的实际分支因子。

    我不想多说,因为这是一个家庭作业问题,但如果没记错的话,Russel 和 Norvig 会在滑动拼图本身的背景下讨论这个问题……也许是第三章? (我的 R+N 不在手边。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多