基于A*算法的多智能体路径规划(Multi-agent Path Finding,MAPF)学习笔记

目录

1、原始空间与抽象空间

2、局部修复A*算法(Local-Repair A* ,LRA*)

3、合作A*算法(Cooperative A*,CA*)

4、层次化合作A*算法(Hierarchical Cooperative A*,HCA*)[2]

5、带窗口的层次化合作A*算法(Windowed Hierarchical Cooperative A*,WHCA*)

6、个人总结

参考文献


本篇文章是David Silver大佬的《Cooperative Pathfinding》[1]的阅读笔记,总结多智能体合作A*算法的同时记录一些查阅到的相关概念。

1、原始空间与抽象空间

原始空间的抽象转换(abstraction transformation)类型:嵌入(Embedding)和同态映射(homomorphism)[2]。

  • 嵌入方法:原始状态空间S\subseteq抽象空间S',例如抽象空间是原始空间的超图。由于原始空间所有的边都包含在抽象空间中,因此抽象空间S'中两点的距离(启发函数的值)始终小于等于原始空间中的距离。
  • 同态映射:将原始空间S中的多个状态组合在一起成为抽象空间中的一个状态,称为同态映射。任意多对一的映射都是同态映射。

Valtorta’s theorem指出,在使用嵌入抽象(embedding transformations)时,如果在抽象空间中使用BFS(或称盲目搜索)计算启发函数,那么A*算法会遍历在原始空间使用BFS时遍历的所有节点,造成A*算法无法加速搜索。

文献[2]介绍了上述定理的推广,如果在原始空间中使用BFS或盲目搜索时会遍历到状态S,那么在原始空间使用A*算法搜索时,要么状态S本身会被遍历到,要么S在抽象空间中的映射会被遍历到。

该推广定理带来的启发是使用同态映射可以加速搜索,因为在抽象空间中搜索一个状态,等价于在原始空间中搜索了多个状态。

2、局部修复A*算法(Local-Repair A* ,LRA*)

在传统的A*算法中,智能体在规划路径时不考虑其他智能体的存在,因此可能导致路径冲突。Local Repair A*通过引入冲突检测和修复机制来解决这个问题。

LRA*为每个智能体规划路径时忽略其他智能体,然后智能体开始移动。当冲突即将发生时,就地解决。冲突检测方法为:

  1. 对于每对智能体,检查它们的路径是否相交。路径相交表示智能体之间存在潜在的冲突。
  2. 如果路径相交,进一步检查智能体在路径上的时间冲突,即智能体是否在同一时间段内占用相同的位置。
  3. 如果存在冲突,标记冲突的智能体对。

冲突检测可以在每个时间步骤进行,以确保在路径规划过程中及时发现冲突。一旦检测到冲突,Local Repair A*会进行局部修复,例如调整智能体的速度或重新规划代理的路径,以解决冲突并继续向目标前进。

缺点:拥挤区域需要不断重新规划路线,几乎每一轮都需要对A*搜索进行完全的重新计算。每次改变路线都是独立进行的,会导致循环,同一位置可能在循环中多次访问。

3、合作A*算法(Cooperative A*,CA*)

合作A*将任务解耦为一系列单个智能体的搜索,使用三维的预约表(坐标+时间)避免多智能体的路径冲突。

智能体计划路线所经过的网格单元被标记为不可通过,将(x、y、t)存储为哈希表,后续智能体在搜索过程中会避开这些条目,从而防止其他智能体规划出相撞的路线,这样只会存储一小部分的网格位置。

缺点:无法解决一些特定的问题,例如一个智能体的路径阻塞住了另一个智能体的所有可行路径,如下图所示。

4、层次化合作A*算法(Hierarchical Cooperative A*,HCA*)[2]

为了加速A*搜索,文献[2]将原始空间抽象为一系列抽象空间,每层抽象空间都比下一层的更general,在抽象空间中计算启发函数。

层次化合作A*算法中的“层次”是一系列二维的、只考虑空间属性的抽象空间。层次化抽象的过程:

  1. 具有最大度的状态(或节点)与周围指定半径内的节点合并为一个抽象状态,重复进行直到所有状态都被合并为某个抽象的状态,这样就创建了一个抽象层(或抽象空间)。
  2. 接着在此抽象层中继续合并生成更高一层的抽象层。
  3. 以此类推,直到生成一个只有一个抽象状态的最高级别的抽象空间(top-level)。原始搜索空间称为base level或bottom level。

直接在层次化空间中使用A*搜索,由于原始空间的问题会衍生出一系列在抽象空间中搜索最佳路径的问题,因此在原始空间求解一个问题所需要扩展的节点总数将是原始空间与所有抽象空间扩展节点的总和,这大大高于直接在原始空间使用BFS所需要扩展的节点数。

