介绍
路径规划是帮助驾驶员规划行驶路线的过程。其目的是实现自动驾驶车辆在障碍物环境中快速、准确地找到一条无碰撞路径,最终达到目标点。根据不同的不同的规划目的,路径规划可以分为了两种:
1. 用于大型车队的调度和进行交通管制的多汽车路径规划;
2. 应用于各种汽车导航系统的单汽车路径规划。
单汽车路径规划主要解决的问题是 —— 在道路网络中寻找从起始点到目标点之间的最佳路径。如果评判最佳路径可以有很多标准,例如最短行车距离、最短行车时间等等。最优路径规划的问题就是在给定的道路网络中依据一定的最优标准寻找符合该标准的最优路径问题。路径规划流程如下图。
路径规划可以分为静态路径规划和动态路径规划。以静态道路交通信息为基础的路径规划是静态路径规划,以动态交通信息来确定路权大小,以起始点到终止点之间的交通阻抗最小为原则确定路径规划的最小代价路线为动态路径规划。由于问题特征、网络特征的复杂性不同,最短路径算法也表现出多样性。按照一般问题的不同,最短路径问题可以按下图进行分类。
前言
Dijlstra算法是一种用于计算最短路径的常用算法。该算法主要适用于单源非负权边的无向图。其中:
1. 单源 —— 只有一个源点,然后计算其他结点到该源节点的最短路径和距离;
2. 非负权边 —— 表示两节点之间的权重为非负数;
3. 无向 —— 结点之间不存在方向的区别。
&emnsp;Dijkstra算法是一种基于贪心策略的最短路径算法,该种算法的原理是按照路径长度逐点增长的方法构造一棵路径书,从而得出从该树的根结点(指定的源结点)到其他所有结点的最短路径。
求解示例
假设由如下结点网络,需要求解A点到F点的最短最路径。各点之间的距离计算如下表:
A | B | C | D | E | F | |
A | 0 | 1 | 2 | 3 | INF | INF |
B | 1 | 0 | INF | INF | INF | 6 |
C | 2 | INF | 0 | 3 | 1 | 4 |
D | 3 | INF | 3 | 0 | 4 | INF |
E | INF | INF | 1 | 4 | 0 | 2 |
F | INF | 6 | 4 | INF | 2 | 0 |
上述表格可以看出,对于无向图,以表格的对角线分界,左下三角与右下三角是完全对称的。现在指定源结点为A,求解其他结点到A的最短路径。
初始状态
1. 设置一个点集合 S n S_n Sn,其中存放已找到最短路径的结点,初始状态为{A};
2. 设置另一个点集合 T n T_n Tn,其中存放尚未找到最短路径的结点,初始状态为{B, C, D, E, F};
3. 设置一个距离数组 D n D_n Dn,其中各个结点到源结点的最短距离,初始状态为{0,1,2,3,INF,INF};
4. 设置另外一个距离数组 T m T_m Tm,记录各点到当前处理点的最短距离与当前点到源结点的最短距离之和,初始状态为{0,1,2,3,INF,INF};
5. 设置一个最短路径记录表 P n P_n Pn,记录各结点的最短路径连接关系,初始状态为{A,A,A,A,0,0}。
结合数组 P n P_n Pn与 D n D_n Dn可以得到:
1. A → A = 0 A \rightarrow A = 0 A→A=0
2. A → B = 1 A \rightarrow B = 1 A→B=1
3. A → C = 2 A \rightarrow C = 2 A→C=2
4. A → D = 3 A \rightarrow D = 3 A→D=3
6. A → E = I N F A \rightarrow E = INF A→E=INF
5. A → F = I N F A \rightarrow F = INF A→F=INF
第一轮处理
当前处理的结点为A, D n D_n Dn 为 {0,1,2,3,INF,INF};
在 T n T_n Tn中寻找距离A最近的结点,从最开始的距离表格可以得出,结点B距离A最近,距离值为1,因此我们对初始状态中定义的数据进行更新:
1. S n S_n Sn更新为{A,B};
2. T n T_n Tn更新为{C,D,E,F};
3. T m T_m Tm更新为{2(1+1),1(0+1),INF(INF+1),INF(INF+1),INF(INF+1),7(6+1)};
4. D n D_n D