十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MADDPG环境配置指南:从MPE到PettingZoo的完整教程与避坑清单

MADDPG环境配置指南:从MPE到PettingZoo的完整教程与避坑清单 简介面向多智能体强化学习研究者与开发者的MADDPG算法配套实验环境包内含multiagent-particle-envs粒子环境覆盖追捕、合作搬运等多个典型场景可用于验证MADDPG在连续动作空间中的协同与竞争策略学习。压缩包共24个文件以Python脚本为主包含环境定义、智能体模型、训练循环与可视化渲染等核心模块另有README说明文档与配置文件整体仅32KB轻量易部署。已有1397人学习下载。借助该环境读者可快速搭建多智能体实验平台调整智能体数量、视野范围、目标位置等参数对比不同算法的表现也能结合经验回放与Actor-Critic网络深入理解智能体间信息交互带来的训练效果差异。代码结构清晰方便在此基础上定制新任务支撑自动驾驶、机器人协作等方向的研究探索。 前几天一个学弟私信我说他的MADDPG代码在一台新服务器上跑不通。他把报错截图甩过来我一看好家伙从ModuleNotFoundError到ImportError清一色全是环境配置问题。这个事在MARL圈子里真的太常见了。MADDPG也就是Multi-Agent Deep Deterministic Policy Gradient多智能体深度确定性策略梯度是入门多智能体强化学习几乎绕不开的第一个算法。但很多人算法概念都弄明白了最后却被环境活活劝退。这篇文章我就以MADDPG为中心把常用的仿真环境、每个环境的特点、从零配置的完整流程以及训练中那些容易让人破防的坑一次性讲清楚。适合刚接触MARL的在校学生也适合准备切换到新benchmark的工程师。1. MADDPG到底是什么为什么环境这么重要1.1 五分钟理解MADDPG和它依赖的CTDE范式MADDPG的基本思路其实不复杂。它把深度确定性策略梯度DDPG从单智能体直接推广到多智能体场景每个智能体维护一个Actor网络用于决策一个Critic网络用于评估。训练和执行是分离的训练时每个智能体的Critic可以查看所有智能体的观测和动作相当于一个上帝视角的裁判执行时Actor只能依赖自己的局部观测做决策不依赖他人信息。这就是CTDE集中式训练、分布式执行。这套范式到现在都是MARL的主流做法之一。这样设计的原因通俗一点说就是“环境不稳定”。几个智能体同时在环境里学习对任意一个智能体而言其他智能体的策略变化都让自己眼里的环境在不断变化单智能体算法很容易出现“自以为学会了、换个对手就废”的情况。MADDPG通过Critic全局评分缓解了这个问题。正因如此它适用的环境面很广合作、竞争、混合三种类型都能跑这也是它成为入门算法的核心原因。理解了这一点你就能明白环境为什么关键MADDPG的Actor执行时只依赖局部观测但Critic训练时需要访问全局信息这要求环境必须能方便地把所有智能体的观测、动作收集起来同时还要支持每个智能体独立的奖励反馈。如果一个环境不能提供这种结构化接口MADDPG根本没法落地。1.2 一个合格的多智能体环境应该具备哪些能力运行MADDPG的环境至少得满足四个条件。我把它们当做一份“检查清单”来看选环境的时候逐条对照。第一多智能体接口。每个智能体都应该有独立的观测、动作、奖励接口而不是把多个智能体强行拼成一个超级大状态的单智能体。MADDPG要求每个agent都有自己独立的策略和独立的奖励来源接口层面不支持就白搭。第二合作、竞争、混合场景的覆盖率。比如MPE里面simple_spread是纯合作simple_tag是捕食者与猎物之间的竞争simple_reference则是合作和通信的混合。如果一个环境只能提供一种交互模式你想验证算法在不同任务类型上的泛化性就非常受限。第三可控的可复现性。环境得支持设置随机种子智能体数量、通信维度、障碍物等参数要能灵活调整。MADDPG训练本身方差很大如果没有可控性你很难判断一次改进到底是算法生效还是单纯运气好。第四可观测性和可视化。训练时能方便地导出每个智能体的观测、奖励最好还能渲染看过程。这一点在排查bug时能救命比如智能体是不是撞墙了、是不是全往一个目标跑了看一眼画面就一目了然。2. 主流环境盘点从MPE到SMAC再到Unity各有各的玩法2.1 OpenAI MPE粒子环境原论文同款入门首选MPE全称Multi-Agent Particle Environment多智能体粒子环境是OpenAI随MADDPG论文一起发布的配套实验环境。它实现了一个二维粒子世界所有智能体和地标用不同颜色、大小的圆表示运动模型是简单的质点动力学。环境基于gym接口开发纯numpy实现不依赖物理引擎因此启动速度极快一个回合通常在几百毫秒内跑完特别适合做算法快速验证。MPE里的经典场景按任务复杂程度分了好几档。simple_spread是3个智能体合作覆盖3个地标奖励来自覆盖距离适合验证纯合作能力simple_tag是一组捕食者追逐一群猎物猎物可以借助障碍物躲避适合验证竞争和对抗simple_reference和simple_speaker_listener测试智能体之间是否需要通过通信来协作simple_push是推球对抗simple_world_comm在混合场景里加入慢速智能体和障碍物复杂度最高。大部分MADDPG论文里出现的实验基本都是这套环境。用MPE还有一个好处它足够轻量可以用matplotlib实时渲染出粒子运动的画面快速判断策略是不是真的学到了东西。训练一个简单场景在普通CPU上几个小时内就能看到收敛趋势这在复杂环境里是奢侈的。我自己的经验是哪怕后面要换复杂环境也值得先在这套环境上把算法逻辑调通。2.2 PettingZoo现代多智能体环境的标准APIPettingZoo是现在多智能体强化学习里生态环境最好的环境库之一由维护Gymnasium的Farama基金会维护。它的出现解决了一个痛点OpenAI的旧MPE环境长年不怎么更新API和最新工具链不兼容。PettingZoo把MPE完整迁移了过来同时定义了一套统一的多智能体API包括AECAgent Environment Cycle和Parallel两种接口。AEC接口更贴近真实多智能体交互每一步只有一个agent行动类似轮流回合Parallel接口则适合所有agent同时行动的场景MADDPG这类算法一般用Parallel接口更顺手。PettingZoo还包含了不少其他环境比如Atari经典游戏、纸牌博弈、蝴蝶环境等。如果你想在标准的MDDPG实现里同时测简单环境和中等复杂度环境PettingZoo几乎是性价比最高的选择。用PettingZoo跑MPE的simple_spread代码大概是这样的from pettingzoo.mpe import simple_spread_v3 env simple_spread_v3.env(N3, max_cycles128, continuous_actionsTrue) env.reset(seed42) for agent in env.agent_iter(): observation, reward, termination, truncation, info env.last() if termination or truncation: action None else: action env.action_space(agent).sample() env.step(action) env.close()第一次接触的同学要注意PettingZoo已经不是老gym那种env.reset()返回单一obs、env.step()返回四元组的写法了。observation、reward、termination、truncation、info全都按智能体名以字典形式存放习惯单智能体代码的人刚开始会不顺手但适应之后会发现这套接口在多智能体场景下清晰得多。2.3 SMAC星际争霸微操的硬核基准如果MPE对你来说已经太简单SMAC是一个绕不开的名字。SMAC全称StarCraft Multi-Agent Challenge基于星际争霸2的战术微操场景构建。每个场景是一支小规模军队的编队对抗两个阵营各有若干兵种你的智能体队伍要通过控制每个单位的移动和攻击在局部战场上击败对手。SMAC的环境相当硬核。首先安装过程比MPE重很多需要安装星际争霸2游戏本体和专用的地图包光是下载解压就够折腾一阵。其次场景是部分可观测的每个单位只能看见自己周围一定范围内的敌方单位这跟真实战场很像也对算法提出了更高要求。常用地图包括3m、8m这类同兵种对战也有2s_vs_1sc这种需要兵种配合的场景。必须说句实话MADDPG在SMAC上并不是最强算法。SMAC偏重合作博弈对去中心化执行要求高后续出现的QMIX、MAPPO等算法在这个基准上表现更亮眼。但如果你的研究目标是探索MADDPG在复杂部分可观测环境下的上限SMAC仍然值得尝试只是要做好效果不如论文里那些专用算法的心理准备。2.4 Unity ML-Agents和其他专用环境再往上一层就是Unity ML-Agents这类基于3D物理引擎的环境。ML-Agents是Unity的官方机器学习工具包可以直接在Unity引擎里构建多智能体场景比如一个足球场上的多对多对抗、多个机械臂协作搬运物体。它的特点是场景物理真实支持视觉输入视觉效果很强非常适合机器人、游戏AI方向的研究。但随之而来的是配置成本。需要安装Unity编辑器创建或下载场景再通过Python端的mlagents包和场景交互版本稍微漂移一点就会遇到通信失败。如果你不是特别需要视觉或多自由度物理仿真前期没必要一上来就啃它。此外还有一批领域专用环境gym-pybullet-drones适合无人机集群highway-env和SUMO适合交通流和自动驾驶模拟CARLA适合城市自动驾驶gymnasium自己也能快速封装自定义多智能体环境。选型逻辑很简单你的任务涉及哪个领域、需要哪种层次的物理真实性再决定要不要上重型环境。3. 环境配置实操从裸机到能训练MADDPG3.1 第一步conda建环境先给自己一个安全区我见过太多人直接用系统自带的Python装完这个包那个包直接冲突系统环境被搞得很脏。跑MADDPG最忌讳的就是没有独立的虚拟环境。用conda建环境是一劳永逸的做法conda create -n maddpg python3.8 conda activate maddpg我建议Python选3.8或3.9原因很简单MADDPG相关的老代码、老依赖大多在3.6到3.9之间验证过3.10以后很多旧版本gym和numpy组合开始出现不兼容。为了省心就老实用3.8。conda环境创建完之后先从最简单的开始验证python -V确保当前在maddpg环境下再往下走不然很容易出现“我在这个环境装的包怎么import不到”的乌龙。3.2 第二步装PyTorch和MPE警惕版本打架PyTorch安装建议直接去官网选择适合自己的命令。有GPU的机器装CUDA版纯CPU机器就装CPU版命令大致是pip install torch --index-url https://download.pytorch.org/whl/cu118没有GPU就换成对应CPU的index-url。显卡型号和CUDA版本一定要先确认否则装完torch.cuda.is_available()还是False白忙一场。接下来装MPE。OpenAI官方仓库不在PyPI里千万不要直接pip install multiagent-particle-envs正确姿势是git clone https://github.com/openai/multiagent-particle-envs.git cd multiagent-particle-envs pip install -e .这样会把multiagent这个包以可编辑模式安装进环境。装完以后测试一下python -c import multiagent如果报ModuleNotFoundError多半是没执行pip install -e .或者当前终端目录没切回项目工程。另外这个老仓库依赖的gym版本很老强烈建议固定装gym 0.21.0pip install gym0.21.0这也是老玩家常说的“神仙组合”Python3.8 gym0.21 numpy1.24.4。低于这个组合会出现rendering模块找不到高于则有各种API不兼容的报错。3.3 第三步安装PettingZoo并快速验证如果你决定用PettingZoo替代老MPE这一步就简单很多pip install pettingzoo它可以直接从PyPI安装。装完以后用一段最小代码验证环境是否可用from pettingzoo.mpe import simple_spread_v3 env simple_spread_v3.env(N3, max_cycles32, continuous_actionsTrue) env.reset(seed42) print(env.observation_space(agent_0)) print(env.action_space(agent_0)) env.close()这段代码能正常输出观测空间和动作空间说明PettingZoo安装成功MPE类环境也已就绪。之后的训练代码就直接对着PettingZoo的Parallel API写不需要再回到老MPE那套接口。3.4 环境自检清单把环境配好后建议花30秒做一个自检避免训练到一半才发现某个依赖是坏的。我一般用这样一组命令python -c import torch; print(torch, torch.__version__) python -c import gym; print(gym, gym.__version__) python -c import multiagent; print(multiagent ok) python -c from pettingzoo.mpe import simple_spread_v3; print(pettingzoo ok)四行全部正常输出就可以开始训练了。列一个简单的对照表检查项预期结果常见失败torch版本正常输出版本号装错CUDA版本gym版本0.21.0版本过高或过低multiagent import输出ok未执行pip install -e .pettingzoo import输出ok安装不完整或版本冲突4. 在MPE上跑通MADDPG训练全流程拆解4.1 以simple_spread为例环境怎么交互MPE环境的simple_spread任务可以用一句话描述3个智能体需要互相配合各自移动到不同的地标上同时尽量避免彼此碰撞。环境状态包含智能体自身位置、速度、其他智能体的相对位置、所有地标相对位置等信息动作空间在连续控制模式下给出x和y方向的力范围在[-1, 1]之间。这个任务看起来简单但它是典型的合作型任务智能体之间没有显式通信只能通过观测彼此位置来隐含协作。如果两个智能体同时奔着同一个目标地标去奖励就会受影响所以它们必须学会“默契分工”。这正是MADDPG这类多智能体算法擅长解决的问题。每次环境step返回的信息是(next_state, rewards, dones, infos)。其中rewards是三个智能体各自的奖励数值相加就是这一轮团队总收益。在做算法调试时我习惯把三个智能体的奖励分别打出来观察是否出现“一个agent吃遍所有奖励、另外两个摆烂”的坍塌现象。4.2 训练流程与超参数参考用MADDPG训练一个环境整体流程围绕两个循环展开。外层循环遍历训练轮次内层循环遍历一个episode里的时间步。在每个时间步每个agent根据自己的策略网络选择动作把整条transition拼起来存进经验池当经验池足够大以后从中采样一批数据对每个agent分别计算本文还有配套的精品资源点击获取
返回列表