Math 8字谜的复合启发式算法

Math 8字谜的复合启发式算法,math,artificial-intelligence,mathematical-optimization,sliding-tile-puzzle,Math,Artificial Intelligence,Mathematical Optimization,Sliding Tile Puzzle,在阅读《人工智能现代方法》时,我遇到了一个概念,即从给定问题的子问题的解决成本中推导出启发式 例如,下面的拼图显示了8字拼图实例的一个子问题,其目标是将图块1、2、3、4放置到正确的位置 Start State = [ * 2 4 ] Goal State = [ 1 2 ] [ * * ] [ 3 4 * ] [ * 3 1 ]

在阅读《人工智能现代方法》时,我遇到了一个概念,即从给定问题的子问题的解决成本中推导出启发式

例如,下面的拼图显示了8字拼图实例的一个子问题,其目标是将图块1、2、3、4放置到正确的位置

Start State = [ * 2 4 ]    Goal State = [   1 2 ]                      
              [ *   * ]                 [ 3 4 * ]
              [ * 3 1 ]                 [ * * * ]  
然后,作者扩展了这一概念,指出这些从子问题派生的启发式可以通过取最大值进行组合

h(n)= max{ h1(n), . . , hm(n) }
此外,与简单的启发式方法相比,使用这种方法可以大大提高性能

我一直在试图对复合启发法及其背后的推理进行思考。假设我们从以下子问题的解决成本中得出两个启发式:

h1234(n) = [   1 2 ]     h5678(n) = [   * * ]                    
           [ 3 4 * ]                [ * * 5 ]
           [ * * * ]                [ 6 7 8 ]
一个复合启发式算法会像:

h1...8(n)= max{ h1234(n), h5678(n) }
  • 真的在为完整的8字谜问题寻找解决方案
  • 在我看来,使用像h1…8(n)这样的启发式,我们最终将在启发式h1234(n)和h5678(n)之间交替,这反过来可能导致一个启发式搞乱另一个的工作,永远无法找到解决方案

  • 或者,这些启发式方法会相互帮助,最终得到完整的解决方案吗

  • 老实说,我不明白这是怎么回事……

    首先,我将简要介绍启发式背后的思想,以及为什么解决子问题(也称为放松问题)有助于找到解决方案。然后,我将对8字谜问题进行以下一般考虑,从而回答您的具体问题。要获得更详细的信息,您可以开始仔细阅读Stuart和Russell的第3章;如果你想深化关于最佳优先搜索策略和启发式的话题,你可以从一篇开创性的论文开始,看看被引用的论文和引用者

    启发式和知情搜索概述 使用启发式的思想是引导搜索通过搜索空间(通常是指数大小)并仔细选择要扩展的节点(这种类型的搜索算法也称为知情搜索算法)。如果启发式是好的(即,从初始状态开始,接近目标的实际成本),那么在搜索过程中扩展的节点数量将大大减少,并且实际上该数量是最优的——即没有其他搜索算法可以扩展更少的节点来保证解的最优性。记住,启发式应该是可接受的——其给定节点的值不应超过目标的实际成本。这是使用开放列表(即不消除重复状态)时所需的唯一属性。如果消除了重复状态,启发式也应该是一致的——即,给定节点的启发式应该小于或等于到达后继节点的成本和该后继节点中的启发式的总和

    通常,可以在较少的计算时间内找到松弛问题的解。启发式可以从该解决方案中提取,并且通常比仅从整个问题的估计中提取的启发式信息更丰富,因为该解决方案提供了应该执行的实际操作。请注意,在定义子问题时,最基本的是检查从子问题的解决方案中导出的启发式是否仍然适用于一般问题,以便获得最佳解决方案

    8字谜问题 在8-谜题的具体情况下,子问题的启发式仍然直观地允许原问题。具体来说,原问题的最优解也是松弛问题的解,并且满足所有松弛问题的解 限制。因此,解决方案成本最多与原始成本匹配 最优解。第二,松弛问题的约束较少。因此,搜索算法可以找到成本较低的解,并提供成本较低的,从而获得可接受的松弛解


    通过分析并回答您的问题,使用您提到的启发式方法可以找到完整的8字谜问题的解决方案。采用
    max
    可以使估算值更接近(且允许)解决方案的实际成本,从而有助于减少节点数量

    嗨,阿尔贝托,谢谢你的回答。最后一个疑问,碰巧,与原始帖子中提到的组件启发式相关联的模式数据库覆盖了谜题中发现的所有图块,但是如果组件启发式没有覆盖所有图块,我们会得到一个解决方案吗?如果一般问题中的一个当前状态在模式中没有对应关系数据库中,应该有一个恢复机制,以便可以为该状态分配启发式。有不同的方法可以做到这一点,包括使用另一种启发式方法,例如曼哈顿距离,或者调用一个子例程来解决给定状态的放松问题。这允许找到最佳解决方案,因为启发式仍然是允许的。记住,启发式算法越接近最优解的实际成本,搜索效率就越高。