为了减少扩展节点的数量,需要进行数据复用。方法如下:

  1. h*缓存(h*-caching):当在抽象空间上搜索终止时,对于解路径上的每个抽象状态S,都已知到目标节点的精确的距离h*(S)。缓存h*可以在后续搜索相同终点路径中使用,也就是不需要继续调用上层搜索了。这改进了这个抽象层上的启发函数的质量,从而可能减少后续搜索所扩展的节点数。
  2. 最优路径缓存(optimal-path caching):如果一个状态X到目标节点的距离h*(X)已知,实际上最短路径也已知,因此可以直接把X到终点G的最短路径进行缓存,以后遇到相同的终点不需要再进行搜索。
  3. P-g缓存(P-g caching):在之前的搜索过程中,会遍历一些不在最短路径上的节点X,节点X虽然不在最短路径上,但是X到起点的距离g(X)是已知的。如果已知起点到终点的最短路径长度为P,那么有P<=g(X)+h*(X),接着有h*(X)>=P-g(X)。由此可以看到P-g(X)是X到终点最短距离h*(X)的启发值。此外,对于在搜索终止时处于open列表中的节点S,不需要计算P-g,直接存储h(S)即可,因为h(S)>=P-g(S)。

此外,抽象的粒度,即组合的半径,对于搜索速度也有影响。

文献[1]介绍了第四种数据复用的方法:使用逆向可恢复A*算法(Reverse Resumable A* ,RRA*)在抽象域中搜索。

5、带窗口的层次化合作A*算法(Windowed Hierarchical Cooperative A*,WHCA*)

这是文献[1]提出的算法,为了解决上述算法的几个问题:

  1. 智能体到达终点后应该继续合作,而不是待在原点,否则可能堵塞其他智能体的可行路径;
  2. 智能体之间的优先级应该动态变化。如果固定优先级,可能会导致一些问题无解;
  3. 智能体的路径规划与执行应该交替进行以提高效率,因为环境是动态变化的,如果规划路径时在整个地图上进行搜索并考虑全局因素,实际上有些情况并不会发生,造成效率低下。

WHCA*的主要方法为:进行路径搜索时,只在原始空间的w步内(称为窗口路径)进行合作搜索,一旦到达了w步,直接在抽象空间中搜索剩余路径,w步到达的中间点到终点的距离直接使用抽象距离替代。接着给智能体下发窗口路径,并只将窗口路径放进保留表中。因此只需要保持不同智能体的路径窗口之间无冲突。当智能体跑到窗口一半时,继续规划路径并滑动窗口。

并且,智能体到达终点后继续进行窗口搜索。智能体的目标不再是到达终点,而是完成窗口。

引入窗口的另一个好处是搜索时间被分散到每个智能体身上。

6、个人总结

个人认为层次化搜索的引入是为了解决那些无法快速得到搜索点到终点的距离的场景,这些场景下必须进行BFS搜索才能得到每个点到终点的距离,这会大大增加A*中获取启发值的成本,因此必须对原始空间进行抽象,减少搜索的状态来加速获取到终点的距离。

路径窗口的引入可以避免单智能体每次规划路径时考虑整条路径上的冲突,实际上环境是变化的,其他智能体的路径和预测状态也是变化的,提前考虑所有信息可能导致路径规划很慢,窗口路径会节省考虑很多可能不会发生的冲突的时间。并且引入窗口让智能体边走边规划,将规划时间分散到执行的时间上,也可以加速规划。

参考文献

[1] Silver D .Cooperative Pathfinding[C]//Proceedings of the First Artificial Intelligence and Interactive Digital Entertainment Conference, June 1-5, 2005, Marina del Rey, California, USA.2005.

