D*算法,一个不太准确的命名可以叫做Dynamic A* Algorithm。
适用于动态环境和重规划过程,因为相比于dijkstra算法额外构建了一个优先级队列(K值)记录每个节点被放入openlist中的最小价值(h),以K值作为排序依据优先遍历。当障碍物发生改变,在原有的最佳路径去回溯时(即从起点走到终点的途中遇见障碍物时),可以根据这个K值去修正阻断节点与周围节点的访问成本,并将节点阻断的信息传播到周边节点中,以此进行新路径的局部重规划。
特点:反向规划初始路径,这样当障碍物重新进行规划时,已有的代价值h就可以当做启发式函数向代价最低的方向去扩展重规划。(反向规划初始路径是因为在重规划时路径的搜索和执行是正向执行的,正向规划的路径在发生障碍物改变时并不能包含和目标点的联系与信息,而反向规划的代价值包含了目标信息,因此能够引导重规划)
PROCESS_STATE()主要解决两大问题,1、计算最优路径(传播cost减少);2、传播异常信息(传播cost增加)。以上两种情况分别用k(X)与h(X)的关系来进行控制。假设X是从优先队列OPEN_QUEUE中弹出来的最优节点
- 当节点X的k(X)==h(X)时,称X为LOWER State,此时进行路径的优化,试图减少周围节点的cost
- 当节点X的k(X)<h(X)时,称X为RAISE State,此时进行异常信息的传播,将cost的增加传给周围节点