根据不同的应用场景和解决问题的方式,规划算法有多种分类方式。以下是一些常见的分类:
1. 按搜索空间划分
-
状态空间搜索算法:通过遍历所有可能的状态来寻找目标状态的路径。常用于路径规划问题。
- 深度优先搜索(DFS):优先深入探索可能的路径,直到无法继续再回溯。适合需要快速找到任意解决方案的情况,但不保证最优。
- 广度优先搜索(BFS):按层次逐步扩展搜索节点,适合寻找最短路径。
- A*算法:结合启发式函数和代价函数的搜索算法,既保证最优解,也提高了搜索效率。
- Dijkstra算法:寻找从起点到其他所有节点的最短路径,是一种经典的图搜索算法。
-
采样空间规划算法:基于采样的方法,不完全搜索所有状态,而是采样部分状态,适合处理高维空间问题。
- PRM(概率路图):通过采样和连接样本点,构建一个图,找到从起点到终点的路径。
- RRT(快速扩展随机树):通过随机采样不断扩展树,适合动态环境和高维空间的路径规划。
- RRT*算法:RRT的改进版本,保证了路径的渐进最优性。
2. 按算法性质划分
-
确定性算法:规划路径的过程中每一步都是确定的,结果也可以复现。常见的确定性算法包括Dijkstra、A*等,它们通常保证找到最优路径。
-
非确定性算法:结果受随机因素影响,可能每次运行的结果不同。采样空间算法(如RRT、PRM)通常属于非确定性算法,因为它们在搜索空间中引入了随机性。
3. 按是否有全局信息划分
-
全局规划算法:算法在规划过程中能够获取全局的环境信息,通常用于静态环境中,目标是找到起点到终点的最优路径。
- Dijkstra算法、A*算法属于典型的全局规划算法,它们需要已知整个环境的信息。
-
局部规划算法:算法只能获取局部环境信息,通常用于动态或未知环境中,通过动态调整路径应对环境变化。
- Bug算法:局部信息驱动的简单避障算法,机器人在接近障碍时绕过障碍继续前进。
- 动态窗口法(DWA):常用于机器人运动控制,基于机器人当前状态选择一个速度组合,使机器人避开障碍物并向目标前进。
4. 按路径优化目标划分
-
最短路径算法:目标是找到从起点到终点的最短路径,常用于导航、物流等场景。
- A*算法、Dijkstra算法和Bellman-Ford算法都属于此类算法。
-
最优控制算法:不仅要求路径最短,还要求路径的代价(如能耗、时间、平滑度等)最优。
- 动态规划:通过递归分解问题,适用于寻找多阶段决策问题的最优解。
- 贝尔曼方程:用于解决最优控制问题的动态规划基础。
-
平滑路径规划算法:为了保证路径的可行性和稳定性,目标是找到平滑的、无剧烈转向的路径,适合用于无人车或机器人运动控制。
- Bezier曲线、B样条曲线等平滑曲线生成算法。