




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能 实验大作业实验题目: 启发式搜索 专业 信息与计算科学 年级 091001 姓名 贾凡 学号 091001103 指导老师 时华 日 期 2012年12月11日 一、实验目的:熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A算法求解九宫问题,理解求解流程和搜索顺序。二、实验方法:1.先熟悉启发式搜索算法; 2.用C、C+或JAVA语言编程实现实验内容。三、实验背景知识:1.估价函数在对问题的状态空间进行搜索时,为提高搜索效率需要和被解问题的解有关的大量控制性知识作为搜索的辅助性策略。这些控制信息反映在估价函数中。估价函数的任务就是估计待搜索节点的重要程度,给这些节点排定次序。估价函数可以是任意一种函数,如有的定义它是节点x处于最佳路径的概率上,或是x节点和目标节点之间的距离等等。在此,我们把估价函数f(n)定义为从初始节点经过n节点到达目标节点的最小代价路径的代价估计值,它的一般形式是: f(n) = g(n) + h(n)其中g(n)是从初始节点到节点n的实际代价,g(n)可以根据生成的搜索树实际计算出来;h(n)是从n到目标节点的最佳路径的代价估计,h(n)主要体现了搜索的启发信息。2. 启发式搜索过程的特性(1)可采纳性当一个搜索算法在最短路径存在的时候能保证能找到它,我们就称该算法是可采纳的。所有A*算法都是可采纳的。(2)单调性一个启发函数h是单调的,如果a) 对所有的状态ni和 nj,其中nj是ni的子孙,h(ni )- h(nj )cost(ni,nj ),其中cost(ni,nj )是从ni到nj 实际代价。b) 目标状态的启发函数值为0,即h(Goal)=0.具有单调性的启发式搜索算法在对状态进行扩展时能保证所有被扩展的状态的f值是单调递增(不减)。(3)信息性比较两个启发策略h1和h2,如果对搜索空间中的任何一个状态n都有h1(n) h2(n),就说h2比h1具有更多的信息性。一般而言,若搜索策略h2比h1有更多的信息性,则h2比h1考察的状态要少。但必须注意的是更多信息性需要更多的计算时间,从而有可能抵消减少搜索空间所带来的益处。3.常用的启发式搜索算法(1)局部择优搜索算法(瞎子爬山法)瞎子爬山法是最简单的启发式算法之一。该算法在搜索过程中扩展当前节点并估价它的子节点。最优的子节点别选择并进一步扩展;该子节点的兄弟节点和父节点都不再被保留。当搜索到达一种状态,该状态比它的所有子状态都要好,则搜索停止。因此,该算法的估价函数可表示为f(n) = h(n)。在一个限定的环境下,瞎子爬山法可能会极大的提高搜索的效率,但是对整个搜索空间而言,可能得不到全局最优解。(2)最好优先搜索法(有序搜索法)该算法的估价函数采用f(n) = g(n) + h(n),在搜索过程中算法使用OPEN表和CLOSE表来记录节点信息:OPEN表中保留所有已生成而未考察的节点;CLOSE表中保留所有已访问过的节点。算法在每一次搜索过程中都会对OPEN表中的节点按照每个节点的f值进行排序,选择f值最小节点进行扩展。算法的描述如下: 把起始节点S放到OPEN表中,计算f(S),并把其值与节点S联系起来。 若OPEN是个空表,则算法失败退出,无解。 从OPEN表中选择一个f值最小的节点i。结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一个节点作为节点i 。 把节点i从OPEN表中移出,并把它放入到CLOSED的扩展节点表中。 若节点i是个目标节点,则成功退出,求得一个解。 扩展i,生成其全部后继节点。对i的每个后继节点j:(a) 计算f(j)。(b) 如果j既不在OPEN表中,也不在CLOSED表中,则用估价函数f将其添加到OPEN表。从j加一指向其父辈节点i的指针,以便一旦找到目标节点时记住一个解答路径。(c) 如果j已则OPEN表中或CLOSED表中,则比较刚刚对j计算过的f值和前面计算过的该节点在表中的f的值。若新的f值较小,则(i) 以此值取代旧值。(ii) 从j指向i,而不是指向它的父辈节点。(iii) 若节点j在CLOSED表中,则把它移回OPEN表。 转向。四、实验内容:问题描述:用启发式搜索方法求解下列九宫问题283164 7512384 7655、 实验原理启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,提高了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。我们先看看估价是如何表示的。启发中的估价是用估价函数表示的,如:最佳优先搜索的最广为人知的形式称为A*搜索(发音为“A星搜索”).它把到达节点的耗散g(n)和从该节点到目标节点的消耗h(n)结合起来对节点进行评价:f(n)=g(n)+h(n)因为以g(n)给出了从起始节点到节点n的路径耗散,而h(n)是从节点n到目标节点的最低耗散路径的估计耗散值,因此f(n)=经过节点n的最低耗散解的估计耗散.这样,如果我们想要找到最低耗散解,首先尝试找到g(n)+h(n)值最小的节点是合理的。可以发现这个策略不只是合理的:倘若启发函数h(n)满足一定的条件,A*搜索既是完备的也是最优的。如果把A*搜索用于Tree-Search,它的最优性是能够直接分折的。在这种情况下,如果h(n)是一个可采纳启发式-也就是说,倘若h(n)从不会过高估计到达目标的耗散-A*算法是最优的。可采纳启发式天生是最优的,因为他们认为求解问题的耗散是低于实际耗散的。因为g(n)是到达节点n的确切耗散,我们得到一个直接的结论:f(n)永远不会高估经过节点n的解的实际耗散。启发算法有: 蚁群算法,遗传算法、模拟退火算法等,蚁群算法是一种来自大自然的随机搜索寻优方法,是生物界的群体启发式行为,现己陆续应用到组合优化、人工智能、通讯等多个领域。蚁群算法的正反馈性和协同性使其可用于分布式系统,隐含的并行性更使之具有极强的发展潜力。从数值仿真结果来看,它比目前风行一时的遗传算法、模拟退火算法等有更好的适应性。6、 代码#include #includestruct nodeint a33;/用二维数组存放8数码 int hx;/函数h(x)的值,表示与目标状态的差距struct node *parent;/指向父结点的指针struct node *next;/指向链表中下一个结点的指针;int hx(int s33)int i,j;int hx=0;int sg33=1,2,3,8,0,4,7,6,5;for(i=0;i3;i+)for(j=0;jnext=NULL;/初始化for(i=0;i3;i+)for(j=0;jaij=0)flag=1;break;if(flag=1)break; for(m=0;ma赋给xfor(n=0;namn; if(i-1=0)t=xij;xij=xi-1j;xi-1j=t; flag=0;for(m=0;m3;m+)/将x赋给a for(n=0;nparent-amn) flag+; if(flag!=9) q=(node *)malloc(sizeof(node); for(m=0;m3;m+)/将x赋给a for(n=0;namn=xmn; q-parent=ex; q-hx=hx(q-a); q-next=NULL; p-next=q; p=p-next; for(m=0;ma重新赋给x,即还原xfor(n=0;namn;if(i+1=2)t=xij;xij=xi+1j;xi+1j=t; flag=0;for(m=0;m3;m+) for(n=0;nparent-amn) flag+; if(flag!=9) q=(node *)malloc(sizeof(node); for(m=0;m3;m+)/将x赋给a for(n=0;namn=xmn; q-parent=ex; q-hx=hx(q-a); q-next=NULL; p-next=q; p=p-next; for(m=0;ma重新赋给x,即还原xfor(n=0;namn;if(j-1=0) t=xij;xij=xij-1;xij-1=t;flag=0;for(m=0;m3;m+) for(n=0;nparent-amn) flag+; if(flag!=9) q=(node *)malloc(sizeof(node); for(m=0;m3;m+)/将x赋给a for(n=0;namn=xmn; q-parent=ex; q-hx=hx(q-a); q-next=NULL; p-next=q; p=p-next; for(m=0;m3;m+)for(n=0;namn;if(j+1=2) t=xij;xij=xij+1;xij+1=t; flag=0;for(m=0;m3;m+) for(n=0;nparent-amn) flag+; if(flag!=9) q=(node *)malloc(sizeof(node); for(m=0;m3;m+) for(n=0;namn=xmn; q-parent=ex; q-hx=hx(q-a); q-next=NULL; p-next=q; p=p-next; head=head-next;return head;node* insert(node *open,node * head)node *p,*q;int i,j;int flag=0;if(open=NULL) open=head;q=head; head=head-next;q-next=NULL; if(head-hxhx)open=head;head=head-next;open-next=q;else q-next=head; head=head-next; q=q-next; q-next=NULL; p=open;p=open;q=open-next;while(head!=NULL)q=open;if(head-hxhx) open=head;head=head-next;open-next=q;continue;else q=q-next;p=open; /否则,q指像第二个结点,p指向q前一个结点while(q-next!=NULL) if(q-hxhx) q=q-next;p=p-next;elsep-next=head;head=head-next;p-next-next=q; break;if(q-next=NULL) /将head的一个结点插入到表尾if(q-hxhead-hx)p-next=head;head=head-next;p-next-next=q;elseq-next=head;head=head-next;q-next-next=NULL;return open; void main()int i,j;node s0; node *open,*close;node *p,*q;node *newlist;printf(请输入初始状态的8数码(按每行从左往右依次输入,用0表示空格):n); for(i=0;i3;i+)for(j=0;jhx=9; s0.hx=hx(s0.a);open=&s0;p=&s0;if(open-hx=0)printf(该状态已为最终状态!n);return;q=&s0;close=&s0;open=NULL;newlist=extend(q);/newlist指向新扩展出来的链表open=insert(open,newlist);/将扩展出来的结点插入到open表中while(1)q-next=open;/q始终指向close表尾结点。将open表的第一个元素加到close表open=open-next;q=q-next;q-next=NULL;if(q-hx=0)printf(n搜索成功!n);break;newlist=extend(q);open=insert(open,newlist)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目1 解读互联网连通示意图-互联网互联与互通说课稿-2025-2026学年初中信息科技安徽版2024七年级上册-安徽版2024
- 智能办公场景下钢具产品与物联网设备集成融合瓶颈
- 2025年中国柴油引擎驱动型空气压缩机数据监测报告
- 2025年中国永固黄G数据监测报告
- 无粉涂层技术突破对医疗过敏风险的防控机制重构
- 2025年板书设计考试题及答案
- 2025年药品检验员考试试题及答案
- 7.1 文化的内涵与功能 教学设计-2023-2024学年高中政治统编版必修四哲学与文化
- 新型复合材料在分体浮动阀低温脆化防护中的界面应力传递机制探索
- 数据隐私保护与智能混调系统的伦理边界重构
- 快递分拣人力承包协议书
- 医疗损害责任界定-洞察及研究
- 浙江省G12名校协作体2025学年第一学期9月高三上学期开学联考生物试卷
- 人民防空防护设备管理办法
- 2025年海南省社区工作者招聘考试笔试试题(含答案)
- (2025年标准)监控维护维修协议书
- 2025海南省通信网络技术保障中心招聘事业编制人员(第2号)考试备考题库及答案解析
- 2025年全国中学生天文知识竞赛考试题库(含答案)
- 咸味香精基础知识培训课件
- 2025至2030中国空间机器人学行业项目调研及市场前景预测评估报告
- 2025年医院药师职业技能大赛试题(附答案)
评论
0/150
提交评论