人工智能导论:状态空间搜索实验—八数码问题求解.docxVIP

人工智能导论:状态空间搜索实验—八数码问题求解.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
昆明理工大学信息工程与自动化学院学生实验报告 ( 2014—— 2015 学年 第 一 学期 ) 课程名称: 人工智能导论 开课实验室: 年 月 日 年级、专业、 学 姓名 成绩 班 号 实验项目 状态空间搜索实验—八数码问题求解 指导 胡蓉 名称 教师 该同学是否了解实验原理: A. 了解□ B. 基本了解□ C. 不了解□ 教 该同学的实验能力: A. 强□ B.中等□ C.差□ 师 该同学的实验是否达到要求 : A. 达到□ B. 基本达到□ C. 未达到□ 评 实验报告是否规范: A. 规范□ B. 基本规范□ C. 不规范□ 语 实验过程是否详细记录: A. 详细□ B. 一般 □ C. 没有□ 教师签名: 年 月 日 一、实验内容和要求 八数码问题:在 3×3的方格棋盘上,摆放着 1到 8这八个数码,有 1个方格是空的,其初始状态如图 1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 例如: 2 8 3 1 2 3 1 6 4 8 4 7 0 5 7 6 5 (a) 初始状态 (b) 目标状态 图 1 八数码问题示意图 请任选一种盲目搜索算法 (广度优先搜索或深度优先搜索) 或任选一种启发式搜索方法(全局择优搜索,加权状态图搜索, A 算法或 A* 算法)编程求解八数码问题(初始状态任选 )。选择一个初始状态, 画出搜索树,填写相应的 OPEN 表和 CLOSED表,给出解路径,对实验结果进行分析总结,得出结论。 实验报告内容格式要求: XXXXXXXXXXXX(中文:宋体,小四;英文:Times New Roman)。 二、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 三、实验算法 启发函数设定 由八数码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的 路径上,各节点的数码格局同目标节点相比较, 其数码不同的位置个数在逐渐减 少,最后为零,因此可以把数码不同的位置个数作为标志一个节点到目标节点距 离远近的一个启发性信息,利用这个信息来扩展节点的选择,减少搜索范围, 高搜索速度。 2、数据结构与算法设计  提 数码结构体 typedef struct node {  //八数码结构体 int form[N][N]; int evalue; int udirec;  //数码组 //评估值,差距 //所屏蔽方向 ,防止往回推到上一状态  ,1 上  2 下  3 左  4 右 struct node *parent; }Graph; Graph *Qu[MAX];// 队列 Graph *St[MAX];// 堆栈  //父节点 搜索过程:(搜索采用广度搜索方式,利用待处理队列辅助,逐层搜索(跳过劣质节点)) a、把初始数码组压入队列; b、从队列中取出一个数码组节点; c、扩展子节点,即从上下左右四个方向移动空格,生成相应子节点: d、对子节点数码组作评估,是否为优越节点,即其评估值是否小于等于其父节点加一,是则将其压入队,否则抛弃。 e、判断压入队的子节点数码组(优越点)的评估值,为零则表示搜索完成,退出搜索; f、跳到步骤 2; 四、程序框图 起始 把 s 放入 open 表 是否 open 表为 是 失败 空表? 否 open 表中的第一个节点 n 移入 close 表 扩展节点 n,把其后裔放入 open 表的前头 否  是 是否有后继节点 成功 为目标节点? 五、实验结果及分析 采用深度优先搜索方式 并简化搜索 六、结论 103 824 765 (3)  813 ( 0) 765 013 813 824 204 765 (1) 765 (2) 813 024 765 (4) 123 804 765 (5) Open 表 close 表 0 1 2 0 2 3 4 0 1 2456 0 1 3 目标完成 七、源程序及注释 #include stdio.h  }  //设计了搜索深度范围, 防止队列内存越 界 #include stdlib.h #include time.h  6、运行结果 #define N 3 // 数码组大小 #define Max_Step 50 // 最大搜索深度 #define MAX 50 typedef  struct  node//  八数码结构体 { int form[N][N];// 数码组 int evalue;// 评估值 int udirect;// 所屏蔽方向,防止往回推到上已状态, 1 上 struct node *parent;// 父节点

文档评论(0)

5566www + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6122115144000002

1亿VIP精品文档

相关文档