




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能实验报告实验名称 八数码问题实验时间 2014.11.6院系 计算机科学与技术学院班级 软件工程2班学号 E01214281姓名 周公谨1. 实验目的: 、 熟悉人工智能系统中的问题求解过程;熟悉状态空间的盲目搜索和启发式搜索算法的应用;熟悉对八数码问题的建模、求解及编程语言的应用。2.实验原理广度优先算法:(1) 状态空间盲目搜索宽度优先搜索其基本思想是,从初始节点开始,向下逐层对节点进形依次扩展,并考察它是否为目标节点,再对下层节点进行扩展(或搜索)之前,必须完成对当层的所有节点的扩展。再搜索过程中,未扩展节点表OPEN中的节点排序准则是:先进入的节点排在前面,后进入的节点排在后面。(2) 宽度优先算法如下步1 把初始结点S0放入OPEN表中步2 若OPEN表为空,则搜索失败,问题无解 步3 取OPEN表中最前面的结点N放在CLOSE表中,并冠以顺序编号n 步4 若目标结点Sg=N,则搜索成功,问题有解 步5 若N无子结点,则转步2 步6 扩展结点N,将其所有子结点配上指向N的放回指针,依次放入OPEN表的尾部,转步2 3.实验内容在33的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态,输出全局择优搜索全过程。4.实验代码与结果#include#includestruct node int x,y; int cntdif; int step; int f9; int xy33;queue10000;int map33;int dir42=-1,0,1,0,0,1,0,-1;int open10000;int zz9;int f1,f2;struct node sour,dest;int judge(int a) /用逆序数判断是否可达 int i,j,k=0; for(i=1;i9;i+) if(ai) for(j=0;jai) k+; return k;int count(int a,int b)/计算不一样的个数 int i,j; for(i=j=0;i9;i+) if(ai!=bi)j+; return j;int match(struct node m) /判断是否和末状态匹配 int i,j; for(i=0;icntdif=b-cntdif)return a-step-b-step; return a-cntdif-b-cntdif;int visit(int x)/返回hash函数值 int i,cnt=1,sum=0; for(i=0;i9;i+) sum+=xi*cnt+; return sum;void print(int f3) int i,j; for(i=0;i3;i+) for(j=0;j3;j+) printf(%d ,fij); printf(n); printf(n);void bfs()/全局择优算法 int p,val,i,j,ff9,flin=0; int head=0; int tail=0; memset(queue,0,sizeof(queue); queuehead=sour; tdif=count(queuehead.f,zz); openhead=visit(queuehead.f); print(queuehead.xy);/打印头结点 while(head=tail) struct node HH=queuehead+; int sx,sy; for(p=0;p4;p+) flin=0; for(i=0;i=0&sx=0&sy3) ffsx*3+sy=0; ffHH.x*3+HH.y=HH.xysxsy; for(j=0;j10000;j+)/判断是否是已经有过的状态,看open表中是否已有 if(openj=visit(ff) flin=1; break; if(flin)continue; tail+; for(i=0;i3;i+) for(j=0;j3;j+) queuetail.fi*3+j=queuetail.xyij=ffi*3+j; queuetail.step=HH.step+1; queuetail.x=sx; queuetail.y=sy; tdif=count(queuetail.f,zz); opentail=visit(queuetail.f); print(queuetail.xy); if(match(queuetail) printf(step(s):%d!n,queuetail.step); return; qsort(queue+head,tail-head+1,sizeof(queue0),comp);/排序,每次选择cntdif数目最小的扩展 int main() int i,j,a9,b9; printf(Please input the initial status,input 0 to the vacant position :n); for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&mapij); sour.xyij=mapij; sour.fi*3+j=mapij; ai*3+j=mapij; if(mapij=0) sour.x=i; sour.y=j; sour.step=0; tdif=0; printf(Please input the final status:n); for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&mapij); dest.xyij=mapij; dest.fi*3+j=mapij; bi*3+j=mapij; zzi*3+j=mapij; printf(n); if(judge(a)+judge(b)&1) printf(The final status cannot be reached .); return 0; printf(The searching process is:n); bfs(); return 0;5.实验总结人工智能搜索可分为盲目搜索和启发式搜索。盲目搜索算法有宽度优先算法、深度优先算法(有界深度优先算法),启发式搜索算法有A算法、A*算法。本实验采用的是宽度优先(广度优先)算法,这种算法是按预定的控制策略进行,在搜素的过程中所获得的信息不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 永丰乡消防知识培训课件
- 水表基础知识培训总结课件
- 混凝土施工中水泥质量控制方案
- 水管管件基础知识培训课件
- 输电线路传输能力评估方案
- 建筑施工现场的健康安全检查与监督方案
- 鸡舍清洁与消毒技术
- 水的基本知识培训内容课件
- 二零二五顶账城市核心区住宅买卖合同协议
- 二零二五年软件系统集成与维护合同详细实施条款
- 2025高职单招考试题(附答案)
- 储能系统运维安全手册
- GB/T 45997-2025科技成果五元价值评估指南
- 转让网约车合同协议书范本
- 医院 捐赠协议书
- 小学食堂供餐管理方案(3篇)
- 养老院重要环境因素控制措施
- 藏文教学课件
- 血透室手卫生管理课件
- 风电场安全规程考试题库(附答案)
- 轨道工程制图教学课件
评论
0/150
提交评论