路径规划算法--Dijkstra算法,A*算法,CBS算法

本文深入探讨了Dijkstra、A*、CBS和IDA*四种路径规划算法的基本思想和执行流程,详细解析了每种算法的工作原理,包括如何寻找最短路径、如何平衡效率与准确性,以及如何处理多智能体路径冲突等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路径规划算法

写的比较糙,作为笔记,写到自己看懂的程度,细节没展开写,也在学习中,欢迎讨论


一、Dijkstra算法

基本思想:通过Dijkstra计算图G中的最短路径时,需要指定起点s。
流程
(1)引进两个集合,open list:存放未求出最短路径的顶点及其距离;close list存放已求出最短路径的顶点及其距离。
(2)初始时,close list只有起点s,距离为0;open list是除起点s之外的所有顶点及其距离。
(3)从open list取出距离最短的顶点及其距离放入到close list中;接着,更新open list中顶点的距离。
(4)更新完后,重复(3)的操作,直到找到目标点或open list 变为空。


二、A*算法总结

基本思想
A算法把Dijkstra算法(靠近初始点的结点)和最佳优先搜索算法(BFS)(靠近目标点的结点)的信息块结合起来。
在讨论A
算法的标准术语中,g(n)表示从初始结点到任意结点n的代价,h(n)表示从节点n到目标点的启发式评估代价,当从初始点向目标点移动时,A*权衡这两者。每次进行主循环时,它检查f(n)最小的结点n,其中f(n)=g(n) + h(n).
流程
(1)引进两个集合,open list:存放待检测的结点及F值;close list:已检测过的结点及F值。
(2)初始时,把起点s放入到open list中,close list为空。
(3)取出open list中F值最小的结点,设为当前结点,把当前结点放入到close list中;遍历当前结点的相邻可达结点,相邻结点在close list,则跳过,否则加入/更新open list ;加入或更新的结点以当前结点为父节点。
(4)重复(3)操作,直到当前节点为目标结点或open list变为空。


三、CBS算法(基于冲突的搜索算法)

上层:解决多AGV之间的路径冲突 ,引入约束树结点的概念;
下层:多个单AGV路径规划。
流程
(1)下层使用A*算法求出多个单AGV路径规划。
(2)引入优先级队列 open list,将约束树根节点R放入open list,以R.cost为键值,R包含R.constraints(为空),R.solution(多个单AGV的路径规划集合),R.cost(解的成本)。
(3)open list取出成本最低的结点N,N.solution无冲突,则N.cost为所求解;否则,对第一个冲突处理,针对冲突的点,分裂为若干个子节点,继承当前结点的全部约束和解,并分别添加新的约束,更新路径和cost值。
(4)重复执行(3)操作,直到open list的成本最低节点N的解无冲突或求解失败


四、IDA*算法

迭代加深搜索算法,在搜索过程中采用估值函数,以减少不必要的搜索。
IDA* 算法核心:设置每次可达的最大深度depth,若没有到达目标状态则加深最大深度。采用估值函数,剪掉f(n)大于depth的路径。
优点:
使用回溯方法,不用保存中间状态,大大节省了空间。
缺点:
重复搜索:回溯过程中每次depth变大都要再次从头搜索。
用途:
和A*算法大致相同。

【资源说明】 基于CBS算法多AGV路径规划仿真系统源码+项目开发说明.zip 多Agent路径规划仿真系统 针对多AGV物流分拣场景建立的仿真模拟系统,是我的本科毕业设计 本系统使用p5.js编写,推荐使用atom等支持该语言的IDE编辑。 下载IDE后,下载插件 ```bash File -> Settings -> Packages Search p5js-toolbar and Install it ``` ## Run Locally 完成后开启p5js-toolbar ```bash Packages -> p5js-toolbar -> Toggle p5.js toolbar Click the run button and that's all ``` ## Optimizations ### V1.0 算法基本实现,逻辑已基本无bug 输入 : * agent:start,end * obstacles * map:rows,cols 输出: * 如果没冲突,给出每个agent的路径数组 #### 待实现 UI界面,参数调整接口,单步模式和直接运行模式。 ### V1.1 UI界面初步完成,目前提供参数如下: * 地图行数、列数、障碍物比例 * 障碍物、每辆小车的起点和终点都可以自由设定 * 运行功能(直接执行模式)和重置功能 ### V1.15 UI界面进一步完善,加入如下功能: * 可以添加小车 * 添加单步执行模式 * 显示当前运行状态 #### 待实现 删除小车功能,设定小车颜色(可选),加入预设的特殊布局地图、计时功能。 ### V1.2 删除小车功能完成 #### 问题记录 ![image-20201119153155889](C:\Users\AA\AppData\Roaming\Typora\typora-user-images\image-20201119153155889.png) 如图所示情况,绿色小车到达终点后,在实际情况中会离开,继续执行下一个任务,但在路径中,绿车停靠在终点,会和红车路径不断产生冲突,导致死循环,这是不合理的。 #### 解决方案 * 每个小车有一个任务列表,执行完一个就去做下一个。 * 在补全小车路径到maxT时,补为特殊点,即不会再和其它小车冲突的点。 ### V1.25 删除小车bug修复,计时功能初步完成,修改小车速度功能完成 #### 关于计时功能 对于单轮任务,需要对每个Agent的执行时间单独计时 最好拓展到多轮任务,对任务直接计时 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值