ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:56.60KB ,
资源ID:7600242      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7600242.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于A算法求解八数码问题哈尔滨工程大学.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于A算法求解八数码问题哈尔滨工程大学.docx

1、基于A算法求解八数码问题哈尔滨工程大学基于A算法求解八数码问题-哈 尔滨工程大学基于 A* 算法求解八数码问题班级: 20110616 学号: 2011061618 姓名:唐宗林摘要:利用人工智能中的经典启发式搜索算法求解八 数码问题,在启发式搜索算法上对 A* 算法的定义进 行了解释,详细的描述了启发式 A* 搜索算法,并将 之运用至解决八数码问题, 对八数码问题求解过程进 行了详细解释, 取得了预期的搜索解, 达到了本实验 课程的预期目的。关键词:人工智能;启发式搜索算法; A* 算法;八 数码问题 本组成员:唐宗林,陶涛,汤芦山 本人分工:主要承担 A* 算法中启发函数的设计、八 数码问

2、题解存在问题判断等工作。1 引言在信息社会中,人们越来越依赖于搜索技术来获 取有用的信息,搜索是人工智能中的一个基本问题, 是推理不可分割的一部分, 它直接关系到智能系统的 性能及运行效率。通常搜索策略的主要任务是确定如 何选取规则的方式。 一般有两种方式: 一种是不考虑 所给问题所具有的的特定知识系统根据事先确定好 的某种固定排序, 一次调用规则或随机调用规则, 这 实际上是盲目搜索的策略; 另一种是考虑问题领域可 应用的知识, 动态的确定规则的排序, 优先调用较合 适的规则排序,这就是通常所称为的启发式搜索策 略。启发式搜索是利用问题所拥有的启发式信息来引 导搜索,以达到减少搜索范围, 降

3、低问题复杂度的目 的。在本课程实验中我们以八数码问题为背景, 运用 启发式搜索算法来达到求解目的。 通过解决八数码问 题来加深对 A* 算法的理解及运用,以更好地将课堂 所学知识运用到实际问题的解决之中。 在实验中我的 任务主要是 A* 算法中启发函数的设计、八数码问题 解存在问题判断等工作, 所以接下来的叙述也将围绕 这几项工作来展开。2 算法原理与系统设计2.1 八数码问题八数码游戏(八数码问题)描述为:在 3X3组成 的九宫格棋盘上, 摆有八个将牌, 每一个将牌都刻有 1-8 八个数码中的某一个数码。 棋盘中留有一个空格, 允许其周围的某一个将牌向空格移动, 这样通过移动 将牌就可以不断

4、改变将牌的布局。 这种游戏求解的问 题是:给定一种初始的将牌布局或结构 (称初始状态) 和一个目标的布局 (称目标状态),问如何移动将牌, 实现从初始状态到目标状态的转变。初始状态:8 个数字将牌和空格在九宫格棋盘上的所有格局 组成了问题的状态空间。 其中,状态空间中的任一种 状态都可以作为初始状态。后继函数:通过移动空格(上、下、左、右)和周围的任一棋 子一次,到达新的合法状态。目标测试:比较当前状态和目标状态的格局是否一致。路径消耗:每一步的耗散值为 1,因此整个路径的耗散值是从 起始状态到目标状态的棋子移动的总步数。2.2 八数码解存在判断在对八数码问题进行正式求解前, 我们会首先对八

5、数码是否有解作出判断。我们对一个任意的棋局状态p=c1c2c3c4c5c6c7c8 进行分析:引理 1:如果交换任何两个相邻的棋子, 那么棋子数列的逆 序数将发生奇偶性互变(奇偶性互变是指由奇数变为偶数,或由偶数变为奇数,下 同)。引理 2:如果棋子数列经过 n 次相邻棋子交换后,若 n 为 偶数,则数列逆序数奇偶性不变; 若 n 为奇数,则数列逆序数将发生奇偶性互变。引理 3: 在满足上述约定的八数码问题中, 空格与相邻棋子 的交换不会改变棋局中棋子数列 的逆序数的奇偶性。定理 1 : (1)当初始状态棋局的棋子数列的逆序数是奇数 时,八数码问题无解;(2)当初始状态棋局的棋子数列的逆序数是

6、偶数 时,八数码问题有解。2.3 启发式搜索启发式搜索算法的基本思想是: 定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望 的节点来扩展。2.4 启发信息 启发性信息是指那种与具体问题求解过程有关的, 并可指导搜索过程朝着最有希望的方向前进的控制信息。有余下三种启发性信息:有效的帮助确定扩展节点的信息; 有效的帮助决定那些后记节点被生成的信息; 能决定在扩展一个节点时那些节点应从搜索树 上删除的信息;2.5 估价函数f*(n)=g*(n)+h*(n)上式中g*(n)表示从初始节点s到当前节点n的最 短路径的耗散值; h*(n) 表示从当前节点 n 到目标节 点 g 的最短路径的实

7、际耗散值, f*(n) 表示从初始节点 s 经过 n 到目标节点 g 的最短路径的耗散值。2.6 A*算法如果我们分别以g(n)及h(n)代替g*(n)及h*(n), 其中g(n)是对g*的一个合理估计,它们可能不相等: g(n)= g*(n)只有当发现了到状态n的最短路径时它 们才是相等的。 同理,以对到目标状态的最小代价的 启发式估计 h(n)代替h*(n),如果评估函数满足 h(n)=h*(n) , 我们把它称为 A* 算法。信息度更高的启发是更好的启发, A* 算法的信息 度越高,要得到最优解而需要展开的空间就越小。 但 采用高信息度的启发所需的计算量可能会增大, 以至 于抵消了搜索数

