位置: IT常识 - 正文

【路径规划】A*算法方法改进思路简析(路径规划原理)

编辑:rootadmin
【路径规划】A*算法方法改进思路简析 A*算法方法改进思路简析0. 前言1. A*算法的总体流程2. A*算法的改进2.1 启发函数的选择与优化2.1.1 预估函数的选择2.1.2 为启发函数增加权重系数2.1.3 节点比较时启发函数的优化2.2 搜索邻域的优化2.2.1 舍弃邻域法2.2.2 扩展邻域法2.3 双向搜索算法(双向A*)2.4 对openlist列表进行数据结构优化2.4.1 未排序数组或链表2.4.2 有序数组2.4.3 有序链表2.4.4 有序跳表2.4.5 哈希表2.4.6 二叉堆2.4.7 数据结构优化总结2.5 曲线平滑化3. 改进方法的实验测试样例解释与源程序测试3.2 对启发函数的改进3.3 搜索邻域的优化3.3.1 删减邻域法3.3.2 邻域扩展法3.3 路径平滑3.4 双向A*3.5 综合改进4. 总结代码与相关实现参考文献与相关网站0. 前言

推荐整理分享【路径规划】A*算法方法改进思路简析(路径规划原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:路径规划的基本流程和方法,路径规划步骤,路径规划原理,路径规划什么意思,路径规划教程,路径规划最新算法,路径规划教程,路径规划 rrt,内容如对您有帮助,希望把文章链接给更多的朋友!

A算法作为经典的传统路径规划算法,在计算全局最优路径有着较好的性能,在机器人导航等领域上起着关键作用,针对这点出发,将对A算法进行基本功能实现,以分析其优缺点,并在此基础上进行改进。改进的内容为,将针对特定地图的相关特点,设计合理的预估函数,设置了包含代价函数和启发函数的权重函数,其次,将传统的8方向搜索降为5个方向,舍弃无用的方向,然后在此基础上,对开放列表的数据结构进行堆优化,并且采用双向A算法进一步提高计算速度,并针对实际机器人运动过程中的路径不平滑问题采用贝塞尔曲线进行平滑化处理。经过仿真,改进后的算法在路径计算时间,路径平滑度都有改善,并进一步验证了A算法的可行性。这是我第一次尝试写文章,因此更像是一个笔记之类的东西,难免有错误与不妥之处,敬请指出与海涵。

1. A*算法的总体流程

A*算法作为Dijkstra算法和BFS的结合算法,其与这两种算法的区别就是采用了启发函数,这也是这个算法的核心。 启发函数的形式:

*f(n)=g(n)+h(n)* (1)

*f(n)*表示结点的综合优先级,在选择结点时考虑该结点的综合优先级; *g(n)*表示起始点到当前结点的代价值; *h(n)*表示当前结点到目标点的代价估计值,也就是预估函数。 为了对这两个值进行相加,这两个值必须使用相同的衡量单位,以下的讨论也都是在此基础上进行的。 为了便于讨论与理解,下面的地图的形式都会已二维数组的形式表示。因此,为了简单预估当前节点到目标点的代价,采用较多的是欧几里得距离,即

d(n)=√(〖(be.x-end.x)〗^2+〖(be.y-end.y)〗^2 )【路径规划】A*算法方法改进思路简析(路径规划原理)

A*算法通过设置两个列表openlist和closelist来对地图中的点进行控制。算法伪代码如下:

将起始点s加入到开启列表openlist中重复以下过程: a) 遍历开启列表openlist,寻找F值最小的结点,并将其作为当前要处理的结点 b) 将要处理的结点移到关闭列表closelist c) 对当前结点的8个相邻结点的每个结点: i. 如果他是不可抵达的或者已经在关闭列表closelist中,忽略; ii. 如果他不在开启列表openlist中,将其加入openlist,并把当前结点设置为其父节点,记录当前结点的F、G、H值; iii. 如果他已经在开启列表openlist中,检查这条路径(即经由当前结点到达相邻结点)是否更好,用G值做参考,更小的G值表示这个更好的路径,如果是这样,将其父节点设置为当前结点,并重新计算他的G值和F值,如果开启列表openlist是按F值进行排序,改变后需要重新排序。 d) 停止,当 i. 终点加入到了开启列表openlist中,此时路径已经找到 ii. 查找重点失败,并且开启列表openlist中是空的,此时没有路径保存路径,从终点开始,每个结点沿着其父节点移动直到起点。2. A*算法的改进2.1 启发函数的选择与优化

