繁体   English   中英

是时候使用A *算法解决8格滑动难题了

[英]Time for A* algorithm to solve a 8 tile sliding puzzle

我只是想知道是否有人可以为我目前正在为uni处理的代码提供帮助。 我正在编码这是一个滑动拼图游戏,并且已经实现了具有曼哈顿距离启发式算法的A *算法。 目前,它解决难题的时间范围从几秒钟到几秒钟,对于某些配置,则可能长达12秒左右。 我想知道的是,这个时间范围是否符合我的预期?

之前我从未真正做过任何AI,而且我必须即时学习这些知识,因此我们将不胜感激。

我想知道的是,这个时间范围是否应该达到我的预期?

仅从您提供的信息中很难找出答案。 如果您可以描述如何实现A *,或者您对应用程序进行了概要分析并需要在速度较慢的特定区域获得帮助,这将有所帮助。

需要注意的一件事可能会加快平均解决时间: 任何n-tile拼图的起始位置的一半永远不会导致解决方案,因此您可以立即快速排除某些配置。 例如,您不能解决如下所示的8块拼图:

1 2 3 
4 5 6
8 7 .

要知道为什么,请注意,因为空白必须在其开始处回退,所以“上” /“下”动作的总数必须相等,“左” /“右”动作的总数也必须相等。 这意味着移动的总数必须是偶数。

但是这里的7/8换位是从起始拼图开始的一个步骤,而不会更改空白位置! 因此,这个难题无法解决。 (但是,如果我们进行了两次换位,那么它将再次可以解决。)

就像您应该知道,您无法期望任何一般时间。 它每次都取决于代码本身,尤其取决于实现的难忘程度以及代码是否可以利用处理器功能的优势。

为了进行调试,我将保存或打印出您的树的级别(但这需要时间!)。

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

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

希望对您有所帮助。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM