路径规划算法—Graph Search Basis
图搜索路径规划算法通用模板
- 维护一个容器,通常叫做开放列表,该容器装载将来要去访问的节点
- 容器一开始是空的,刚开始装入的节点是起始节点
- 循环
Remove:在容器中根据事先给定的一个指标弹出一个节点
Expandsion: 发现它可能存在的邻居节点
Push: 将邻居重新装入该容器
- 结束循环
那么当这个容器为空或者将终点加入到这个容器中,结束循环;其次还需要创建另外一个容器(关闭列表)来维护弹出的节点,防止节点回环,险入死循环。
常用的图搜索算法
非启发式搜索算法
DFS(Deapth First Search)深度度优先搜索
深度有限搜索则相当于一个后进先出的栈。
BFS(Breadth First Search) 广度优先搜索
广度有限搜索算法相当于一个先进先出的队列。
启发式搜索算法
Greedy Best First Search算法
贪婪最佳优先搜索Greedy Best First Search,是一种启发式搜索算法。贪婪最佳优先搜索则相当于一个根据与终点的距离进行排序的优先级队列。
启发函数决定优先级,这里使用的启发函数为h,计算队列中节点距离终点的距离,然后再对其进行排序。
通过此方法,算法会优先向终点方向搜索,但是当遇到障碍物等情况时,不一定找到最优路径。
Dijkstra算法
Dijkstra算法适用于有权图,使用的是优先队列(Priority Queue),只不过决定优先队列中元素优先级的逻辑不同。启发函数为g,计算队列中节点距离起点的距离,然后再对其进行排序。
Astar算法
Astar = Dijkstra + Greedy Best First,那么Astar的容器依然为优先队列,控制指标为f = g + h,其中g 表示从开始状态到节点的累计成本,h 表示从节点n到目标状态的估计最小代价 ,即目标代价。
变种的Astar算法成本函数满足f = a × g + b × h,那么根据a ,b 的取值,可以得到不同的“变种Astar”。
a = 0 , b = 1 : Astar = Greedy Best First
a = 1 , b = 1 : Astar
a=1 , b=0 : Astar = Dijksta
a = 1 , b = ε > 1 : Astar变成权重Astar,英文名为(Weighted Astar)
经典搜索算法总结https://blog.csdn.net/qq_21746331/article/details/117405789