算法人工智能课程设计_第1页
算法人工智能课程设计_第2页
算法人工智能课程设计_第3页
算法人工智能课程设计_第4页
算法人工智能课程设计_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人工智能A算法一、 A算法概述A算法是到目前为止最快的一种计算最短路径的算法,但它一种‘较优’算法,即它一般只能找到较优解,而非最优解,但由于其高效性,使其在实时系统、人工智能等方面应用极其广泛;A算法结合了启发式方法这种方法通过充分利用图给出的信息来动态地作出决定而使搜索次数大大降低和形式化方法这种方法不利用图给出的信息而仅通过数学的形式分析,如Dijkstra算法;它通过一个估价函数HeuristicFunctionfh来估计图中的当前点p到终点的距离带权值,并由此决定它的搜索方向,当这条路径失败时,它会尝试其它路径;因而我们可以发现,A算法成功与否的关键在于估价函数的正确选择,从理论上说,一个完全正确的估价函数是可以非常迅速地得到问题的正确解答,但一般完全正确的估价函数是得不到的,因而A算法不能保证它每次都得到正确解答;一个不理想的估价函数可能会使它工作得很慢,甚至会给出错误的解答;为了提高解答的正确性,我们可以适当地降低估价函数的值,从而使之进行更多的搜索,但这是以降低它的速度为代价的,因而我们可以根据实际对解答的速度和正确性的要求而设计出不同的方案,使之更具弹性;二、 A算法分析众所周知,对图的表示可以采用数组或链表,而且这些表示法也各也优缺点,数组可以方便地实现对其中某个元素的存取,但插入和删除操作却很困难,而链表则利于插入和删除,但对某个特定元素的定位却需借助于搜索;而A算法则需要快速插入和删除所求得的最优值以及可以对当前结点以下结点的操作,因而数组或链表都显得太通用了,用来实现A算法会使速度有所降低;要实现这些,可以通过二分树、跳转表等数据结构来实现,我采用的是简单而高效的带优先权的堆栈,经实验表明,一个1000个结点的图,插入而且移动一个排序的链表平均需500次比较和2次移动;未排序的链表平均需1000次比较和2次移动;而堆仅需10次比较和10次移动;需要指出的是,当结点数n大于10,000时,堆将不再是正确的选择,但这足已满足我们一般的要求;求出2D的迷宫中起始点S到目标点E的最短路径算法:findpath{把S点加入树根各点所在的树的高度表示从S点到该点所走过的步数;把S点加入排序队列按该点到E点的距离排序+走过的步数从小到大排序;1、 排序队列sort_queue中距离最小的第一个点出列,并保存入store_queue中2、 从出列的点出发,分别向4个或8个方向中的一个各走出一步3、 并估算第2步所走到位置到目标点的距离,并把该位置加入树,最后把该点按距离从小到大排序后并放入队列中由trytile函数实现4、 如果该点从四个方向上都不能移动,则把该点从store_queue中删除5、 回到第一点,直到找到E点则结束从目标点回溯树,直到树根则可以找到最佳路径,并保存在path中}文末附带的程序参考了风云的最短路径代码,并加以改进和优化:把原来用于存放已处理节点的堆栈改为队列store_queue,这样在从sort_queue队列出列时可直接放入store_queue中;解除了地图大小的限制如果有64K内存限制时,地图大小只能是180x180;删除了原程序中的一些冗余,见程序中的注释;程序继续使用dis_map数组保存各点历史历史最佳距离,也包含了某点是否已经经过的信息,虽然这样做可能会比使用链表多用一些内存,但是在搜索时可以节省不时间;程序更具有实用性,可直接或修改后运用于你的程序中,但请你使用该代码后应该返回一些信息给我,如算法的改进或使用于什么程序等;三、A算法程序本程序可以用BorlandC++或DJGPP编译include<>include<>include<>include<>definetile_numx,yymap_w+x;}}intreadmap{FILEf;inti,j;f-fopen,r;assertf;fscanff,"%d,%d\n”,&map_w,&map_h;map-mallocmap_wmap_h+1;assertmap;fori-0;ifgetsmap+tile_num0,i,map_w+2,f;fclosef;start_x-T,end_x-T;fori-0;iforj-0;jifmaptile_numj,i--'s'maptile_numj,i-'',start_x-j,start_y-i;ifmaptile_numj,i--'e'maptile_numj,i-'',end_x-j,end_y-i;}assertstart_x>-0&&end_x>-0;dis_map-mallocmap_wmap_hsizeofdis_map;assertdis_map;return0;}voidshowmap{inti,j;clrscr;fori=0;igotoxy1,i+1;forj=0;jifmaptile_numj,i=''cprintf"O";elsecprintf"";}gotoxystart_x+1,start_y+1;cprintf"s";gotoxyend_x+1,end_y+1;cprintf"e";}intmain{intpath;readmap;showmap;getch;path=findpath;printpathpath;ifdis_mapfreedis_map;ifpathfreepath;ifmapfreemap;getch;return0;}<—ifsupportLineBreakNewLine—><——endif——>四、运行结果79,2-4□□□□□口口口口口□□□□口□□□口口口口□□□□□口口口□口□□口□□□□□口口口口□□□□□□□口口口口口□□□□口□□□口口口□□□□□□□□口口口口□Ci-jOQOOU00000000000000oooooooooaaQoooooQooaooooCCOOOOODOOOOC79,2-4□□□□□口口口口口□□□□口□□□口口口口□□□□□口口口□口□□口□□□□□口口口口□□□□□□□口口口口口□□□□口□□□口口口□□□□□□□□口口口口□Ci-jOQOOU00000000000000oooooooooaaQoooooQooaooooCCOOOOODOOOOCOOOOODDOOOOOOCOOOOODO口口口口口口口口口口□aoODDaooo0000oooaaaaoo口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口OOOQOOODDOOQOOQOOOODOOOO口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口EIDDDD口口口口口口口口口口口口口口口口口口口口口ODQQOOOOOOOo0000000□OOOOODOOOOooooooooaoe000口口口口口口口口口口口口口口口口口口口口OOOOOOQDOOOQaOOOOQOOOOODO口口口口口|□口口口口口口口口口口口口口口口口口口口口口口|□口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论