无人机集群协同路径规划的博弈论仿真 —— 代码实战与原理解析
无人机集群(Drone Swarm)作为新兴的研究热点,越来越多地出现在物流、救援、军事侦察等领域。然而,要让多架无人机在复杂环境中进行协同飞行和路径规划,并不如想象中的简单。如何在有限的计算资源与不确定的外界干扰下,快速得到一套具备较优解的群体协作策略?博弈论可以为我们提供不少启示。本篇博客将给大家展示一份采用 OpenAI Gym 环境、集成 博弈策略、支持 命令行配置、CSV 日志记录、动画可视化 等功能的无人机集群协同路径规划仿真代码,并详细讲解设计思路和使用方法。
一、项目简介
在本项目中,我们搭建了一个基于 Python 的 无人机集群仿真环境,能够模拟:
- 多架无人机在三维空间中移动
- 障碍物对飞行路径的影响
- 随机风暴与电磁干扰对动作的扰动
- 多架无人机分别具有自己的目标点,每当靠近目标后就会被分配新的目标
此外,还可以根据需求切换不同的决策策略,如:
- Nash 决策(纳什均衡的启发式选择)
- Random 决策(简单的随机动作,便于对比效果)
为了方便对比和记录,我们支持:
- CSV 文件输出仿真结果(如:平均奖励、回合数、步骤数等)
- Matplotlib 实时绘制 3D 轨迹图和 奖励曲线
- FuncAnimation 生成 MP4 动画展示无人机运动轨迹
简单来说,这是一份“多功能、高可扩展性”的无人机集群博弈仿真项目,实现了从环境定义到策略设计再到可视化输出的完整流程。
二、代码结构概览
该项目的核心代码结构大致可以分为以下五个部分:
-
环境定义
DroneSwarmEnv- 继承了
gym.Env,定义了状态空间(观测空间)、动作空间、奖励计算方式、环境重置、环境步进逻辑等等。
- 继承了
-
决策策略
nash_equilibrium_decision(env): 使用基于纳什均衡思路的启发式搜索,遍历每个无人机的 7 种动作,选择期望奖励最高的动作。random_decision(env): 完全随机的策略,主要用于对比基准效果。
-
可视化功能
visualize_episode(...): 回合结束时,用 3D 图展示所有无人机的飞行轨迹,并用二维折线图展示奖励变化。animate_episode(...): 生成 Matplotlib 动画,并导出 MP4 视频。
-
CSV 日志记录
log_results(...): 将每回合的关键指标(总步数、平均奖励、仿真时长、使用策略等)追加写入一个 CSV 文件,便于后续数据分析或可视化。
-
主函数入口
if __name__ == "__main__":- 解析命令行参数,初始化环境,循环运行多回合仿真,并调用对应的可视化和日志记录函数。
项目中还引入了 tqdm 来实现进度条展示(如果安装了该库),在大量仿真时便于观察进度。
三、核心功能与实现细节
1. 环境定义
class DroneSwarmEnv(gym.Env): def __init__(self, num_drones=3, num_obstacles=5, world_size=(50, 50, 10), max_steps=200): # 1. 定义无人机数量、障碍物数量、环境尺寸、最大步数等 # 2. 设定观测空间 (observation_space) 和动作空间 (action_space) # 3. 调用 reset() 初始化环境 def reset(self): # 初始化无人机位置、目标位置、障碍物位置等 # 返回观测值 def step(self, actions): # 1. 解析动作,进行干扰模拟(风暴、大概率小扰动,电磁干扰导致动作失效) # 2. 更新无人机位置,并限制在边界内 # 3. 计算奖励(到目标的负距离、到达目标的额外奖励、碰撞障碍物的扣分) # 4. 增加步数,判断是否结束 # 5. 返回新的观测值、奖励、done 标志、信息 def render(self, mode='human'): # 以日志方式输出位置信息(也可根据需求自定义 2D/3D 渲染)
可以看到,我们给每架无人机都分配了一个目标点 targets[i],只要该无人机距离目标点小于 2.0,就会获得 额外奖励(+100 分),同时 目标被重置,让无人机继续探索新的目标。此外,我们还根据障碍物碰撞(距离 < 1.0)进行扣分(-50 分),使得无人机尽量避障。
2. 决策策略
纳什均衡决策
def nash_equilibrium_decision(env):
actions = [0] * env.num_drones
# 对每架无人机,遍历 7 种可行动作
for i in range(env.num_drones):
best_action = 0
best_value = -np.inf
for action in range(7):
# 基于动作 move,评估新位置距离目标的负距离和障碍物碰撞风险
# 选择能让奖励最高的那个动作
actions[i] = best_action
return actions
这里的“纳什均衡”其实是一个简单的单机启发式搜索,并没有真正实现多智能体博弈中的精确纳什解,但可以作为一个初步近似。在实际复杂环境中,我们往往还需考虑其他无人机的动作联动与冲突,这就会引入多智能体强化学习或更复杂的博弈理论方法。
随机决策
def random_decision(env):
return env.action_space.sample()
随机策略用来做基准对比:看在同样的环境下,随机动作能获得多少平均奖励?与纳什策略相比能有多大差距?有助于我们理解策略质量和环境难度。
3. 可视化与动画
visualize_episode(...)用于在单回合结束时绘制 3D 无人机轨迹与 奖励曲线。animate_episode(...)进一步利用 Matplotlib 的动画功能,为每一帧更新无人机当前位置,通过FuncAnimation将其保存为 MP4 文件。
可视化可以帮助我们更直观地理解无人机飞行过程中的碰撞、抖动、到达目标点、重新分配目标等动态变化。
4. 日志记录
为了方便后续分析或嵌入到自动化实验流程中,我们在每回合结束后,将结果写入 CSV:
def log_results(csv_filename, episode, steps, avg_reward, strategy, simulation_time):
# fields = ['episode', 'steps', 'avg_reward', 'strategy', 'simulation_time']
# 追加模式写入到 csv_filename
生成的 CSV 文件可能包含如下多行记录:
| episode | steps | avg_reward | strategy | simulation_time |
|---|---|---|---|---|
| 1 | 200 | -12.35 | nash | 1.57 |
| 2 | 200 | -20.49 | nash | 1.68 |
| ... | ... | ... | ... | ... |
有了这份日志,我们就能轻松导入到 Pandas 或其他分析工具中做统计可视化。
四、如何运行
-
安装依赖库
gym(或gymnasium),numpy,matplotlib,argparse等- 如果需要动画功能,要安装
ffmpeg用于导出 mp4 - 进度条功能需要安装
tqdm(可选)
pip install gym numpy matplotlib tqdm
五、效果展示
以下是一些示例展示(假设用 3 架无人机、5 个障碍物,在一个 50×50×10 的三维空间内随机初始化):


六、总结与展望
在这份 增强版无人机集群协同路径规划 项目中,我们结合了 OpenAI Gym 环境构建、博弈决策策略、可视化、CSV 日志记录 等功能,为研究和演示 多智能体博弈 和 协同路径规划 提供了一套基础框架:
- 对初学者而言,这是一个在 强化学习 或 博弈论 场景中自定义环境的简明示范;
- 对进阶读者而言,可以轻松插入更多高阶策略,如Q-learning、Deep Reinforcement Learning,并衡量策略性能;
- 对实际应用而言,可以进一步逼真地模拟外界干扰(风向时变、障碍动态移动),或引入编队约束、无人机间通信等复杂因素。
更多推荐
所有评论(0)