在A算法的总体流程中提到,A算法的核心就是启发函数,根据式(1),其中的g(n)作为起始点到当前点的代价,其值一般是固定的,所以围绕启发函数的优化一般都是围绕h(n)即预估函数展开的。

2.1.1 预估函数的选择

前面提到,对于二维网格地图,一种常用的预估函数就是应用欧几里得距离。但是,需要注意的是,如果机器人的运动并不是无限制的,或者说是不允许无角度限制的进行运动,例如:当机器人被设定为只允许沿八方向运动时,此时欧氏距离并不能准确描述当前点到终点的运动代价,因为机器人不允许按这种方式直接抵达,而此时采用切比雪夫距离则可以更准确的描述运动代价。 切比雪夫距离公式:

*d(n)=max⁡(abs(be.x-end.x),abs(be.y-end.y))*

同样的,如果当机器人只允许沿四个方向运动,那么曼哈顿距离更能准确描述运动代价。 曼哈顿距离公式:

*d(n)=abs(be.x-end.x)+abs(be.y-end.y)*

如果h(n)能够更为准确的描述当前点到终点的代价,那么就可以使在依赖启发函数f(n)进行选点时更加准确。 所以,针对实际的工作需求,确定合适的*h(n)*是十分重要的,预估函数越贴近实际的路径代价,其选点准确度越高,但也需要注意h函数的复杂程度,过于复杂的预估函数会极大的提高计算量,造成运算速度减慢。

2.1.2 为启发函数增加权重系数

关于预估函数另一个方面的优化是改进启发函数的权重系数,对于A算法的基本原理,不难将其理解为迪杰斯特拉算法和BFS的综合应用, 其中Dijkstra算法能通过比较最优的实际代价来有效的找到当前的最优路径或是其大致方向,而BFS则可以快速扩展当前点的周围节点。 简言之,Dijkstra算法的特性是一定会找到最优路径,但速度很慢。而BFS则是运行速度很快,但是不能保证结果一定是最优路径。再通过观察这两个算法的原理,Dijkstra算法主要要求的是已计算的路径的代价。而BFS考察的是还有多少步到达终点,所以不难发现可以将启发函数与这两种算法进行对应,Dijkstra算法对应的就是代价函数g(n),而BFS对应的是预估函数h(n)。 再回到我们对启发函数的定义,不难发现启发函数就是代价函数与估计函数1:1的和,但是,如果我们更改实际代价与预估代价的权重,就可控制A算法更偏向于实际代价或是预估代价,例如将代价权重改为2:1,即f(n)=2g(n)+h(n),此时,f(n)会更偏向描述实际代价,也就是会更优先考虑当前路径已造成的代价,所以f会更贴近于Dijkstra算法,当我们推广这个结论,当g(n)>> h(n)时,就相当于f(n)只考虑实际代价而完全不考虑预估代价,即退化为Dijkstra算法。反之,若g(n)的权重系数小于h(n)的权重系数,则会优先考虑预估代价,做同样的推广,当h(n)>> g(n)时,A算法就会退化为BFS。结论如表1。

因此,调整实际代价与预估代价的权重,可以有效地减少搜索点,提高搜索速度。 为了便于考虑,我们可以将启发函数改为如下形式,即在预估函数前增加一个系数w,从而改变启发函数的权重。 f(n)=g(n)+wh(n) (2)* f(n)=g(n)+w*h(n) (2)

进一步的,我们不可能只考虑搜索速度而不考虑规划的路径,此时就考虑使用动态加权的方式,以原本的启发函数h(n)为判断依据,我们把它

本文链接地址:https://www.jiuchutong.com/zhishi/297774.html 转载请保留说明!

上一篇:使用vue,实现前端导入excel数据(vue前端怎么运行)

