登录/注册

寻路算法

更多

好的,我们来详细解释一下寻路算法

顾名思义,寻路算法就是用来在由节点(Node/Vertices)和连接线(Edge/Link)构成的图(Graph)中,找到从一个起始点到目标点的可行路径(如果存在)的算法。这里的“图”可以是:

  1. 网格地图(Grid): 最常见于游戏(如策略游戏、RPG)中的地图,由一个个正方形或六边形格子组成。节点是格子中心或格子本身,连接线代表相邻格子之间的移动。
    • 例子: 在《星际争霸》中,单位需要避开障碍物到达指定位置;在迷宫游戏中找到出口。
  2. 导航网格(NavMesh): 常用于3D游戏场景或机器人导航。地图被划分为凸多边形区域(通常是三角形)。节点是多边形,连接线代表相邻多边形之间的可行走边界。
    • 例子: 《英雄联盟》中角色绕过墙壁和地形;自动驾驶汽车在城市道路网中规划路线。
  3. 点对点网络(Waypoint Network): 地图上人工设置了一系列关键点(航点)。节点是航点,连接线代表航点之间允许移动的路径(通常是直线或预定义的曲线)。
    • 例子: 飞行模拟中飞机沿着预设航路点飞行;一些游戏中NPC沿着固定路线巡逻。
  4. 任意图(Graph): 最抽象的形式,节点可以代表任何事物(如城市),连接线代表事物之间的关系或移动成本(如道路、距离、时间、费用)。
    • 例子: GPS导航找到城市A到城市B的最快/最短路;网络路由器寻找数据包传输的最佳路径。

核心目标:

  1. 找到路径: 首要任务是确定是否存在一条从起点通往终点的连通路径。
  2. 找到最优路径: 在存在多条路径的情况下,根据特定的代价(Cost) 标准找到最优(或接近最优)的那一条。常见的代价包括:
    • 路径长度: 物理距离最短。
    • 移动时间: 预估耗时最少(可能受地形速度加成/减益影响)。
    • 消耗资源: 燃料、金币等消耗最少。
    • 综合代价: 结合距离、时间、风险等因素计算出的综合成本。

常见的主要寻路算法

  1. 广度优先搜索:

    • 原理: 像水波纹一样,一层一层(等距)地从起点向外探索所有相邻节点。使用队列(Queue) 数据结构(先进先出)。
    • 特点:
      • 保证找到最短路径(步数最少)(如果所有移动成本都为1)。
      • 在探索到目标点时,路径自然就是最短的。
      • 通常考虑移动成本差异(所有移动成本视为1)。
      • 可能会探索大量不必要的节点,效率较低,尤其是在大图中。
    • 适用场景: 寻找步数最少的路径(如迷宫),或当图中所有边的代价相同时。
  2. 深度优先搜索:

    • 原理: 沿着一条路径一直深入探索,直到走不通再回头(回溯)。使用栈(Stack) 数据结构(后进先出)。
    • 特点:
      • 不保证找到最短路径,很可能找到一条非常绕远的路径。
      • 很可能非常快找到某条路径(但不一定好)。
      • 探索方向具有很大的随机性(取决于邻居访问顺序)。
    • 适用场景: 单纯判断两点是否连通,或寻找所有可能路径(非最优路径)。在寻路中实际应用较少,常作为其他算法的基础或用于图遍历。
  3. 迪杰斯特拉算法:

    • 原理: 计算从起点到达所有其他节点的最小累积代价。使用优先队列(Priority Queue) (最小堆),总是优先探索当前已知累积代价最小的节点。
    • 特点:
      • 保证找到起点到图中所有可达节点的最小累积代价路径(如果移动代价非负)。
      • 是解决加权图(边有权重/代价)上单源最短路径问题的经典算法。
      • 比广度优先搜索慢,因为它需要处理优先队列。
    • 适用场景: 需要知道起点到所有点或者到某个点的确切最小代价路径,且图中不存在负权重边。例如交通网络中查找最短距离或最低费用路线(假设费用不为负)。
  4. A* 搜索算法:

    • 原理: 迪杰斯特拉算法的智能优化版。同样使用优先队列,但选择下一个探索节点的依据不仅仅是当前累积代价 g(n)(从起点到节点 n 的实际代价),还加上一个启发式函数 h(n)(估计从节点 n 到目标的剩余代价)。f(n) = g(n) + h(n) 是优先级。
    • 特点:
      • 只要启发函数 h(n) 可接受(即 h(n) 永远不大于 n 到目标的实际代价,通常是预估直线距离),A* 就能保证找到最优路径。
      • 高效的秘诀在于 h(n):好的启发式函数(如曼哈顿距离、欧几里得距离)能显著引导搜索方向,大幅减少需要探索的节点数量,效率远高于迪杰斯特拉。
      • 是游戏AI、机器人导航和许多地图应用中最常用、最高效的寻路算法。
    • 适用场景: 绝大多数需要高效寻找最优路径的场景,尤其是在具有空间信息(能估算剩余距离/代价)的图中。游戏开发中的基石算法。
  5. 跳点搜索:

    • 原理: 专门针对均匀代价网格地图优化的算法。它利用了网格的结构化特性,智能地跳过大量中间节点(“跳点”),只关注路径方向可能发生改变的关键节点(如拐角、障碍物旁边)。
    • 特点:
      • 在大规模、开放的网格地图上,性能通常远优于 A*,因为它跳过了大量不必要的节点。
      • 基于 A*,但利用网格对称性进行剪枝。
      • 主要优化了节点扩展过程,但在开放区域速度提升显著。
    • 适用场景: 大型网格地图(如开放世界游戏、策略游戏)且移动代价均匀(或接近均匀)。

