- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)