启发式搜索1
介绍八数码问题也称为九宫问题
在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同
棋盘上还有一个空格(以数字0来表示),与空格相邻的棋子可以移到空格中
要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤
所谓问题的一个状态就是棋子在棋盘上的一种摆法
解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态
使用启发式搜索算法求解8数码问题
1)A,A星算法采用估价函数,其中:是搜索树中结点的深度;为结点的数据库中错放的棋子个数;为结点的数据库中每个棋子与其目标位置之间的距离总和
2)宽度搜索采用f(i)为i的深度,深度搜索采用f(i)为i的深度的倒数
算法流程①把起始节点S放到OPEN表中,并计算节点S的;②如果OPEN是空表,则失败退出,无解;③从OPEN表中选择一个值最小的节点
如果有几个节点值相同,当其中有一个为目标节点时,则选择此目标节点;否则就选择其中任一个节点作为节点;④把节点从OPEN表中移出,并把它放入CLOSED的已扩展节点表中;⑤如果是个目标节点,则成功退出,求得一个解;⑥扩展节点,生成其全部后继节点
对于的每一个后继节点:计算;如果既不在OPEN表中,又不在CLOCED表中,则用估价函数把它添入OPEN表中
从加一指向其父节点的指针,以便一旦找到目标节点时记住一个解答路径;如果已在OPEN表或CLOSED表中,则比较刚刚对计算过的和前面计算过的该节点在表中的值
如果新的较小,则(I)以此新值取代旧值
(II)从指向,而不是指向他的父节点
(III)如果节点在CLOSED表中,则把它移回OPEN表中
⑦转向②,即GOTO②
估价函数计算一个节点的估价函数,可以分成两个部分:1、已经付出的代价(起始节点到当前节点);2、将