图,图的遍历,在二维运动规划中应用普遍
1、DFS深度优先搜索,栈、递归
stack
2、BFS广度优先搜索,队列
图搜索中,广度优先搜索,可以找到最短路径吗?
Queue
Visited列表
同心圆扩散
3、贪心(启发式)
改变原来队列的FIFO模式,给不同的节点加入优先级(距离终点最近的节点),使用PriorityQueue
4、Dijkstra(最短路径)
记录每个节点到起点的当前最短路径消耗Cost(长度),并将Cost作为该节点在PriorityQueue中的优先级
5、A star
这种 A* 算法的约束用公式表示为:
f(n)=g(n)+h(n)
对应到代码中, 也就指代以下代码:
priority = new_cost +heuristic (goal, next)
其中, f(n) 是指从起点到当前节点的代价值, 也就是 priority, 总代价越低, priority 越小, 优先级越高, 越早被 frontier. get()遍历到。 g(n) 指 new_cost, 从起点到当前节点 已知的代价值, h(n)是指从当前节点到终点所需代价的最终估算代价。
A*算法主要维护两个列表:Open List 和 Close List 。 Open List 指的是 Frontier,表示接下来有可能要遍历的一系列节点。Close List 包含所有已经遍历过了的节点。
部分思路参考《无人驾驶原理与实践》
Apollo 6.0 的 A star planner - 知乎