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

路径规划算法

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


一、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*算法大致相同。

你可能感兴趣的:(算法,算法,路径规划,A-star,dijkstra)