[2] Holte R C, Perez M B, Zimmer R M, et al. Hierarchical A*: Searching abstraction hierarchies efficiently[C]//AAAI/IAAI, Vol. 1. 1996: 530-535.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于Dijkstra算法的自动驾驶汽车路径规划的参考文献相对较多,以下列举了其中几篇: 1. 贺道辉, 周国亮, 于树青, & 纪其伟. (2018). 基于Dijkstra 算法的最佳路径规划及仿真研究. 计算机技术与发展, 28(2), 185-188. 这篇论文介绍了基于Dijkstra算法的最佳路径规划的基本原理,重点讨论了在自动驾驶汽车中应用该算法进行路径规划的可行性,并通过仿真研究验证了算法的有效性。 2. 郭宇明, 唐炎辉, & 雷林. (2019). 基于Dijkstra算法的自动驾驶汽车路径规划研究. 智能计算机与应用, (9), 237-239. 这篇论文探讨了基于Dijkstra算法的自动驾驶汽车路径规划,在考虑到实时交通情况和车辆行驶特性的基础上,提出了一种改进的Dijkstra算法,以提高路径规划的效率。 3. 王伟峰, 龙腾飞, & 黄翔. (2019). 基于改进Dijkstra算法的自动驾驶路径规划. 机械与电子, (24), 66. 这篇论文在基于Dijkstra算法路径规划的基础上,针对自动驾驶汽车路径规划中存在的问题,提出了一种改进的Dijkstra算法。通过引入权重和约束条件,优化路径规划结果,并提高了规划速度。 4. 张敏, 张长宁, & 彭云. (2017). 基于Dijkstra算法的自动驾驶路径规划研究. 机械设计与制造, (10), 27-28. 这篇论文研究了基于Dijkstra算法的自动驾驶路径规划,通过对路网图进行建模,并利用Dijkstra算法寻找最短路径,实现了自动驾驶汽车的高效路径规划。 以上是其中几篇关于基于Dijkstra算法的自动驾驶汽车路径规划的参考文献。这些研究为自动驾驶汽车的路径规划提供了理论支持和实践指导,为实现安全、高效的自动驾驶出行做出了贡献。 ### 回答2: Dijkstra算法是一种用于在加权图中寻找最短路径的经典算法。它的应用非常广泛,其中之一就是自动驾驶汽车路径规划。 在自动驾驶汽车路径规划中,Dijkstra算法可以用于确定汽车从起点到终点的最短路径。该算法基于图的搜索和权重计算,通过不断更新节点之间的最短距离和路径来找到最佳路径。 有许多文献可以作为基于Dijkstra算法的自动驾驶汽车路径规划的参考。以下是其中一些重要的文献: 1. Dijkstra, E.W. (1959). A note on two problems in connection with graphs. In Numerische Mathematik (pp. 269–271). Springer Berlin Heidelberg. 这是Dijkstra算法最初提出的经典文献之一,介绍了该算法的基本原理和应用。 2. Celebi, M.E., Alhajj, R. (2008). An efficient algorithm for finding the shortest path in transportation networks. Journal of Advanced Transportation, 42(4), 411-430. 这篇文章介绍了一种高效的改进Dijkstra算法,特别适用于自动驾驶汽车路径规划中的大规模交通网络。 3. Han, Z., Tang, T., Bai, X., Chen, Y., Huang, H., & Deng, Z. (2017). A Modified Dijkstra Algorithm for Shortest Path Computation in Large-Scale Networks. IEEE Transactions on Intelligent Transportation Systems, 18(5), 1124-1134. 该文献提出了一种改进的Dijkstra算法,以应对自动驾驶汽车路径规划中的大规模网络。 4. Bhatia, M., & Jain, R. (2018). Improved Dijkstra Algorithm for Vehicle Navigation Systems. International Journal of Scientific Research in Computer Science, Engineering, and Information Technology, 4(1), 115-120. 这篇文章提出了一种改进的Dijkstra算法,以加速自动驾驶汽车的导航系统。 以上是一些基于Dijkstra算法的自动驾驶汽车路径规划的参考文献,它们对于理解和应用该算法于车辆路径规划具有重要意义。 ### 回答3: 基于Dijkstra算法的自动驾驶汽车路径规划在近年来得到了广泛的研究和应用。下面是几篇相关的参考文献。 1. “A Dijkstra-based Approach for Path Planning of Self-driving Cars” - 这篇文献提出了一种基于Dijkstra算法的自动驾驶汽车路径规划方法。作者通过改进Dijkstra算法,将交通状态和车辆动态考虑进去,并利用实时的交通数据来更新路径规划,以确保行驶的安全和效率。 2. “Improved Dijkstra Algorithm for Autonomous Vehicle Path Planning” - 这篇文献在Dijkstra算法的基础上进行了改进,以适应自动驾驶汽车路径规划的需要。作者提出了一种优化的数据结构和算法,通过减少计算时间和空间复杂度,提高了路径规划的效率和准确性。 3. “Dijkstra-based Path Planning for Autonomous Vehicles in Dynamic Environments” - 这篇文献针对自动驾驶汽车在动态环境中的路径规划问题,提出了一种基于Dijkstra算法的解决方案。作者通过引入时空扩展图和权重函数,使得路径规划可以考虑交通状况和车辆运动的变化,从而实现安全和高效的驾驶。 4. “Traffic-aware Dijkstra Algorithm for Real-time Path Planning of Autonomous Vehicles” - 这篇文献中,作者提出了一种针对实时的自动驾驶汽车路径规划问题的Dijkstra算法版本。通过分析交通流量和路况信息,设计了一种基于交通感知的加权函数,使路径规划更加适应实际道路情况,并提高了系统的响应速度和准确性。 这些参考文献提供了关于基于Dijkstra算法的自动驾驶汽车路径规划的理论基础和实际应用方法。研究者们通过改进算法和引入新的因素,不断提高路径规划的效率和安全性,使得自动驾驶技术在道路上更有吸引力和可行性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值