【发布时间】: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