动态规划
一种解决问题的重要思想。分而治之。
核心思想:问题分解成无数子问题,用迭代的方法求解最终问题的答案。(上个子问题的解为下一个子问题的解提供帮助)
应用:网格型的路径规划
公式:d p [ i ] [ j ] = m i n ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) + g r i d [ i ] [ j ] ; dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];dp[i][j]=min(dp[i−1][j],dp[i][j−1])+grid[i][j];
栅格法
将环境用栅格来表示,分为自由栅格和障碍栅格,以栅格为基本单位记录机器人所在环境信息。机器人只能在自由栅格上移动。游戏中的地图,由瓦片组成,也可以看成栅格,有建筑物的地方,是玩家不能穿越的。
栅格地图也是当前广泛采用的环境地图的描述方法。
人工势场
核心思想:将目标和障碍物分别看做对机器人有引力和斥力的物体,机器人沿引力与斥力的合力来进行运动。运动环境生成势力场,然后机器人沿着势力场的引导运动。
引力势函数:
斥力势函数:
总的势函数:
优点:效率高
缺点:可能出现斥力与引力相互抵消的情况,导致陷入局部最优。(如下图所示,第一幅图是能到达终点的情况,第二幅由于斥力和引力相互抵消,达到平衡,所以机器人无法到达目标)
可能出现离目标太远出现引力过大,直接撞向障碍物的情况。


Voronoi算法
核心思想:对空间依据障碍物进行分割,每个子空间的边界就是距离这个障碍物以及相邻障碍物最远的点,沿着边界便能找到一条远离障碍物的路径。
优点:安全
缺点:不是最优路径
应用:自动驾驶

Dijkstra算法
Dijkstra算法核心思想:以广度优先搜索的思想,以节点到起点的代价作为优先级的参考,选择代价最小的点作为下一个点。
A*算法
核心思想:以节点到起点以及节点到终点的代价的和作为优先级来标记未遍历的点。
公式:
优势:A*算法相较于Dijkstra算法不仅能找到最优路径,而且效率高。
Dijkstra算法:

A*算法:
随机路标图法
做法:随机路标图法是一种基于图搜索的方法,将连续空间转换为离散空间,再利用A*等搜索算法,在路线图上寻找路径。这种方法能用相对少的随机采样点来找到一个解。它分为两个步骤:学习阶段,查询阶段。
学习阶段就是在给定图的自由空间里随机撒点(自定义个数),构建一个路径网络图。其中分为构造步骤、扩张步骤。
查询阶段:查询从一个起点到一个终点的路径。分为:局部路径规划,距离计算,碰撞检查。
优势:速度快;
劣势:结果受采样点个数,邻域大小的影响。

快速搜索随机树算法
核心思想:通过采样点的指引完成树节点的扩展,最终找到一条到达终点的树分支。
应用:机械臂的规划
优点:在完全已知的环境中通过采样扩展搜索,速度快。
缺点:寻路的效率受随机采样概率的和步长大小的影响;路径不是最优,不平滑。
模拟退火法
爬山法的缺陷:如何初始值没选好就会陷入局部最优解 。
模拟退火法:会以一定概率接受一个比当前解要差的解。并且这个概率受时间影响。
步骤:
1、初始化路径:先每行取点(在自由栅格中选取)再通过插点等办法把点连成连续路径。
2、计算路径长度
3、产生新路径,并计算路径长度。新路径产生方式:在原路径上删除一些点得到一个间隔路径,把这个间隔路径连续化得到一条新的路径。
4、判断是否接受接受新路径:新路径更短就接受,新路径比就路径长就比较接受概率和随机数来决定是否接受