VMAS 向量化多智能体模拟器

用 PyTorch 写的可微分 2D 向量化物理引擎,为多智能体强化学习提供可批量并行、可接入 Gym/RLlib/TorchRL 的基准环境。

Star 数
★ 628
最近更新
5 个月前
License
GPL-3.0
主语言
Python

30 秒速览

运行形态
代码库 / SDK
可在哪里用
通用 · 跨平台
费用
免费,无需付费服务
上手难度
中 · 需要几步配置
开始前需要
Python 3.8-3.11PyTorchOpenGL 与 Pyglet(渲染)Xvfb(无显示环境渲染,可选)Shell / 命令行网络访问本地文件系统
典型场景
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 在渲染上叠加函数图像。场景脚本可直接运行以交互式操控智能体调试。

  1. MARL 研究者需要在同一套环境下对比 MAPPO、IPPO、MADDPG、QMIX、VDN 等算法时,可用 VMAS 场景在 TorchRL/BenchMARL 中训练。
  2. 论文作者需要可复现的多机器人协作/对抗基准(transport、dispersion、flocking、football)来评估集体机器人学习。
  3. 需要训练速度的场景中,团队借助 GPU 上数万并行环境快速采集 rollout,缩短实验周期。
  4. 想利用可微分模拟器做基于梯度的策略优化或模型学习的研究者,可以开启 grad_enabled 让梯度穿过模拟器。
  5. 课程或教程作者可用交互式渲染与 Colab notebook 演示多智能体环境创建、step 与可视化。
  6. 多机器人算法开发者把自定义场景实现为 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?

FollowAgents 源码审查 · FARS-2.1
缺口较多
44/ 100 五分制 2.2 / 5
信任安全 7/29
可靠稳定 6/14
适用触发 10/18
规范维护 9/18
有效结果 9/13
证据核验 3/8
查看各维度的扣分理由
信任安全7 / 29 · 1.2/5

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 引用与作者信息,归属清晰。

可靠稳定6 / 14 · 2.1/5

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 未说明错误处理或失败提示策略。

适用触发10 / 18 · 2.8/5

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 集成,环境适配面广。

规范维护9 / 18 · 2.5/5

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 链接)。

有效结果9 / 13 · 3.5/5

output_usability 为 2:输出为张量/字典,形状与类型在 README 中明确;marginal_value 为 2:向量化可微分 2D 物理引擎对 MARL 基准有明确增量价值;cost_benefit 为 2:轻量纯张量实现,安装与运行成本相对低,但可选依赖较多。

证据核验3 / 8 · 1.9/5

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 或版本回滚说明,升级风险需自行评估。
证据充分度:低 评估于 2026年10月31日 审查版本 9658bc56e886
查看完整评分方法 →

最近版本

来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。

  1. VMAS-1.5.2
    发布说明摘录
    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 查看 ↗
  2. 1.5.1
    发布说明摘录
    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 查看 ↗
  3. 1.5.0
    发布说明摘录
    Football revamp ![football_vmas-ezgif com-optimize](https://github.com/user-attachments/assets/2bff7aef-6fac-4865-bd2a-be385a8cf740) 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 查看 ↗

常见问题

VMAS 需要 GPU 吗?
不需要。device 参数可设为 "cpu" 或 "cuda",GPU 用于进一步加速批量并行仿真,但 CPU 也能运行。
它与 OpenAI MPE 是什么关系?
VMAS 的实现受 OpenAI MPE 启发,并在自身场景之外移植、向量化了 MPE 的全部场景,因此可作为 MPE 的替代选择。
必须使用 BenchMARL 或 TorchRL 才能训练吗?
不是。VMAS 本身只是环境,wrapper=None 时使用原生接口;也可以选择 rllib、gym、gymnasium、gymnasium_vec 包装器,或配合 BenchMARL、TorchRL、RLlib 训练。
如何在无显示器的服务器上渲染?
使用 mode="rgb_array",安装 OpenGL 与 Pyglet;必要时安装 EGL 使用 GPU 无头渲染,或通过 Xvfb/xvfb-run 创建虚拟屏幕。
许可证是什么?
GPL-3.0。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents