Artificial intelligence 用人工智能解决益智游戏

Artificial intelligence 用人工智能解决益智游戏,artificial-intelligence,Artificial Intelligence,我做了一个拼图游戏,玩家将方块滑向球门——规则相当简单: 一次只能移动一个滑块 目标是将滑块块移动到目标节点中-您只需要填充目标节点,而不必将所有滑块块移动到目标节点中 如果滑块在冰上滑动,它将继续沿该方向移动,直到停止或移动 如果滑块碰到某个实体(混凝土,另一个块),它会停止并可以再次移动(显然不是移动到混凝土中) 如果滑块滑到木头上,它会停在木头上并可以移动 如果滑块滑到目标节点上,则无法再移动它 块可以通过某些块移动,例如,箭头块将块推向该方向 有开关块可启用“门”,可将其移动到以打开和关

我做了一个拼图游戏,玩家将方块滑向球门——规则相当简单:

  • 一次只能移动一个滑块
  • 目标是将滑块块移动到目标节点中-您只需要填充目标节点,而不必将所有滑块块移动到目标节点中
  • 如果滑块在冰上滑动,它将继续沿该方向移动,直到停止或移动
  • 如果滑块碰到某个实体(混凝土,另一个块),它会停止并可以再次移动(显然不是移动到混凝土中)
  • 如果滑块滑到木头上,它会停在木头上并可以移动
  • 如果滑块滑到目标节点上,则无法再移动它
  • 块可以通过某些块移动,例如,箭头块将块推向该方向
  • 有开关块可启用“门”,可将其移动到以打开和关闭这些“门”
  • 按钮块的操作方式与开关类似,不同的是,按钮块上必须有一个按钮块来激活“门”
  • 当门关上时,它们就像混凝土一样。当门打开时,它们就像冰一样
  • 我想这就是规则。以下是一些屏幕截图:

    在这里,玩家必须移动方块,以便它们必须互相碰撞才能解决难题

    这个谜题几乎已经解决了。请注意该块是如何撞到另一块并停止的

    这是另一个包含推块机制的谜题:

    如果我们向下滑动右上方的块,会发生以下情况:

    如您所见,当它击中箭头块时,该块已向左移动,并停在木块顶部


    我想写一个解决这些难题的人工智能解决方案——我想这将是某种深度优先搜索,但我不知道从哪里开始。任何让这一切发生的建议都将是一件伟大的事情

    您的问题是状态空间搜索问题的经典实例。根据特定实例的特征,可以使用不同的算法

    无论您的具体实例如何,您都需要定义四个组件:

  • 初始状态,在您的问题中为初始配置
  • 一个函数,返回从空间的任何状态可到达的所有可能状态,在您的问题中,可到达状态是移动滑块可获得的谜题的所有可能配置。当一个状态的可达状态被访问时,该状态被称为扩展状态
  • 一个目标测试,一个确定给定状态是否为目标状态的函数,在你的问题中,你会检查是否所有目标块都已填充
  • 一个代价函数,它给出从一个状态传递到另一个状态的代价,允许您的算法选择要执行的最佳操作。在您的例子中,我认为您可以为每个操作使用常量值1,并搜索要执行的最小操作数以达到其中一个目标状态
  • 由于您的问题可以根据这四个部分来定义,因此您的问题可以通过以下算法之一来解决:

  • (BFS):我们首先测试初始状态是否为目标状态(显然不是针对非平凡问题),然后扩展初始状态,测试其每个可到达状态,如果不是,则扩展这些状态,依此类推到级别。。。 它可以使用队列来实现
  • (DFS):从初始状态开始,测试目标,然后扩展相邻状态,测试目标,扩展该状态,依此类推到状态空间的最深层。 这可以通过堆栈实现
  • P>评估哪些算法是最合适的,我们可以考虑这些因素:

  • 完整性:是否保证算法在存在时会找到解决方案
  • 最优性:算法能找到最优解吗
  • 时间复杂性:需要多长时间
  • 空间复杂性:它需要多少内存
  • 如果我们考虑BFS策略,我们可以看到它是完整的,因为它通过层次系统地探索状态空间,只有当一个状态的深度增加时成本函数不减少(这是我们的情况下,因为所有的动作都有一个不变的代价),它才是最优的。现在坏消息来了:假设每个节点的扩展可以给出最多的状态,并且第一个解决方案是深度,那么您将需要存储和扩展最多的状态

    在DFS的情况下,我们必须考虑到当不同的选择可能导致某个附近的解决方案时,它可以在一个路径中被卡住搜索很多时间(可能是无限的)。因此,当状态空间为无穷大时,该算法既不是完全的,也不是最优的。如果我们认为状态空间的最大深度,我们将得到最多的空间复杂度,而时间复杂度保持指数: 那么,我们能做些什么呢?我们可以将这两种策略混合使用。在此搜索中,我们将迭代运行DFS,将最大深度从0限制为最大深度级别。该方法具有两种搜索策略的优点:空间复杂度,其中是第一个最优解的深度,时间(我们做得再好不过了),它是完整的(它将找到一个解决方案,因为它会逐级迭代探索所有状态),它是最优的(假设代价函数不随路径长度递减)出于同样的原因,BFS是最优的

    参考:

    注意:显然存在其他未告知的策略,但正如书中所述,IDDFS对于未告知的搜索问题是一个很好的选择,因为您没有关于搜索空间的其他信息。参考本书了解其他类型的搜索策略,例如知情搜索,我们知道目标状态与当前状态之间的距离