8、量降低而带来的优势。2.7 算法描述算法的功能:产生 8 数码问题的解 (由初始状态到 达目标状态的过程)输入:初始状态,目标状态 输出:从初始状态到目标状态的一系列过程 算法描述:Begin:读入初始状态和目标状态, 并计算初始状态评价函 数值 f;根据初始状态和目标状态,判断问题是否可解;If(问题可解)把初始状态假如 open 表中;While (未找到解&状态表非空)1在open表中找到评价值最小的节点,作为当前结点;2判断当前结点状态和目标状态是否一致,若一 致,跳出循环;否则跳转到;3对当前结点,分别按照上、下、左、右方向移动 空格位置来扩展新的状态结点, 并计算新扩展结点的 评价

9、值 f 并记录其父节点;4对于新扩展的状态结点, 判断其是否重复, 若不 重复,把其加入到open表中;5把当前结点从open表中移除;End whileEnd if输出结果;End2.8算法流程图算法流程图如下图2.8所示:开始读入棋局初始状态是否可解初始状态加入Open表在Open表中找到评价值最小的节点,作为当前节点是否是目标节点否扩展新状态,把不重复的新状态加入 Ope n表中是当前节点从Open表移除输出结果结束图2.8算法流程图3 系统实现3.1 启发式函数设计3.1.1 启发函数 1启发函数 1:数出每个状态与目标状态相比错位 的牌数 错位牌数最少的状态可能最接近预期目标,所 以

10、它是接下来要分析的最佳状态。缺点是没有使用从棋盘上得到的全部信息。因 为它没有把牌要移动的距离纳入到考虑之中。关键代码:int camp(string str1,string str2)int sum=0;for(int i=0;i9;i+) if(str1i!=str2i) sum+;coutsumps;string s=s0;int h=0;int temp,tempg;for(int i=0;i=8;i+)if(si=O) continue;/。的距离已经包含在其他 数字的移动过程中,所以应该舍去temp=strchr(ps,si)-ps; tempg=strchr(psg,si)-ps

11、g;h+=abs(temp/3-tempg/3)+abs(temp%3-tempg%3) ;return h;3.1.3 启发函数 3启发函数 3:对每一个相互颠倒 (两张相邻的牌 要满足目标位置必须交换顺序) 乘以一个小的数字(例如 2)但这种启发函数的问题是如果当前状态如果不 存在直接颠倒,则不能对当前状态做出正确的评估。关键代码:int camp(string str1,string str2)int sum=0;for(int i=0;i9;i+)if(str1i=0) continue;for(int j=0;j9;j+) if(str1i=str2j&str2j=str2i) su

12、m+; coutsum/2endl;3.1.4 启发函数 4启发函数 4:把错位牌的距离与直接颠倒数的二倍相加。这样就综合了启发函数 2 和启发函数 3 的优点,克 服了单纯颠倒启发的不足之处, 加强了评估函数的准 确性。3.2 八数码问题解存在判断bool cansolve(strings0,string sg)/检验用户输入 的初始状态是否有解/* 当初始状态的逆序数和目标状态的逆序数的奇 偶性相同时 ,问题有解;否则问题无解。逆序数定义如下:把三行数展开排成一行 ,并且丢 弃数字 0 不计入其中 ,所有的数之前比该数小的数字的个数之和是该状 态的逆序数。 */int i0,ig,i,j;

13、i0=ig=0;for( i=0;i=8;i+)if (s0i=0) continue;for( j=0;ji;j+)if (s0j=0) continue;if (s0j-0)(s0i-0)i0+;for( i=0;i=8;i+)if (sgi=0) continue;for( j=0;ji;j+)if (sgj=0) continue;if (sgj-0)(sgi-0)ig+;couti0 igendl;return(i0-ig)%2=0);4实验或测试结果4.1有解状况分析有解状况分析如下图 4.1所示,目标状态默认为123804765,初始状态为 283164750。規则与好;16F

14、Ai2XI己轻找到解1S画i丽i呂动拼图诵定28serf)p63ie4T50图4.1有解状态分析4.2无解状态分析无解状况分析如下图 4.2所示,目标状态默认为123804765,初始状态为 823164705c規则易伏蛊:6 2 3渚输入9忖的初 序列823164705图 4.2 无解状态分析5 结论通过本实验中对八数码问题的解决, 我加深了对启 发式搜索算法的理解与运用,更加深刻的理解了 A* 算法的实质,同时加深了我对人工智能课程的兴趣。在本课程实验中我主要负责 A* 算法中启发函数的 设计及八数码问题解存在判断等工作, 通过这些内容 我深深理解了实践的重要性, 课本中学到的知识只有 通

15、过实际问题的解决才能真正被掌握与吸收。 在完成 实验的过程中, 我参考了许多参考资料, 认真的学习 了启发函数的设计原理, 同时比较了常用几种启发函 数的优缺点, 加深了理解。 在实验中的不足之处是由 于时间原因没有对这几种启发函数进行实际效率比 对,只是在理论上进行了比较。通过本课程提高了我的解决实际问题的自信心, 但 同时也让我更加深刻的认识到了实际动手能力的培 养的重要性。在今后的学习工作中我一定会加强这方 面的训练,以期提高自己的能力。参考文献1 尼尔森 .人工智能 M. 郑扣根 ,等译 .北京:机械工 业出版社, 2000.2 王万森 .人工智能原理及其应用 M. 北京:电子工 业出版社, 2000.3 王士同 .人工智能教程 M. 北京:电子工业出版 社, 2002.4 George F丄uger人工智能复杂问题求解的结构和 策略M.郭祖茂,刘杨,玄萍,王春宇,等译.北京:机械 工业出版社, 2010.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1