下一篇:【2022.3】尚硅谷Vue.js从入门到精通基础笔记(理论+实操+知识点速查)(尚硅谷百度贴吧)

  • 微信被拉黑了怎么办才能强制联系对方(微信被拉黑了怎么看到对方的朋友圈)

    微信被拉黑了怎么办才能强制联系对方(微信被拉黑了怎么看到对方的朋友圈)

  • vivox50和x50pro的区别(vivox50与x50pro的区别)

    vivox50和x50pro的区别(vivox50与x50pro的区别)

  • 抖音关注请求怎么看不到(抖音关注请求怎么设置拒收)

    抖音关注请求怎么看不到(抖音关注请求怎么设置拒收)

  • 华为荣耀20Pro怎么关闭智慧语音(华为荣耀20Pro怎么root)

    华为荣耀20Pro怎么关闭智慧语音(华为荣耀20Pro怎么root)

  • 华为nova3怎么开微信美颜(华为nova3怎么开悬浮窗回复信息)

    华为nova3怎么开微信美颜(华为nova3怎么开悬浮窗回复信息)

  • 酷狗音乐哪一年诞生的(酷狗音乐哪一年开始的)

    酷狗音乐哪一年诞生的(酷狗音乐哪一年开始的)

  • 华为荣耀20lite是青春版吗(荣耀20lite百度百科)

    华为荣耀20lite是青春版吗(荣耀20lite百度百科)

  • 华为手机各系列的定位和特点(华为手机各系列特点和推荐)

    华为手机各系列的定位和特点(华为手机各系列特点和推荐)

  • 算法设计的目的是什么(算法设计的主要内容有什么)

    算法设计的目的是什么(算法设计的主要内容有什么)

  • 11pro美版是双卡双待吗(11pro美版是不是单卡)

    11pro美版是双卡双待吗(11pro美版是不是单卡)

  • dcs与plc的区别(dcs和plc关系)

    dcs与plc的区别(dcs和plc关系)

  • 微信vip会员有什么用(微信会员要收费吗)

    微信vip会员有什么用(微信会员要收费吗)

  • 照片为什么会突然没有(照片为什么会突然没有好多张)

    照片为什么会突然没有(照片为什么会突然没有好多张)

  • 钉钉未激活能收到消息吗(钉钉未激活有什么影响)

    钉钉未激活能收到消息吗(钉钉未激活有什么影响)

  • 电脑中的commander什么意思(电脑中的幻想世界)

    电脑中的commander什么意思(电脑中的幻想世界)

  • excel2010默认文件名(excel 2010使用默认文件类型是)

    excel2010默认文件名(excel 2010使用默认文件类型是)

  • ps透视裁剪工具怎么用(ps透视裁剪工具为什么用不了)

    ps透视裁剪工具怎么用(ps透视裁剪工具为什么用不了)

  • 抖音企业号有什么好处(抖音企业号有什么费用)

    抖音企业号有什么好处(抖音企业号有什么费用)

  • 淘宝购物车能放多少商品(淘宝购物车能放多少宝贝)

    淘宝购物车能放多少商品(淘宝购物车能放多少宝贝)

  • OPPO k5怎么找回联系人(oppoa5手机找回)

    OPPO k5怎么找回联系人(oppoa5手机找回)

  • vivos1手电筒在哪里开

    vivos1手电筒在哪里开

  • 荣耀手环5和荣耀手环4对比(荣耀手环5和荣耀手环4表带一样吗)

    荣耀手环5和荣耀手环4对比(荣耀手环5和荣耀手环4表带一样吗)

  • 苹果11有几个卡槽(苹果11有几个卡槽在哪个位置)

    苹果11有几个卡槽(苹果11有几个卡槽在哪个位置)

  • 微信怎么点聊天记录(微信怎么聊天记录迁移到新手机)

    微信怎么点聊天记录(微信怎么聊天记录迁移到新手机)

  • 抖音已重置是注销了吗(抖音已重置是注销成功吗)

    抖音已重置是注销了吗(抖音已重置是注销成功吗)

  • 三星a8svoice怎么关闭(三星svoice怎么用)

    三星a8svoice怎么关闭(三星svoice怎么用)

  • 小写金额转换成大写金额(小写金额转换成大写金额 元整)

    小写金额转换成大写金额(小写金额转换成大写金额 元整)

  • 取消抢票会全额退款吗(取消抢票会怎么样)

    取消抢票会全额退款吗(取消抢票会怎么样)

  • 怎么查看对方微信真实名字(怎么查看对方微信撤回的消息内容)

    怎么查看对方微信真实名字(怎么查看对方微信撤回的消息内容)

  • 织梦dede文章列表有缩略图显示没有缩略图的不显示图片(织梦发布文章栏目怎么不显示)

    织梦dede文章列表有缩略图显示没有缩略图的不显示图片(织梦发布文章栏目怎么不显示)

  • 商贸企业出口进项税会计分录汇总
  • 房地产企业所得税预计毛利率
  • 信息采集需要填两个家庭成员,但只能有一个监护人
  • 两个金税盘能用一个系统
  • 简易征收的收入包括哪些
  • 租金收入需要缴增值税吗
  • 个税专项扣除做什么用
  • 机动车销售发票可以跨年抵扣吗
  • 挂失申请怎么写
  • 银行汇票怎么填写
  • 工业总产值怎么计算公式
  • 委托加工物资加工费怎么结转
  • 企业录用失业人员有税收优惠吗
  • 装卸搬运费是否含税
  • 发票虚开税务局要求补税怎么办?
  • 增值税专用发票和普通发票的区别
  • 运输公司购买机票怎么买
  • 电子发票转收入怎么做为记账凭证?
  • 小额纳税人增值税专用发票税率1%
  • win10 2004 2009
  • remind32.exe - remind32是什么进程 有什么用
  • 佣金代扣代缴增值税还有附加税吗
  • windows7便签删除了怎么恢复
  • 对公账户转库存现金对方科目怎么填
  • 协调费用应该怎么表述才合理
  • 公司法人向公司借款未还,公司可以倒闭吗
  • window10电源选项
  • 股东可以随时退出吗
  • php strtok
  • uniapp微信小程序头像获取与服务器对接
  • 发票交付在哪里
  • 差旅费误餐补贴标准
  • 外贸企业收到红字发票
  • 高新补贴收入是否可以作为不征税收入
  • php array add
  • 投喂小鸟
  • php常用类
  • win11装双系统虚拟机mac
  • 远程调试时,gdbserver运行在调试机
  • 软件开发服务费开票税目
  • 收到的赔款,罚款怎么算
  • 个体户做账流程新手必看
  • 年终奖要计入工资吗
  • python 脚本编写
  • 事业单位成本核算具体指引—公立医院
  • 银行托管账户的规定有哪些
  • 报销单的经办人是什么意思
  • 财务会计的主要目标和工作内容包括
  • MYSQL的数据类型共有几大类?
  • sql语句取并集
  • 发行股份的原则
  • 开票金额为什么是负数
  • 城镇土地使用税怎么算
  • 先付款后开票如何入账
  • 代理出口业务会计分录
  • 如何制作会计账簿
  • 商品流通企业如何控成本
  • 在sql中执行一个创建数据表的脚本文件
  • sql server数据库怎么导出
  • sql教程
  • win7 win8.1双系统安装教程
  • u盘一键启动安装系统,电脑只有两个盘
  • win10系统d盘变成e盘,进入winpe盘符正常
  • Windows 7 RTM、Vista、XP 性能测试
  • fpd文件是什么意思
  • neoCopy.exe - neoCopy是什么进程 有什么用
  • win10事件查看器好多错误
  • linux哪些方法可以查看命令的详细信息
  • Win10年度升级版将正式提供暗黑主题 未自定义颜色都会变暗
  • win1020h2版好不好
  • win10系统百度网盘链接
  • node. js教程
  • JQuery ZTree使用方法详解
  • python int 转 float
  • jquery的实现原理
  • jquery显示隐藏div
  • 陕西税务局官网登录
  • 泉州国税局网站首页
  • 广东发票勾选认证操作流程
  • 浙江税务开票系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设