SG13011402-汪伟-人工智能八数码实验.docVIP

  • 1
  • 0
  • 约7.97千字
  • 约 13页
  • 2016-12-29 发布于江西
  • 举报
八数码问题实验(启发式搜索算法) 姓名:汪伟 学号:S实验目的: 熟练掌握启发式搜索A* 算法。 实验内容: 使用启发式搜索算法求解8数码问题。 编制程序实现求解8 数码问题A*算法,采用估价函数发函数 f(n) = d(n) + w(n) f(n) = d(n) + p(n) 其中:d(n)是搜索树中结点n的深度,表示讨论单位耗散的情况;w(n)表示以“不在位”的将牌个数作为启发函数的度量。P(n)定义为每一个将牌与其目标位置之间距离(不考虑夹在其间的将牌)的总和。 分析上述⑴中两种估价函数求解8 数码问题的效率差别,给出一个是 p(n)的上界的h(n)?的定义,并测试使用该估价函数是否使算法失去可采纳性。 实验原理: 1. 问题描述: 在3×3 的棋盘,摆有八个棋子,每个棋子上标有1 至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(以数字0 来表示),与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。 2. 算法思想 启发式搜索算法A(简称为A算法)的基本思想是:定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展。 评价函数的形式如下: f(n)=g(n)+h(n),其中n是被评价的节点。 定义: – g*(n):表示从初始节点s到节点n的最短路径的耗散值; – h*(n):表示从节点n到目标节点g的最短路径的耗散值; – f*(n)=g*(n)+h*(n):表示从初始节点s经过节点n到目标节点g的最短路径的耗散值。 ? f(n)、g(n)和h(n)分别是对f*(n)、g*(n)和h*(n)三个函数值的估计值,是一种预测。 A算法就是利用这种预测来达到有效搜索。它每次按照f(n)值的大小对待扩展的节点进行排序,f值小的节点放在前面,而f值大的节点则被放在后面,每次扩展节点时都是选择当前f值最小的节点来优先扩展。 本实验中我们使用函数 p(n),其值是节点 n与目标状态节点相比较,每个错位棋牌在 假设不受阻拦的情况下,移动到目标状态相应位置所需走步(移动次数)的总和。显然 p(n) 比w(n)更接近于h*(n),因为p(n)不仅考虑了错位因素,还考虑了错位的距离。 3. 算法伪代码描述 ① OPEN:=(s),f(s):=g(s)+h(s); ② LOOP:IF OPEN=( )THEN EXIT(FAIL); ③ n:=FIRST(OPEN); ④ IF GOAL(n)THEN EXIT(SUCCESS); ⑤ REMOVE(n,OPEN),ADD(n,CLOSED); ⑥ EXPAND(n)→{mi},计算f(n,mi)=g(n,mi)+h(mi);g(n,mi)是从s通过n到mi的耗散值,f(n,mi)是从s通过n、mi到目标节点耗散值的估计。 ? ADD(mj,OPEN),标记mj到n的指针。 ? IF f(n,mk)f(mk)THEN f(mk):=f(n,mk),标记mk到n的指针;比较f(n,mk)和f(mk),f(mk)是扩展n之前计算的耗散值。 ? IF f(n,ml)f(ml)THEN f(ml):=f(n,ml),标记ml到n的指针,ADD(ml,OPEN);当f(n,ml)f(ml)时,把ml重放回OPEN中,不必考虑修改到其子节点的指针。 ⑦ OPEN中的节点按f值从小到大排序; ⑧ GO LOOP; 实验程序及其说明: 1)int goal[N][N],struct Chessboard: 试验中我定义goal 数组为目标状态——{1,2,3,8,0,4,7,6,5}。结构体Chessboard 记录棋盘信息,其中变量pos 数组坐标记录每个数码a 的位置,其值为数码a。d 表示该棋盘的深度,f 为启发函数值,move 为父节点移动到该节点的方式,以便在输出时告诉用户该如何移动棋子知道目标状态。 2)struct LNode: 定义节点LNode 结构体,存放该节点状态时的棋盘信息board,和指向父节点、下一节点的指针(*parent,*next),以及标记量flag——值为true 时表示该节点是最佳路径上的节点。 3)int* Findzero(LNode* Node): 为方便找到空格,我设计了找到该函数Findzero(*Node),以便找到当前节点空格所在位置以利于接下来的程序执行。返回值为空格所在的行和列。 4)int Wrong(LNode *Node)和int pick(LNode *Node): 分别为函数?(n)和 p(n)。 5)LNode* extend(LNode

文档评论(0)

1亿VIP精品文档

相关文档