人工智能-解八数码问题

八数码问题形式化描述:

初始状态:

­­ 初始状态向量:规定向量中各分量对应的位置,各位置上的数字。把3×3的棋盘按从左到右,从上到下的顺序写成一个一维向量。我们可以设定初始状态:<1,5,2,4,0,3,6,7,8>

后继函数:

按照某种规则移动数字得到的新向量。例如:

    <1,5,2,4,0,3,6,7,8>®<1,0,2,4,5,3,6,7,8>

目标测试:

新向量是都是目标状态。即<1,2,3,4,5,6,7,8,0>是目标状态?

路径耗散函数:

每次移动代价为1,每执行一条规则后总代价加1

1.3解决方案介绍(原理)

该问题是一个搜索问题。它是一种状态到另一种状态的变换。要解决这个问题,必须先把问题转化为数字描述。由于八数码是一个3*3的矩阵,但在算法中不实用矩阵,而是将这个矩阵转化为一个一维数组,使用这个一维数组来表示八数码,但是移动时要遵守相关规则。

(1)  可用如下形式的规则来表示数字通过空格进行移动:

<a1,a2,a3,a4,a5,a6,a7,a8,a9><b1,b2,b3,b4,b5,b6,b7,b8,b9>

(2)24条移动规则,对应与每个位置的移动规则。

(3)搜索顺序举例:

       <1>优先移动行数小的棋子(数字)

       <2>同一行中优先移动列数大的棋子

(4)约束规则:不使离开既定位置的数字数增加

八数码的节点扩展应当遵循棋子的移动规则。按规则,每一次可以将一个与空格相邻的棋子移动到空格中,实际上也可以看做空格的相反方向移动。空格的移动方向可以是上下左右,当然不能出边界。棋子的位置,也就是保存状态的数组元素的下标,空格移动后,相应位置发生变化,在不移出边界的条件下,空格向右,下,左,上移动后,新位置是原位置分别加上1,3-1-3。在这里,空格可以用任意数字表示。操作本文用u r d l 分别表示空格的向上向右向下向左四个操作。

图的搜索策略:经分析,8数码问题的搜索策略共有:1.广度优先搜索、2.深度优先搜索、3.有界深度优先搜索、4.最好优先搜索、5.局部择优搜索,等等。其中广度优先搜索法是可采纳的,有界深度优先搜索法是不完备的,最好优先和局部择优搜索法是启发式搜索法。

    本实验采用启发式A*搜索算法来实现。

二、算法介绍

问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。这个寻找的过程就是状态空间搜索。常用的状态空间搜索有深度优先和广度优先。广度优先是从初始状态一层一层向下找,直到找到目标为止。深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,以至找到目标为止。

启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提高了效率。

2.1 A*搜索算法一般介绍

A* 算法实际是一种启发式搜索,所谓启发式搜索,就是利用一个估价函数评估每次的的决策的价值,决定先尝试哪一种方案,这样可以极大的优化普通的广度优先搜索。一般来说,从出发点(A)到目的地(B)的最短距离是固定的,我们可以写一个函数 judge() 估计 A B 的最短距离,如果程序已经尝试着从出发点 A 沿着某条路线移动到了 C , 那么我们认为这个方案的 A B 间的估计距离为 A C 实际已经行走了的距离 H 加上用 judge() 估计出的 C B 的距离。

如此,无论我们的程序搜索展开到哪一步,都会算出一个评估值,每一次决策后,将评估值和等待处理的方案一起排序,然后挑出待处理的各个方案中最有可能是最短路线的一部分的方案展开到下一步,一直循环到对象移动到目的地,或所有方案都尝试过却没有找到一条通向目的地的路径则结束。

A*算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:

f'(n) = g'(n) + h'(n)

这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)n到目标的最断路经的启发值。由于这个f'(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做近似。g(n)代替g'(n),但g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)<=h'(n)才可。可以证明应用这样的估价函数是可以找到最短路径的,也就是可采纳的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lbx0815

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值