我制作了一个谜题,玩家可以滑动目标 - 规则相当简单:
我认为这是涵盖的规则。以下是一些截图:
在这里,玩家必须移动棋盘,以便他们必须互相击打以解决难题。
这个难题是近乎解决的状态。注意块如何击中另一个块并停止
这是另一个包含推块机制的谜题:
如果我们向右滑动右上方的块,会发生以下情况:
正如您所看到的,当块碰到箭头块时,块已经移动到左侧,并停在木块顶部。
我想编写一个解决这些难题的AI解决方案 - 我认为这将是某种深度优先搜索,但我不知道从哪里开始。实现这一目标的任何指示都将是一件好事!
答案 0 :(得分:6)
您的问题是状态空间搜索问题的经典实例。根据特定实例的特征,可以使用不同的算法。
无论您的具体实例如何,您都需要定义四个组件:
由于您可以根据这四个组件定义问题,因此可以使用以下算法之一解决问题:
要评估哪种算法最合适,我们可以考虑以下因素:
如果我们考虑BFS策略,我们可以看到它是完整的,因为它系统地按层次探索状态空间,只有当状态深度增加时成本函数没有减少时才是最优的(这是我们的情况,因为所有的行动都有不变的成本)。现在它出现了坏消息:假设每个节点的扩展最多可以提供http://latex.codecogs.com/png.download?b个状态,并且第一个解决方案位于深度,那么您最多需要存储和扩展{{ 0}}状态。
在DFS的情况下,我们必须考虑当一个不同的选择可能导致某处附近的解决方案时,它可能会在路径中停留很长时间(可能是无限的)。因此,当状态空间是无限的时,该算法既不完整也不优化。如果我们将视为状态空间的最大深度,我们将获得最多的空间复杂度,而时间复杂度仍为指数:。
那么,我们能做什么?我们可以混合使用这两种策略并使用Iterative Deepening depth first search。在此搜索中,我们将迭代地运行DFS,限制从0开始到最大深度级别的最大深度。这种方法具有搜索策略的优点:空间复杂度,其中是第一个最优解的深度,时间(我们不能做得更好),它是完成(它将找到一个解决方案,因为它按级别迭代地探索所有状态)并且它是最优的(假设成本函数不随路径长度而减少),原因相同,BFS是最佳的。
参考:Artificial intelligence: a modern approach
注意:显然存在其他不明确的策略,但正如书中所述,IDDFS是一个很好的选择,对于没有关于搜索空间的其他信息的无知搜索问题。有关其他类型的搜索策略,请参阅本书,例如知情搜索,了解目标状态与当前状态的距离。