VMAS 向量化多智能体模拟器
用 PyTorch 写的可微分 2D 向量化物理引擎,为多智能体强化学习提供可批量并行、可接入 Gym/RLlib/TorchRL 的基准环境。
- Star 数
- ★ 628
- 最近更新
- 5 个月前
- License
- GPL-3.0
- 主语言
- Python
- FA 评分
- 44/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台
- 费用
- 免费,无需付费服务
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- MARL 研究者需要在同一套环境下对比 MAPPO、IPPO、MADDPG、QMIX、VDN 等算法时,可用 VMAS 场景在 TorchRL/BenchMARL 中训练。
- 不适合
- 需要三维刚体动力学或高保真机器人仿真的团队
- 只想训练低层电机/关节控制策略的用户
- 无法使用 Python 3.8-3.11 与 PyTorch 环境的团队
这个 Agent 能做什么,适合哪些场景?
VMAS(Vectorized MultiAgentSimulator)是一个面向多智能体强化学习(MARL)基准测试的向量化可微分模拟器。它由两大部分组成:一个用 PyTorch 张量运算实现的 2D 物理引擎,以及一组具有挑战性的多机器人场景(如 transport、give_way、wheel、flocking、football 等)。通过 PyTorch 的批量并行能力,VMAS 可以在加速硬件上同时推进上万个环境,显著加快 rollout 采集。它通过 make_env 创建环境,提供与 OpenAI Gym、Gymnasium、RLlib、TorchRL 及其 MARL 训练库 BenchMARL 兼容的包装器;把 grad_enabled 设为 True 时模拟器可微分,梯度可从输出流回输入。场景以 BaseScenario 子类形式定义,需要实现 make_world、reset_world_at、observation、reward 等方法,并提供交互式渲染用于调试。
调用 vmas.make_env(scenario=..., num_envs=..., device=..., wrapper=..., grad_enabled=..., dict_spaces=...) 创建环境对象,返回带 step、reset、render、done、get_from_scenario 接口的环境。每次 env.step() 接收长度为智能体数量的动作列表或字典,每个动作为形状 [num_envs, action_size] 的张量,引擎在批内并行计算 2D 动力学、弹性碰撞、关节与重力,输出各智能体的观测、奖励、info 与 done。观测形状为 [num_envs, observation_size](或张量字典),奖励为 [num_envs]。可选 wrapper 把环境转成 rllib、gym、gymnasium、gymnasium_vec 接口;render 支持 mode="rgb_array" 或 "human",可通过 agent_index_focus 聚焦某个智能体,并可用 plot_position_function 在渲染上叠加函数图像。场景脚本可直接运行以交互式操控智能体调试。
- MARL 研究者需要在同一套环境下对比 MAPPO、IPPO、MADDPG、QMIX、VDN 等算法时,可用 VMAS 场景在 TorchRL/BenchMARL 中训练。
- 论文作者需要可复现的多机器人协作/对抗基准(transport、dispersion、flocking、football)来评估集体机器人学习。
- 需要训练速度的场景中,团队借助 GPU 上数万并行环境快速采集 rollout,缩短实验周期。
- 想利用可微分模拟器做基于梯度的策略优化或模型学习的研究者,可以开启 grad_enabled 让梯度穿过模拟器。
- 课程或教程作者可用交互式渲染与 Colab notebook 演示多智能体环境创建、step 与可视化。
- 多机器人算法开发者把自定义场景实现为 BaseScenario 子类,并用 VMAS 的 LIDAR、通信动作、控制器与动力学模型扩展任务。
如何安装或部署这个 Agent?
通过 pip 安装最新发布版:
pip install vmas如需安装 master 分支源码版本:
git clone https://github.com/proroklab/VectorizedMultiAgentSimulator.git
cd VectorizedMultiAgentSimulator
pip install -e .默认只装核心依赖,可按需安装可选依赖:
# install gymnasium for gymnasium wrappers
pip install vmas[gymnasium]
# install rllib for rllib wrapper
pip install vmas[rllib]
# install rendering dependencies
pip install vmas[render]
# install testing dependencies
pip install vmas[test]
# install all dependencies
pip install vmas[all]训练库需单独安装:
pip install benchmarl # For training in BenchMARL
pip install torchrl # For training in TorchRL
pip install "ray[rllib]"==2.1.0 # For training in RLlib. We support versions "ray[rllib]<=2.2,>=1.13"如何使用这个 Agent?
用 make_env 创建环境并交互:
env = vmas.make_env(
scenario="waterfall", # can be scenario name or BaseScenario class
num_envs=32,
device="cpu", # Or "cuda" for GPU
continuous_actions=True,
wrapper=None, # One of: None, "rllib", "gym", "gymnasium", "gymnasium_vec"
max_steps=None, # Defines the horizon. None is infinite horizon.
seed=None, # Seed of the environment
dict_spaces=False, # By default tuple spaces are used with each element in the tuple being an agent.
grad_enabled=False, # If grad_enabled the simulator is differentiable and gradients can flow from output to input
terminated_truncated=False, # If terminated_truncated the simulator will return separate `terminated` and `truncated` flags
**kwargs # Additional arguments you want to pass to the scenario initialization
)动作以列表或字典传入 env.step(),每个动作为形状 [num_envs, action_size] 的张量。渲染示例:
env.render(
mode="rgb_array", # "rgb_array" returns image, "human" renders in display
agent_index_focus=4, # If None keep all agents in camera, else focus camera on specific agent
index=0, # Index of batched environment to render
visualize_when_rgb: bool = False, # Also run human visualization when mode=="rgb_array"
)在无显示服务器上渲染需先准备虚拟屏幕:
export DISPLAY=':99.0'
Xvfb :99 -screen 0 1400x900x24 > /dev/null 2>&1 &或:
xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>完整可运行示例见 examples/use_vmas_env.py、examples/rllib.py 以及各场景脚本。
这个 Agent 有哪些优点和局限?
- 纯 PyTorch 张量实现的 2D 物理引擎,可批量并行推进,官方称可扩展到数万并行环境。
- grad_enabled=True 时模拟器完全可微分,梯度可从输出流回输入。
- 包装器覆盖 OpenAI Gym、Gymnasium、RLlib、TorchRL 与 BenchMARL,可直接对接大量 RL 算法。
- 场景以 BaseScenario 子类模块化定义,并支持弹性碰撞、关节、重力、LIDAR 传感器与通信动作。
- 移植并向量化了 OpenAI MPE 的全部场景,附带论文、教程 notebook 与交互式渲染调试。
- 仅支持 2D 物理与 holonomic 质点机器人建模,不覆盖三维或低层电机控制仿真。
- README 声明 Python 支持范围为 3.8-3.11,较新 Python 版本未列入。
- 集成 RLlib 时版本受限(ray[rllib]<=2.2,>=1.13),与最新 Ray 生态可能不匹配。
- 使用 Gym/RLlib/TorchRL 包装后效率低于未包装的原生接口。
- 无显示服务器渲染需要额外安装 OpenGL/Pyglet 并配置 Xvfb 或 EGL。
这个 Agent 与同类方案有什么区别?
README 提到 Brax 这类复杂向量化物理引擎在多智能体场景下扩展效率不足,因此 VMAS 选择自研轻量 2D PyTorch 引擎;同时其实现受 OpenAI MPE 启发,并移植、向量化了 MPE 的全部场景,可作为 MPE 的替代方案。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| VMAS 向量化多智能体模拟器 当前 | 44 · 缺口较多 | 代码库 / SDK免费 | ★ 628 | 5 个月前 | Python | — |
| skrl:模块化强化学习库 | 43 · 缺口较多 | 代码库 / SDK免费 | ★ 1.1k | 2 天前 | Python | — |
| MARTI:多智能体强化学习训练与推理框架 | 36 · 缺口较多 | 命令行工具免费 | ★ 572 | 2 个月前 | Python | — |
| Hands-On Modern RL 实战教程 | 30 · 缺口较多 | 命令行工具免费 | ★ 4.9k | 13 天前 | Jupyter Notebook | — |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
README 与代码显示这是一个本地运行的 PyTorch 模拟器,不涉及凭证、网络外传或破坏性默认行为,因此无红线。但 least_privilege 仅得 1:安装说明建议 `pip install vmas[all]` 并额外安装 ray/benchmarl/torchrl,权限面较宽且未说明最小安装集;user_confirmation 为 0:没有任何需要用户确认的高影响操作;data_flow_transparency 为 1:README 说明了输入输出空间与渲染,但未系统说明数据流向(如是否上传遥测);sensitive_data_handling 为 0:模拟器不处理敏感数据,也无相关声明;dependency_security 为 1:requirements.txt 固定了 `pyglet<=1.5.27` 与 `gym-notices==0.0.8`,但未提供哈希或漏洞扫描证据;external_effects 为 1:渲染与交互控制会打开窗口,但无文件写入或网络副作用说明;rollback 为 0:无版本回滚或状态恢复机制说明;source_attribution 为 2:LICENSE 为 GPL-3.0,README 提供 arXiv 引用与作者信息,归属清晰。
self_consistency 为 2:README 对 make_env 参数、输入输出空间、渲染接口的描述与测试代码中的调用一致;dependency_availability 为 1:requirements.txt 列出 numpy/torch/pyglet/gym/gym-notices/six,但未锁定版本(除 pyglet 与 gym-notices),且 gym 已弃用,存在可用性风险;failure_messages 为 1:测试与代码中有断言,但 README 未说明错误处理或失败提示策略。
audience_and_scenarios 为 2:README 明确面向 MARL 研究者与场景开发者,列出 VMAS 与 MPE 场景;capability_boundaries 为 2:明确说明 2D、holonomic 运动、不支持低层机器人控制等边界;trigger_precision 为 1:make_env 参数众多,但未说明何时应选择 wrapper 或 grad_enabled 的精确触发条件;environment_fit 为 2:支持 CPU/GPU、Gym/Gymnasium/RLlib/TorchRL 集成,环境适配面广。
information_architecture 为 2:README 有目录、分节清晰;install_notes 为 2:提供 pip 与源码安装及可选依赖组;naming_stability 为 1:未说明 API 命名稳定性或弃用策略;examples_and_faq 为 2:提供多个 Colab notebook 与示例脚本;known_limitations 为 1:提到 wrapper 效率较低,但未系统列出已知限制;license 为 2:LICENSE 文件为完整 GPL-3.0;versioning_changelog 为 1:有 PyPI 版本徽章,但无 CHANGELOG;maintenance_responsibility 为 1:发布者未经验证,README 未明确维护责任与支持渠道(仅有 Discord 链接)。
output_usability 为 2:输出为张量/字典,形状与类型在 README 中明确;marginal_value 为 2:向量化可微分 2D 物理引擎对 MARL 基准有明确增量价值;cost_benefit 为 2:轻量纯张量实现,安装与运行成本相对低,但可选依赖较多。
claim_traceability 为 1:README 声称“Tested”并链接 CI 徽章,但未逐条对应测试;cross_source_corroboration 为 1:测试文件仅覆盖部分场景(balance、lidar),与 README 声称的全场景测试不完全对应;fact_inference_separation 为 1:README 混合了事实描述与性能宣称(如“Faster than physics engines”),未区分证据与推断。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 源码中未见:敏感信息处理使用专用、低权限、可随时吊销的 API 密钥,不要复用生产凭据,也不要让密钥出现在日志里。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 依赖未锁定版本(除 pyglet 与 gym-notices),且 gym 已弃用,安装可复现性有限。
- README 声称全场景测试,但可见测试仅覆盖部分场景,测试覆盖声明需谨慎对待。
- 发布者身份未经验证,维护责任与支持渠道不明确。
- 无 CHANGELOG 或版本回滚说明,升级风险需自行评估。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
What's Changed * [CI] Matplotlib import by @matteobettini in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/165 * Fix: correct joint passage reward function (issue #145) by @Benabdellah22 in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/168 * [Copyright] Fix file headers by @matteobettini in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/171 * [Experience] Disable gymnasium notice by @matteobettini in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/172 New Contributors …在 GitHub 查看 ↗ -
发布说明摘录
What's Changed * [Tutorial] New tutorial on creating a scenario and training it by @matteobettini in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/151 * [Feature] Local seed by @matteobettini in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/154 * [BugFix] Football u_shoot_multiplier by @matteobettini in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/156 * fix bug of road_traffic senario when using cuda by @Schopenhauer-loves-Hegel in https://github.com/proroklab/VectorizedMultiAgentSimulator/pull/157 …在 GitHub 查看 ↗ -
发布说明摘录
Football revamp  We have just revamped VMAS football! New rewards, observations, options for physical differences and formation spawning and value function plotting. Try it out for some intense N vs M continuous control gameplay. We also provide an heuristic opponent with tunable strengths for precision, decision, and speed. Here are the key new points …在 GitHub 查看 ↗