我正在学习关于8-puzzle问题的A *算法。
我对A *没有疑问,但有一些启发式得分 - 尼尔森的序列得分。
Justin Heyes-Jones web pages - A* Algorithm非常清楚地解释了A *。它有一张Nilsson序列分数的图片。
它解释道:
Nilsson的序列分数
中心的图块得分
1
(因为它应该为空)对于不在中心的每个瓷砖,如果顺时针方向的瓷砖不是顺时针方向的瓷砖,则评分为
2
。将此序列乘以3,最后添加将每个图块移回正确位置所需的总距离。
我无法理解上面计算得分的步骤。
例如,对于开始状态,h = 17
是什么?
+---+---+---+
| | A | C |
+---+---+---+
| H | B | D |
+---+---+---+
| G | F | E |
+---+---+---+
因此,按照说明,B
位于中心,因此我们得分为1
。
然后
对于不在中心的每个标题,如果平铺顺时针方向它不是顺时针方向的那个,那么得分
2
。< / p>
我不确定这句话是什么意思。粗体 tile 是指什么?粗体它指的是什么?粗体它是否指中心标题(本例中为B)?或者它是指不在中心的每个瓷砖?
我们从A
开始的下一步是C
不应该顺时针到A
,那么我们得分为2
。然后B
应该顺时针到A
,然后我们忽略,等等呢?
答案 0 :(得分:5)
让我们按如下方式对方块进行编号:
+---+---+---+
| 0 | 1 | 2 |
+---+---+---+
| 7 | 8 | 3 |
+---+---+---+
| 6 | 5 | 4 |
+---+---+---+
现在,让N(x)
成为图块x
的当前平方数。因此,例如,如果图块A
位于方形编号3
中,则N(A) = 3
。请注意,“tile”可以位于这些方块中的任何一个中,并且每个方块的数量保持不变(因此左上方的方格始终为数字0
)。
序列分数由下式给出:
for each tile x in (A, B, C, ..., H)
score += distance from N(x) to the correct square for tile x
if N(x) == 8 # i.e. the tile is in the center
score += 3*1
else if N(next(x)) != (N(x) + 1) % 8
score += 3*2
其中next(x)
将x
带到下一个字母,即next(A) = B, next(B) = C, ... , next(G) = H, next(H) = A
。
所以回答你的具体问题:
(N(x) + 1) % 8
上的图块,即边缘的下一个方格A
给出的。 C
不应该顺时针到A
,我们有2
。接下来我们看一下C
,D
应顺时针到A
,所以这没关系。查看D, E, F
和G
所有这些都可以,但是当我们到达H
时,它不应该接近0,因此我们得分为4
。我们添加1,因为B
位于中心以获得5
。然后乘以3
得到15
。然后添加1
以将B
移至正确的位置,并1
将A
移至正确的位置,最后总计17
。< / LI>
醇>