选择哪种算法?

关键概念总结

总之,寻路算法是计算机科学和人工智能(特别是游戏AI、机器人学)的基石之一。理解它们的原理和适用场景对于开发智能移动行为至关重要。A* 因其高效和最优性保证,是实践中应用最广泛的算法。

动态避障-图扑自动 3D 可视化

自动寻路是机器人导航的核心技术,其原理主要涉及机器人与环境之间的复杂信息交互与处理。在自动寻路过程中,机器人依靠先进的传感器系统,如高清摄像头、

2024-10-22 11:56:35

基于STM32的A*(A星)算法实现

STM32 + LED点阵屏 实现A星算法寻路A星算法最初发表于1968

资料下载 贾熹 2021-12-27 19:15:59

可提升全局优精度的改进灰狼优化算法

在标准灰狼优化算法寻优的中后期,由于衰减因子减小,灰狼群体中的个体均向领导层灰狼所在区域靠近,导致算法的全局

资料下载 佚名 2021-05-17 16:51:49

基于AdaBoost算法的复杂网络链预测

链路预测是复杂网络的重要研究方向,当前的链路预测算法因可利用的网络信息有限,导致预测算

资料下载 佚名 2021-04-08 11:21:28

一种基于遗传算法的并行参数自动优方法

分割,程序性能难以得到保证。针对申威26010处理器硬件特性提岀一种基于遗传算法的并行参数自动寻优方法。对消息传递接口数据规模参教和从核数据规模参数进行自动寻

资料下载 佚名 2021-04-07 10:18:48

如何结合粒子群优与遗传重采样实现RBPF算法

里程计信息和激光传感器采集的距离信息进行融合,在算法中引入粒子群寻优策略,通过粒子间能效吸引力来调整采样粒子集,同时对重采样中权值较小的粒子进行遗传变异操作,缓解粒子枯竭现象,提高机器人位姿估计一致性,并维持

资料下载 佚名 2020-09-30 17:29:46

如何制作一个智能+避障的小车?

本项目利用D1 Dock Pro的USB拍照程序,结合L298N电机驱动模块和红外探测循迹光电传感器模块,制作了一个拥有智能寻路+避障功能的小车。该项目为“玄铁杯第二届RISC-V应用创新大赛”活动中的优秀作品。

2022-12-22 14:27:08

线上看车之三维展馆、自动、导览、语音讲解,给你不一样的看车体验!

线上看车之三维展馆、自动寻路、导览、语音讲解,给你不一样的看车体验!

2022-10-18 16:24:36

参数优的迭代法的基本原理是什么?伺服控制系统常用参数算法是什么?

参数寻优的迭代法的基本原理是什么?伺服控制系统常用参数寻优算法是什么?

2021-10-13 06:38:28

熟悉RTK算法原理和调试

为了解决公司某型号芯片是否满足千寻RTK要求,测试单频RTK在不同卫星系统下模糊度固定率。因此,熟悉RTK算法原理和调试rtklib后处理程序是必要的。

2021-07-26 06:36:02

伺服控制系统常用参数优的算法

参数寻优——转自mishidemudong 参数寻优背景  参数寻优问题随处可见,举几个例子。   1. 小明假期结束回校,可以坐火车,可以坐汽

2021-06-28 06:58:13
7天热门专题 换一换
相关标签