基于A星算法的最优路径规划系统_第1页
基于A星算法的最优路径规划系统_第2页
基于A星算法的最优路径规划系统_第3页
基于A星算法的最优路径规划系统_第4页
基于A星算法的最优路径规划系统_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

人工智能课程大作业PAGE1基于A*算法的最优路径规划系统XXXXXXXXX摘要:人工智能(ArtificialIntelligence)是当前科学技术发展的一门前沿学科,同时也是一门新思想,新观念,新理论,新技术不断出现的新兴学科以及正在发展的学科。本文将主要介绍人工智能在搜索方法上的应用,即基于A*算法的最优路径规划问题的解决方法。A*算法是一种求解最短路径的有效方法,也是人工智能算法中一种简单的启发式搜索方法。本文介绍了A*算法的原理及实现机制,以及在搜索出的结点解空间集中,用A*算法如何选择最优结点,最终求解出最短路径的过程。关键词:人工智能;研究报告;模板本组成员:xxxxxxx本人分工:A*算法设计及实现1引言人工智能是在计算机科学,控制论,信息论,神经心理学,哲学,语言学等多种学科研究的基础发展起来的,因此又可把它看作是一门综合性的边缘学科[1]。它的出现及所取得的成就引起了人们的高度重视,并取得了很高的评价。有的人把它与空间技术,原子能技术一起并誉为20世纪的三大科学技术成就。人工智能学科研究的主要内容包括:知识表示、自动推理和搜索方法、机器学习和知识获取、知识处理系统、自然语言理计算机视觉、智能机器人、自动程序设计等方面。本文主要介绍在路径规划问题上使用A*搜索算法来找到最优路径的设计与实现。路径规划是指在旅行前或旅行中为驾驶员提供参考行驶路线的过程,是车辆定位与导航系统的基本功能之一针对陆地车辆导航的不同要求,在路径规划中可采取多种优化标准,如最短距离、最少行驶时间或收费。本实验中将使用最短距离来寻找最优路径。2算法原理与系统设计2.1A*算法的基本思想A*算法在人工智能中是一种典型的启发式搜索算法,通过选择合适的估价函数,指导搜索朝着最有希望的方向前进,以求得最优解[2]。A*算法中,关键是求估价函数:f(n)=g(n)+h(n).其中,g(n)是从起点u到当前节点n己付出的代价,h(n)是从当前节点n到目标节点v的代价估计函数,必须保证h(n)<=h’(n),其中h’(n)是从当前点到目标点的实际最小代价。2.2A*算法的步骤A*算法的搜索步骤如下:(1)给起始节点标记,对它的没有标记过的子节点进行扩展;(2)对每一个子节点计算评价函数值,按评价值的大小进行排列,找出评价值最小的节点,并给它作标记,如果当前节点就是目标节点,则停止搜索。(3)否则,对最新被标记的节点进行第(2)步处理,并记录最短路径。2.3算法分析A*算法是利用对问题的了解和对问题求解过程和解的了解,寻求某种有利于问题求解的启发信息,从而利用这些启发信息去搜索最优路径它不用遍历整个地图,而是每一步搜索都根据启发函数朝着某个方向搜索当地图很大很复杂时,它的计算复杂度大大优于算法,是一种搜索速度非常快、效率非常高的算法。但是,相应的A*算法也有它的缺点,启发性信息是人为加入的,有很大的主观性,直接取决于操作者的经验,对于不同的情形要用不同的启发信息和启发函数,且他们的选取难度比较大,很大程度上找不到最优路径。2.4系统设计系统的实现流程图如图2.1所示。图2.1系统的实现流程图首先判断初始结点的周围8个结点是否有障碍点,从除障碍点以外的结点中求解出代价最小的结点,并加入到结果列表中。求解结点代价是根据A*算法的估价函数f(n)=g(n)+h(n)。其中g(n)是从起始结点到当前节点n己付出的代价,h(n)是从当前节点n到目标节点的代价估计。对于本实验中,设计的g(n)=10(当前结点与起始结点在同一水平线或者竖直线上。如图2.2中,初始结点,即蓝结点与1、3、5、7结点之间的代价即为10。)g(n)=14(当前结点与起始结点在同一对角线上时。如图2.2中,初始结点,即蓝结点与0、2、4、6结点之间的代价即为14。)对于本实验中,h(n)=(当前结点与目标结点之间横坐标格数+当前结点与目标结点之间纵坐标格数)*10。如图2.2中,当前结点依次为0、1、2、3、4、5、6、7,分别与红色目标结点求解h(n)。图2.2搜索图每次求解出的8个h(n),比较大小,选出最小的结点作为起始节点继续搜索。直到遇到目标结点便结束搜索,画出求解出的最优路径。3系统实现voidCAxingTestDlg::ExecuteCalculate(RectIndex{ //判断8个相邻点里是否有障碍点 for(inti=0;i<8;i++) { for(intj=0;j<blockPointNum;j++) { if(RI[i].m==blockIndexM[j]&&RI[i].n==blockIndexN[j])//有障碍点 { RI[i].weight=10000; } } } //得到权值最小的点 intminWeight=10000,minweightIndexM,minweightIndexN; for(inti=0;i<8;i++) { minWeight=min(minWeight,RI[i].weight); } resultRI->weight=minWeight; for(inti=0;i<8;i++)//获得权值最小点的坐标 { if(RI[i].weight==minWeight) { minweightIndexM=RI[i].m; minweightIndexN=RI[i].n; } } resultRI->m=minweightIndexM; resultRI->n=minweightIndexN; pathPointIndex[pathPointIndexSub].m=resultRI->m;//存储路径 pathPointIndex[pathPointIndexSub].n=resultRI->n; pathPointIndex[pathPointIndexSub].weight=resultRI->weight;//存储当前遍历点的权值 totalWeigeht+=pathPointIndex[pathPointIndexSub].weight; pathPointIndexSub++; //判断8个相邻点是否有目标点 for(inti=0;i<8;i++) { if(RI[i].m==endRectIndex.m&&RI[i].n==endRectIndex.n) { *find=true; break; } }}voidCAxingTestDlg::GetAroundPoint(RectIndexRI0,RectIndexRI[])//获得邻接点坐标,同时计算权值{ inti=RI0.m; intj=RI0.n; intpostM,postN; RI[0].m=i-1; RI[0].n=j-1; postM=(i-1)>endRectIndex.m?(i-1-endRectIndex.m):(endRectIndex.m-(i-1)); postN=(j-1)>endRectIndex.n?(j-1-endRectIndex.n):(endRectIndex.n-(j-1)); RI[0].weight=(postM+postN)*10+14; RI[1].m=i-1; RI[1].n=j; postM=(i-1)>endRectIndex.m?(i-1-endRectIndex.m):(endRectIndex.m-(i-1)); postN=j>endRectIndex.n?(j-endRectIndex.n):(endRectIndex.n-j); RI[1].weight=(postM+postN)*10+10; RI[2].m=i-1; RI[2].n=j+1; postM=(i-1)>endRectIndex.m?(i-1-endRectIndex.m):(endRectIndex.m-(i-1)); postN=(j+1)>endRectIndex.n?(j+1-endRectIndex.n):(endRectIndex.n-(j+1)); RI[2].weight=(postM+postN)*10+14; RI[3].m=i; RI[3].n=j-1; postM=i>endRectIndex.m?(i-endRectIndex.m):(endRectIndex.m-i); postN=(j-1)>endRectIndex.n?(j-1-endRectIndex.n):(endRectIndex.n-(j-1)); RI[3].weight=(postM+postN)*10+10; RI[4].m=i; RI[4].n=j+1; postM=i>endRectIndex.m?(i-endRectIndex.m):(endRectIndex.m-i); postN=(j+1)>endRectIndex.n?(j+1-endRectIndex.n):(endRectIndex.n-(j+1)); RI[4].weight=(postM+postN)*10+10; RI[5].m=i+1; RI[5].n=j-1; postM=(i+1)>endRectIndex.m?(i+1-endRectIndex.m):(endRectIndex.m-(i+1)); postN=(j-1)>endRectIndex.n?(j-1-endRectIndex.n):(endRectIndex.n-(j-1)); RI[5].weight=(postM+postN)*10+14; RI[6].m=i+1; RI[6].n=j; postM=(i+1)>endRectIndex.m?(i+1-endRectIndex.m):(endRectIndex.m-(i+1)); postN=j>endRectIndex.n?(j-endRectIndex.n):(endRectIndex.n-j); RI[6].weight=(postM+postN)*10+10; RI[7].m=i+1; RI[7].n=j+1; postM=(i+1)>endRectIndex.m?(i+1-endRectIndex.m):(endRectIndex.m-(i+1)); postN=(j+1)>endRectIndex.n?(j+1-endRectIndex.n):(endRectIndex.n-(j+1)); RI[7].weight=(postM+postN)*10+14; if(i-1<0) { RI[0].weight=10000; RI[1].weight=10000; RI[2].weight=10000; } if(j-1<0) { RI[0].weight=10000; RI[3].weight=10000; RI[5].weight=10000; } if(i+1>nRows-1) { RI[5].weight=10000; RI[6].weight=10000; RI[7].weight=10000; } if(j+1>nCols-1) { RI[2].weight=10000; RI[4].weight=10000; RI[7].weight=10000; } }4实验或测试

温馨提示

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

评论

0/150

提交评论