路径规划算法笔记

本文详细介绍了图搜索算法GBFS(GreedyBest-FirstSearch)、Dijkstra和A*在路径规划中的应用,探讨了它们的优缺点,包括GBFS的高效性与可能的次优解,Dijkstra的精确性与时间复杂性,以及A*的高效性和概率完备性。
摘要由CSDN通过智能技术生成

基于搜索的路径规划

图搜索算法:DFS、BFS、GBFS、Dijkstra、A*

JPS算法

DFS

在这里插入图片描述

BFS

在这里插入图片描述

GBFS

采用优先队列作为openlist
GBFS(Greedy Best-First Search)是一种启发式搜索算法,通常用于解决图搜索问题,例如图的最短路径或解决问题的状态空间搜索。下面是GBFS算法的优点和缺点:

GBFS的优点:

  1. 高效性:GBFS使用启发式函数(heuristic function)来估计节点到目标节点的距离,然后根据这个估计值选择下一个要扩展的节点。这使得它在大多数情况下能够快速找到解决方案,特别是当启发式函数能够提供良好的估计时。

  2. 节点扩展少:GBFS倾向于首先扩展那些离目标节点更接近的节点,这导致它通常需要扩展的节点数量较少,相对于一些其他搜索算法,如广度优先搜索(BFS)和深度优先搜索(DFS),它通常更高效。

GBFS的缺点:

  1. 不保证最优解:GBFS不像A*搜索算法那样保证找到最优解。它只能找到第一个达到目标节点的解决方案,而不一定是最短路径或最佳解决方案。这是因为GBFS只根据启发式函数的估计值来选择下一个节点,而不考虑已经走过的路径的实际代价。
    在这里插入图片描述

  2. 启发式函数的质量影响结果:GBFS的性能高度依赖于所使用的启发式函数的质量。如果启发式函数提供了不准确的估计,GBFS可能会导致不良的搜索结果,可能陷入循环或产生次优解。

  3. 不适用于问题的动态性:GBFS通常用于静态问题,其中问题的状态空间不随时间变化。对于动态问题,需要考虑重新规划或使用其他搜索算法。

总的来说,GBFS是一种高效的搜索算法,适用于许多问题,但需要谨慎选择和调整启发式函数,以确保获得良好的性能。如果需要找到最优解,可能需要考虑使用A*搜索算法或其他保证最优解的算法。

h(n):从当前节点到终点的移动代价
在这里插入图片描述

Dijkstra

采用优先队列作为openlist
Dijkstra算法是一种用于解决单源最短路径问题的经典算法,它有一些优点和缺点,下面我将分别列出它们。

Dijkstra算法的优点:

  1. 精确性:Dijkstra算法能够找到从一个起始节点到所有其他节点的最短路径,而且保证结果的准确性。这使得它在需要准确路径信息的情况下非常有用,比如导航系统和网络路由算法。
    在这里插入图片描述

  2. 广泛适用:Dijkstra算法适用于不带负权边的有向图或无向图。这意味着它可以应用于许多实际问题,而不会出现负权环的问题。

  3. 可以生成路径信息:Dijkstra算法不仅可以找到最短路径的长度,还可以生成实际的路径信息,这对于许多应用非常重要,如地图导航。

Dijkstra算法的缺点:

  1. 时间复杂度高:Dijkstra算法使用贪心策略,每次选择距离最近的节点进行扩展,但在稠密图中,它的时间复杂度为O(V^2),其中V是节点的数量。在稀疏图中,可以通过使用最小堆等数据结构来降低时间复杂度到O(E + V*log(V)),其中E是边的数量。然而,这仍然可能会导致较长的计算时间,特别是在大型图中。

  2. 不适用于带有负权边的情况:Dijkstra算法不适用于包含负权边的图,因为它假定所有边的权重都为非负数。如果图中存在负权边,该算法可能会产生不正确的结果。

  3. 不考虑其他因素:Dijkstra算法只考虑了路径的长度,而不考虑其他因素,如交通状况、道路条件等。在某些实际应用中,这可能不足以产生最佳路径。

  4. 不适用于动态图:如果图的结构或边的权重经常变化,Dijkstra算法的效率可能会受到影响,因为它需要重新计算所有路径。

综上所述,Dijkstra算法在许多情况下是一个有效的最短路径算法,但需要考虑到它的时间复杂度和对负权边的不适用性,以及在实际应用中可能需要考虑的其他因素。在某些情况下,其他算法,如Bellman-Ford算法或A*搜索算法,可能更适合解决最短路径问题。

g(n):从起点到当前节点的移动代价
在这里插入图片描述
在这里插入图片描述

A*算法

代码思路

把起始格添加到 "开启列表" 
do 
{ 
        寻找开启列表中F值最低的格子, 我们称它为当前格. 
        把它切换到关闭列表. 
        对当前格相邻的8格中的每一个 
        if (它不可通过 || 已经在 "关闭列表") 
        { 
                什么也不做. 
        } 
        if (它不在开启列表中) 
        { 
                把它添加进 "开启列表", 把当前格作为这一格的父节点, 计算这一格的 FGH 
        }
        if (它已经在开启列表中) 
        { 
                if (用 G 值为参考检查新的路径是否更好, 更低的G值意味着更好的路径) 
                { 
                        把这一格的父节点改成当前格, 并且重新计算这一格的 GF 值. 
                } 
        }
} while( 目标格已经在 "开启列表", 这时候路径被找到) 
如果开启列表已经空了, 说明路径不存在.
 
最后从目标格开始, 沿着每一格的父节点移动直到回到起始格, 这就是路径.

在这里插入图片描述

采用优先队列作为openlist
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JPS算法

基于采样的路径规划算法

PRM

随机采样
learning phase:
query phase 查询阶段:a*算法
在这里插入图片描述
优势:
概率完备:一定能求出存在的解
高效

劣势:
运动学约束问题
在这里插入图片描述
不管障碍物约束连线
在这里插入图片描述
全部连接,删除障碍物节点
在这里插入图片描述

RRT-快速搜索随机树在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
劣势:狭窄路径无法通过

改进

Kd-tree寻找最近的节点

RRT connect

在这里插入图片描述

RRT*

在这里插入图片描述
在这里插入图片描述

rewire剪枝优化
在这里插入图片描述

kinodynamic-RRT*

解决运动学约束问题

在这里插入图片描述

anytime-RRT*

实时运算

informed RRT*

优化均匀撒点的效率
在这里插入图片描述

在这里插入图片描述

cross-entropy motion planning

在这里插入图片描述

else

在这里插入图片描述

工具

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值