【问题标题】:8 puzzle: Solvability and shortest solution8 谜题:可解性和最短解
【发布时间】:2013-02-17 11:19:37
【问题描述】:

我使用广度优先搜索构建了一个 8 谜题求解器。我现在想修改代码以使用启发式方法。如果有人能回答以下两个问题,我将不胜感激:

可解性

我们如何确定一个 8 字谜题是否可解? (给定一个起始状态和一个目标状态) 维基百科是这样说的:

不变量是所有 16 个平方的排列的奇偶性加上 出租车距离的奇偶性(行数加上行数 列)从右下角的空方格。

很遗憾,我无法理解这意味着什么。理解起来有点复杂。谁能用更简单的语言解释一下?

最短的解决方案

给定一个启发式,是否保证使用 A* 算法给出最短的解决方案?更具体地说,打开列表中的第一个节点是否总是具有一个深度(或如此胖的移动次数),这是打开列表中存在的所有节点的深度中的最小值?

启发式是否应该满足某些条件才能使上述陈述为真?

编辑: 一个可接受的启发式算法如何总是提供最佳解决方案? 我们如何测试启发式算法是否可以接受?

我将使用here列出的启发式算法

Manhattan Distance 
Linear Conflict 
Pattern Database 
Misplaced Tiles
Nilsson's Sequence Score 
N-MaxSwap X-Y 
Tiles out of row and column

Eyal Schneider 澄清一下:


【问题讨论】:

  • ad #2:是的,如果您使用可接受的启发式算法(从不高估),A* 算法可以保证找到最佳解决方案
  • 有什么方法可以检查启发式是否可以接受?我想使用此页面上所述的各种启发式方法:heuristicswiki.wikispaces.com/N+-+Puzzle
  • 我希望有人能够解释如何测试启发式算法的可接受性。

标签: java algorithm artificial-intelligence sliding-tile-puzzle


【解决方案1】:

我将仅提及可解决性问题。需要一些排列背景。

排列是对有序集合的重新排序。例如,2134 是列表 1234 的重新排序,其中 1 和 2 交换位置。排列具有奇偶性;它是指反转次数的奇偶性。例如,在以下排列中,您可以看到恰好存在 3 个反转 (23,24,34):

1234
1432

这意味着排列具有奇校验。以下排列具有偶校验 (12, 34):

1234
2143

自然,恒等排列(保持项目顺序)具有偶校验。

15个拼图(或8个拼图)中的任何状态都可以视为最终状态的排列,如果我们将其视为行的串联,从第一行开始。请注意,每一个合法的移动都会改变排列的奇偶性(因为我们交换了两个元素,并且涉及它们之间的项目的反转数量必须是偶数)。因此,如果你知道空方格必须经过偶数步才能到达其最终状态,那么排列也一定是偶数。否则,您将以最终状态的奇怪排列结束,这必然与它不同。与空方格的奇数步数相同。

根据您提供的 Wikipedia 链接,上述标准对于解决给定难题是足够且必要的。

【讨论】:

  • 我明白平价是什么意思。现在,来到这句话:“所有9个正方形排列的奇偶性加上右下角空方格的出租车距离(行数加上列数)的奇偶性”所以,我们将得到奇偶性将状态视为整数,将其视为目标状态的排列,该排列应与其他数字相加。 (出租车距离的平价)现在,出租车距离本身不是一个数字吗?它的平价是什么意思?
  • @Ranjith:表示数字的简单奇偶校验。您可以将其视为 0 和 1,因此添加奇偶校验只是检查总和的奇偶校验。
  • @Ranjith:现在,可解性标准很简单:当且仅当以下两个相等时,一个谜题是可解的:1)空方必须执行的步数的奇偶性(简单计算开始和结束位置之间的曼哈顿距离的奇偶性)。 2) 与目标状态相比,初始状态表示的排列的奇偶性。
  • 我已经编辑了问题并添加了三张图片:第一张图片显示了一个状态和两个目标状态。第二张和第三张图片显示了是否可以达到两个目标状态。请你看看他们,并告诉我是否做得对。我想确保我理解正确。
  • @Ranjith-SR2GF:是的,看起来没问题,除了案例 B 中的错字,其中数字 3 显示为偶数......
【解决方案2】:

如果您的启发式总是低估实际成本(在您的情况下,需要移动到解决方案的实际数量)。

但是在飞行中,我无法为您的问题想出一个好的启发式方法。这需要一些思考才能找到这样的启发式方法。

使用 A* 的真正艺术是找到一个总是低估实际成本但尽可能少的启发式算法以加快搜索速度。


这种启发式的初步想法:

  1. 在我脑海中突然出现的一个非常实用但有效的启发式方法是空场到其最终目的地的曼哈顿距离。
  2. 每个场地到其最终目的地的曼哈顿距离之和除以可以在一次移动中改变位置的最大场地数。 (我认为这是一个很好的启发式方法)

【讨论】:

  • 对可解性部分有任何想法吗?
  • @Ranjith - SR2GF:我还没有关于可解性部分的想法。幼稚的方法是:尝试找到解决方案,如果没有,您将找不到解决方案;-)
  • 但这需要很长时间!
  • @Ranjith - SR2GF:关于可解性: 1. 一般来说,这些谜题是可以解决的。 2. 如果您在开始时交换两个相邻字段,则可以使无法解决的难题成为可解决的。因此,一种可能性是尝试解决难题,同时尝试通过交换一对相邻字段来解决难题。如果找到修改版本的解决方案,则原始难题无法解决。
  • 这是个好主意 - 并行解决原始拼图和交换拼图。如果我能直接检查可解性就更好了。
【解决方案3】:

对于任何出现的人,我将尝试解释 OP 如何获得值对以及他如何确定突出显示的值对,即反转,因为我花了几个小时才弄明白。首先是对。 首先取目标状态并将其想象为一维数组(例如 A) [1,2,3,8,0,4,7,5]。该数组中的每个值在表中都有自己的列(一直向下,这是该对的第一个值。) 然后在数组(i + 1)中向右移动 1 个值并再次向下移动,第二个对值。例如(状态 A):第一列,第二个值将从 [2,3,8,0,4,7,5] 开始下降。第二列,将从 [3,8,0,4,7,5] 等开始。

现在可以进行倒置了。对于 2 对值中的每一个,找到它们在开始状态中的 INDEX 位置。如果左 INDEX > 右 INDEX 那么它是一个反转(突出显示)。前四对状态 A 是:(1,2),(1,3),(1,8),(1,0)
1 位于索引 3
2 位于索引 0
3 > 0 所以反转。

1 等于 3
3 等于 2
3 > 2 所以反演

1 等于 3
8 是 1
3 > 2 所以反演

1 等于 3
0 是 7
3 没有反转

对每一对都执行此操作,并计算总反转数。 如果都是偶数或都是奇数(空白点的曼哈顿距离和总反演) 那么它是可以解决的。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多