基于A星算法的最优路径规划系统.doc

基于A星算法的最优路径规划系统.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
基于A星算法的最优路径规划系统

基于A*算法的最优路径规划系统 XXXXXXXXX 摘要:人工智能(Artificial Intelligence)是当前科学技术发展的一门前沿学科,同时也是一门新思想,新观念,新理论,新技术不断出现的新兴学科以及正在发展的学科。本文将主要介绍人工智能在搜索方法A*算法是一种求解最短路径的有效方法,也是人工智能算法中一种简单的启发式搜索方法。本文介绍了A* 算法的原理及实现机制, 以及在搜索出的结点解空间集中,用A* 算法如何选择最优结点,最终求解出最短路径的过程。 关键词:人工智能;研究报告;模板 本组成员:xxxxxxx 本人分工:A*算法设计及实现 1 引言 人工智能是在计算机科学,控制论,信息论,神经心理学,哲学,语言学等多种学科研究的基础发展起来的,因此又可把它看作是一门综合性的边缘学科[1]。它的出现及所取得的成就引起了人们的高度重视,并取得了很高的评价。有的人把它与空间技术,原子能技术一起并誉为20世纪的三大科学技术成就。人工智能学科研究的主要内容包括:知识表示、自动推理和搜索方法、机器学习和知识获取、知识处理系统、自然语言理计算机视觉、智能机器人、自动程序设计等方。 A*算法在人工智能中是一种典型的启发式搜索算法,通过选择合适的估价函数,指导搜索朝着最有希望的方向前进, 以求得最优解[2]。A*算法中,关键是求估价函数:f(n)=g(n)+h(n).其中,g(n)是从起点 u 到当前节点 n 己付出的代价,h(n)是从当前节点 n 到目标节点 v 的代价估计函数,必须保证h(n) <=h’(n),其中h’(n)是从当前点到目标点的实际最小代价。 2.2 A*算法的步骤 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 系统实现 void CAxingTestDlg::ExecuteCalculate(RectIndex RI[], RectIndex * resultRI, bool * find) { //判断8个相邻点里是否有障碍点 for (int i = 0; i < 8; i++) { for (int j = 0; j < blockPointNum; j++) { if (RI[i].m == blockIndexM[j]&&RI[i].n == blockIndexN[j])//有障碍点 { RI[i].weight = 10000; } } } //得到权值最小的点 int minWeight=10000, minweightIndexM,minweightIndexN; for(int i = 0; i < 8; i++) { minWe

文档评论(0)

xjj2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体刘**

1亿VIP精品文档

相关文档

相关课程推荐