[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-facebookresearch--BenchMARL":3,"tool-facebookresearch--BenchMARL":62},[4,18,28,36,45,54],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},9989,"n8n","n8n-io\u002Fn8n","n8n 是一款面向技术团队的公平代码（fair-code）工作流自动化平台，旨在让用户在享受低代码快速构建便利的同时，保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点，帮助用户轻松连接 400 多种应用与服务，实现复杂业务流程的自动化。\n\nn8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”：既可以通过直观的可视化界面拖拽节点搭建流程，也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外，n8n 原生集成了基于 LangChain 的 AI 能力，支持用户利用自有数据和模型构建智能体工作流。在部署方面，n8n 提供极高的自由度，支持完全自托管以保障数据隐私和控制权，也提供云端服务选项。凭借活跃的社区生态和数百个现成模板，n8n 让构建强大且可控的自动化系统变得简单高效。",184740,2,"2026-04-19T23:22:26",[16,14,13,15,27],"插件",{"id":29,"name":30,"github_repo":31,"description_zh":32,"stars":33,"difficulty_score":10,"last_commit_at":34,"category_tags":35,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":24,"last_commit_at":42,"category_tags":43,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",161147,"2026-04-19T23:31:47",[14,13,44],"语言模型",{"id":46,"name":47,"github_repo":48,"description_zh":49,"stars":50,"difficulty_score":51,"last_commit_at":52,"category_tags":53,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,27],{"id":55,"name":56,"github_repo":57,"description_zh":58,"stars":59,"difficulty_score":24,"last_commit_at":60,"category_tags":61,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":77,"owner_twitter":77,"owner_website":78,"owner_url":79,"languages":80,"stars":89,"forks":90,"last_commit_at":91,"license":92,"difficulty_score":24,"env_os":93,"env_gpu":94,"env_ram":95,"env_deps":96,"category_tags":109,"github_topics":111,"view_count":24,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":122,"updated_at":123,"faqs":124,"releases":160},9978,"facebookresearch\u002FBenchMARL","BenchMARL","BenchMARL is a library for benchmarking Multi-Agent Reinforcement Learning (MARL). BenchMARL allows to quickly compare different MARL algorithms, tasks, and models while being systematically grounded in its two core tenets: reproducibility and standardization.","BenchMARL 是一个专为多智能体强化学习（MARL）设计的开源基准测试库。它的核心使命是解决当前 MARL 研究中算法对比困难、实验复现性差以及评估标准不统一的痛点，帮助研究者在公平、标准化的环境下快速验证新想法。\n\n这款工具非常适合从事多智能体系统研究的科研人员、算法工程师以及希望深入该领域的开发者使用。无论是想对比不同算法在相同任务下的表现，还是评估新模型的有效性，BenchMARL 都能提供一站式支持。\n\n其技术亮点在于深度集成了高性能后端 TorchRL，确保了训练效率与前沿算法的实现质量；同时采用 Hydra 进行灵活的模块化配置，让用户能通过简单的命令行指令轻松切换算法、任务或模型。此外，BenchMARL 严格遵循 marl-eval 标准协议，内置了统计严谨的数据报告与可视化功能，确保实验结果不仅可复现，而且具有充分的统计学说服力。通过统一接口设计，它还极大地降低了扩展新算法或自定义环境的门槛，让研究者能专注于核心创新，而非重复构建基础设施。","![BenchMARL](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_fe2009b7e3d9.png)\n\n\n# BenchMARL\n[![tests](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Factions\u002Fworkflows\u002Funit_tests.yml\u002Fbadge.svg)](test)\n[![Documentation Status](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_13d664e1afd7.png)](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002F?badge=latest)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue.svg)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fbenchmarl\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fbenchmarl\" alt=\"pypi version\">\u003C\u002Fa>\n[![Downloads](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_13c502f0fd81.png)](https:\u002F\u002Fpepy.tech\u002Fproject\u002Fbenchmarl)\n[![Discord Shield](https:\u002F\u002Fdcbadge.limes.pink\u002Fapi\u002Fserver\u002Fhttps:\u002F\u002Fdiscord.gg\u002FjEEWCn6T3p)](https:\u002F\u002Fdiscord.gg\u002FjEEWCn6T3p)\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2312.01472-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2312.01472)\n\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance\n```\n\n\n[![Examples](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExamples-blue.svg)](examples) [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002FBenchMARL\u002Fblob\u002Fmain\u002Fnotebooks\u002Frun.ipynb)\n[![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBenchmarks-Wandb-yellow)](https:\u002F\u002Fwandb.ai\u002Fmatteobettini\u002Fbenchmarl-public\u002Freportlist)\n\n- Watch the [talk on multi-agent simulation and learning in BenchMARL and TorchRL](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1tOIMgJf_VQ).\n- Watch the [lecture on creating a custom scenario in VMAS and training it in BenchMARL](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mIb1uGeRJsg)\n\n### What is BenchMARL 🧐?\n\nBenchMARL is a Multi-Agent Reinforcement Learning (MARL) training library created to enable reproducibility\nand benchmarking across different MARL algorithms and environments.\nIts mission is to present a standardized interface that allows easy integration of new algorithms and environments to \nprovide a fair comparison with existing solutions.\nBenchMARL uses [TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl) as its backend, which grants it high performance \nand state-of-the-art implementations.\nIt also uses [hydra](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fintro\u002F) for flexible and modular configuration,\nand its data reporting is compatible with [marl-eval](https:\u002F\u002Fsites.google.com\u002Fview\u002Fmarl-standard-protocol\u002Fhome) \nfor standardised and statistically strong evaluations.\n\nBenchMARL **core design tenets** are:\n* _Reproducibility through systematical grounding and standardization of configuration_ \n* _Standardised and statistically-strong plotting and reporting_\n* _Experiments that are independent of the algorithm, environment, and model choices_\n* _Breadth over the MARL ecosystem_\n* _Easy implementation of new algorithms, environments, and models_\n* _Leveraging the know-how and infrastructure of [TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl), without reinventing the wheel_\n\n### Why would I BenchMARL 🤔?\n\nWhy would you BenchMARL, I see you ask. \nWell, you can BenchMARL to compare different algorithms, environments, models, \nto check how your new research compares to existing ones, or if you just want to approach \nthe domain and want to easily take a picture of the landscape.\n\n### Table of contents\n\n- [BenchMARL](#benchmarl)\n  * [How to use](#how-to-use)\n    + [Notebooks](#notebooks)\n    + [Install](#install)\n    + [Run](#run)\n  * [Concept](#concept)\n  * [Fine-tuned public benchmarks](#fine-tuned-public-benchmarks)\n  * [Reporting and plotting](#reporting-and-plotting)\n  * [Extending](#extending)\n  * [Configuring](#configuring)\n    + [Experiment](#experiment)\n    + [Algorithm](#algorithm)\n    + [Task](#task)\n    + [Model](#model)\n  * [Features](#features)\n    + [Logging](#logging)\n    + [Checkpointing](#checkpointing)\n    + [Callbacks](#callbacks)\n  * [Citing BenchMARL](#citing-benchmarl)\n\n\n## How to use\n\n### Notebooks\n- [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002FBenchMARL\u002Fblob\u002Fmain\u002Fnotebooks\u002Frun.ipynb) &ensp; **Running BenchMARL experiments**.\n- [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fproroklab\u002FVectorizedMultiAgentSimulator\u002Fblob\u002Fmain\u002Fnotebooks\u002FSimulation_and_training_in_VMAS_and_BenchMARL.ipynb) &ensp;  **Creating a VMAS scenario and training it in BenchMARL**.  We will create a scenario where multiple robots with different embodiments need to navigate to their goals while avoiding each other (as well as obstacles) and train it using MAPPO and MLP\u002FGNN policies.\n\n\n### Install\n\n#### Install TorchRL\n\nYou can install TorchRL from PyPi.\n\n```bash\npip install torchrl\n```\nFor more details, or for installing nightly versions, see the\n[TorchRL installation guide](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl#installation).\n\n#### Install BenchMARL\nYou can just install it from github\n```bash\npip install benchmarl\n```\nOr also clone it locally to access the configs and scripts\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL.git\npip install -e BenchMARL\n```\n#### Install environments\n\nAll enviornment dependencies are optional in BenchMARL and can be installed separately.\n\n##### VMAS\n\n```bash\npip install vmas\n```\n\n##### PettingZoo\n```bash\npip install \"pettingzoo[all]\"\n```\n\n##### MeltingPot\n```bash\npip install dm-meltingpot\n```\n\n##### MAgent2\n\n```bash\npip install git+https:\u002F\u002Fgithub.com\u002FFarama-Foundation\u002FMAgent2\n```\n\n##### SMACv2\n\nFollow the instructions on the environment [repository](https:\u002F\u002Fgithub.com\u002Foxwhirl\u002Fsmacv2).\n\n[Here](.github\u002Funittest\u002Finstall_smacv2.sh) is how we install it on linux.\n\n### Run\n\nExperiments are launched with a [default configuration](benchmarl\u002Fconf) that \ncan be overridden in many ways. \nTo learn how to customize and override configurations\nplease refer to the [configuring section](#configuring).\n\n#### Command line\n\nTo launch an experiment from the command line you can do\n\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance\n```\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_experiment.sh)\n\n\nThanks to [hydra](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fintro\u002F), you can run benchmarks as multi-runs like:\n```bash\npython benchmarl\u002Frun.py -m algorithm=mappo,qmix,masac task=vmas\u002Fbalance,vmas\u002Fsampling seed=0,1\n```\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_benchmark.sh)\n\nThe default implementation for hydra multi-runs is sequential, but [parallel](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fplugins\u002Fjoblib_launcher\u002F)\n and [slurm](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fplugins\u002Fsubmitit_launcher\u002F) launchers are also available.\n\n#### Script\n\nYou can also load and launch your experiments from within a script\n\n```python\n experiment = Experiment(\n    task=VmasTask.BALANCE.get_from_yaml(),\n    algorithm_config=MappoConfig.get_from_yaml(),\n    model_config=MlpConfig.get_from_yaml(),\n    critic_model_config=MlpConfig.get_from_yaml(),\n    seed=0,\n    config=ExperimentConfig.get_from_yaml(),\n)\nexperiment.run()\n```\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_experiment.py)\n\n\nYou can also run multiple experiments in a `Benchmark`.\n\n```python\nbenchmark = Benchmark(\n    algorithm_configs=[\n        MappoConfig.get_from_yaml(),\n        QmixConfig.get_from_yaml(),\n        MasacConfig.get_from_yaml(),\n    ],\n    tasks=[\n        VmasTask.BALANCE.get_from_yaml(),\n        VmasTask.SAMPLING.get_from_yaml(),\n    ],\n    seeds={0, 1},\n    experiment_config=ExperimentConfig.get_from_yaml(),\n    model_config=MlpConfig.get_from_yaml(),\n    critic_model_config=MlpConfig.get_from_yaml(),\n)\nbenchmark.run_sequential()\n```\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_benchmark.py)\n\n\n## Concept\n\nThe goal of BenchMARL is to bring different MARL environments and algorithms\nunder the same interfaces to enable fair and reproducible comparison and benchmarking.\nBenchMARL is a full-pipline unified training library with the goal of enabling users to run\nany comparison they want across our algorithms and tasks in just one line of code.\nTo achieve this, BenchMARL interconnects components from [TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl), \nwhich provides an efficient and reliable backend.\n\nThe library has a [default configuration](benchmarl\u002Fconf) for each of its components.\nWhile parts of this configuration are supposed to be changed (for example experiment configurations),\nother parts (such as tasks) should not be changed to allow for reproducibility.\nTo aid in this, each version of BenchMARL is paired to a default configuration.\n\nLet's now introduce each component in the library.\n\n**Experiment**. An experiment is a training run in which an algorithm, a task, and a model are fixed.\nExperiments are configured by passing these values alongside a seed and the experiment hyperparameters.\nThe experiment [hyperparameters](benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml) cover both \non-policy and off-policy algorithms, discrete and continuous actions, and probabilistic and deterministic policies\n(as they are agnostic of the algorithm or task used).\nAn experiment can be launched from the command line or from a script. \nSee the [run](#run) section for more information.\n\n**Benchmark**. In the library we call `benchmark` a collection of experiments that can vary in tasks, algorithm, or model.\nA benchmark shares the same experiment configuration across all of its experiments.\nBenchmarks allow to compare different MARL components in a standardized way.\nA benchmark can be launched from the command line or from a script. \nSee the [run](#run) section for more information.\n\n**Algorithms**. Algorithms are an ensemble of components (e.g., losss, replay buffer) which\ndetermine the training strategy. Here is a table with the currently implemented algorithms in BenchMARL.\n\n| Name                                                                                                                                        | On\u002FOff policy | Actor-critic | Full-observability in critic | Action compatibility  | Probabilistic actor |   \n|---------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------|------------------------------|-----------------------|---------------------|\n| [MAPPO](https:\u002F\u002Farxiv.org\u002Fabs\u002F2103.01955)                                                                                                   | On            | Yes          | Yes                          | Continuous + Discrete | Yes                 |   \n| [IPPO](https:\u002F\u002Farxiv.org\u002Fabs\u002F2011.09533)                                                                                                    | On            | Yes          | No                           | Continuous + Discrete | Yes                 |  \n| [MADDPG](https:\u002F\u002Farxiv.org\u002Fabs\u002F1706.02275)                                                                                                  | Off           | Yes          | Yes                          | Continuous            | No                  | \n| [IDDPG](benchmarl\u002Falgorithms\u002Fiddpg.py)                                                                                                      | Off           | Yes          | No                           | Continuous            | No                  |   \n| [MASAC](benchmarl\u002Falgorithms\u002Fmasac.py)                                                                                                      | Off           | Yes          | Yes                          | Continuous + Discrete | Yes                 |   \n| [ISAC](benchmarl\u002Falgorithms\u002Fisac.py)                                                                                                        | Off           | Yes          | No                           | Continuous + Discrete | Yes                 |   \n| [QMIX](https:\u002F\u002Farxiv.org\u002Fabs\u002F1803.11485)                                                                                                    | Off           | No           | NA                           | Discrete              | No                  | \n| [VDN](https:\u002F\u002Farxiv.org\u002Fabs\u002F1706.05296)                                                                                                     | Off           | No           | NA                           | Discrete              | No                  |  \n| [IQL](https:\u002F\u002Fwww.semanticscholar.org\u002Fpaper\u002FMulti-Agent-Reinforcement-Learning%3A-Independent-Tan\u002F59de874c1e547399b695337bcff23070664fa66e) | Off           | No           | NA                           | Discrete              | No                  |  \n\n\n**Tasks**. Tasks are scenarios from a specific environment which constitute the MARL\nchallenge to solve.\nThey differ based on many aspects, here is a table with the current environments in BenchMARL\n\n| Environment                                                         | Tasks                                | Cooperation               | Global state | Reward function               | Action space          |    Vectorized    |\n|---------------------------------------------------------------------|--------------------------------------|---------------------------|--------------|-------------------------------|-----------------------|:----------------:|\n| [VMAS](https:\u002F\u002Fgithub.com\u002Fproroklab\u002FVectorizedMultiAgentSimulator)  | [27](benchmarl\u002Fconf\u002Ftask\u002Fvmas)       | Cooperative + Competitive | No           | Shared + Independent + Global | Continuous + Discrete |       Yes        |    \n| [SMACv2](https:\u002F\u002Fgithub.com\u002Foxwhirl\u002Fsmacv2)                         | [15](benchmarl\u002Fconf\u002Ftask\u002Fsmacv2)     | Cooperative               | Yes          | Global                        | Discrete              |        No        |\n| [MPE](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fmultiagent-particle-envs)           | [8](benchmarl\u002Fconf\u002Ftask\u002Fpettingzoo)  | Cooperative + Competitive | Yes          | Shared + Independent          | Continuous + Discrete |        No        |\n| [SISL](https:\u002F\u002Fgithub.com\u002Fsisl\u002FMADRL)                               | [2](benchmarl\u002Fconf\u002Ftask\u002Fpettingzoo)  | Cooperative               | No           | Shared                        | Continuous            |        No        |\n| [MeltingPot](https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmeltingpot)         | [49](benchmarl\u002Fconf\u002Ftask\u002Fmeltingpot) | Cooperative + Competitive | Yes          | Independent                   | Discrete              |        No        |\n| [MAgent2](https:\u002F\u002Fgithub.com\u002FFarama-Foundation\u002Fmagent2)             | [1](benchmarl\u002Fconf\u002Ftask\u002Fmagent)      | Cooperative + Competitive | Yes          | Global in groups              | Discrete              |        No        |\n\n\n> [!NOTE]  \n> BenchMARL uses the [TorchRL MARL API](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl\u002Fissues\u002F1463) for grouping agents.\n> In competitive environments like MPE, for example, teams will be in different groups. Each group has its own loss,\n> models, buffers, and so on. Parameter sharing options refer to sharing within the group. See the example on [creating\n> a custom algorithm](examples\u002Fextending\u002Falgorithm\u002Falgorithms\u002Fcustomalgorithm.py) for more info.\n\n**Models**. Models are neural networks used to process data. They can be used as actors (policies) or, \nwhen requested, as critics. We provide a set of base models (layers) and a SequenceModel to concatenate\ndifferent layers. All the models can be used with or without parameter sharing within an \nagent group. Here is a table of the models implemented in BenchMARL\n\n| Name                                     | Decentralized | Centralized with local inputs | Centralized with global input | \n|------------------------------------------|:-------------:|:-----------------------------:|:-----------------------------:|\n| [MLP](benchmarl\u002Fmodels\u002Fmlp.py)           |      Yes      |              Yes              |              Yes              |\n| [GRU](benchmarl\u002Fmodels\u002Fgru.py)           |      Yes      |              Yes              |              Yes              |\n| [LSTM](benchmarl\u002Fmodels\u002Flstm.py)         |      Yes      |              Yes              |              Yes              |\n| [GNN](benchmarl\u002Fmodels\u002Fgnn.py)           |      Yes      |              Yes              |              No               |\n| [CNN](benchmarl\u002Fmodels\u002Fcnn.py)           |      Yes      |              Yes              |              Yes              |\n| [Deepsets](benchmarl\u002Fmodels\u002Fdeepsets.py) |      Yes      |              Yes              |              Yes              |\n\n\n## Fine-tuned public benchmarks\n> [!WARNING]  \n> This section is under a work in progress. We are constantly working on fine-tuning\n> our experiments to enable our users to have access to state-of-the-art benchmarks.\n> If you would like to collaborate in this effort, please reach out to us.\n\nIn the [fine_tuned](fine_tuned) folder we are collecting some tested hyperparameters for\nspecific environments to enable users to bootstrap their benchmarking.\nYou can just run the scripts in this folder to automatically use the proposed hyperparameters.\n\nWe will tune benchmarks for you and publish the config and benchmarking plots on\n[Wandb](https:\u002F\u002Fwandb.ai\u002Fmatteobettini\u002Fbenchmarl-public\u002Freportlist) publicly\n\nCurrently available ones are:\n\n- **VMAS**:  [![Conf](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FConf-purple.svg)](fine_tuned\u002Fvmas\u002Fconf\u002Fconfig.yaml)  [![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBenchmarks-Wandb-yellow)](https:\u002F\u002Fapi.wandb.ai\u002Flinks\u002Fmatteobettini\u002Fr5744vas)\n\nIn the following, we report a table of the results:\n\n| **\u003Cp align=\"center\">Environment\u003C\u002Fp>** | **\u003Cp align=\"center\">Sample efficiency curves (all tasks)\u003C\u002Fp>**                                                                                                                        | **\u003Cp align=\"center\">Performance profile\u003C\u002Fp>**                                                                                                                               | **\u003Cp align=\"center\">Aggregate scores\u003C\u002Fp>**                                                                                                                        |\n|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| VMAS                                  | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_878bdee620e7.png\"\u002F> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_e439e595d91c.png\"\u002F> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_78805bbb22c8.png\"\u002F> |\n\n## Reporting and plotting\n\nReporting and plotting is compatible with [marl-eval](https:\u002F\u002Fgithub.com\u002Finstadeepai\u002Fmarl-eval). \nIf `experiment.create_json=True` (this is the default in the [experiment config](benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml))\na file named `{experiment_name}.json` will be created in the experiment output folder with the format of [marl-eval](https:\u002F\u002Fgithub.com\u002Finstadeepai\u002Fmarl-eval).\nYou can load and merge these files using the utils in [eval_results](benchmarl\u002Feval_results.py) to create beautiful plots of \nyour benchmarks.  No more struggling with matplotlib and latex!\n\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fplotting)\n\n![aggregate_scores](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_78805bbb22c8.png)\n![sample_efficiancy](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_878bdee620e7.png)\n![performace_profile](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_e439e595d91c.png)\n\n\n## Extending\nOne of the core tenets of BenchMARL is allowing users to leverage the existing algorithm\nand tasks implementations to benchmark their newly proposed solution.\n\nFor this reason we expose standard interfaces with simple abstract methods\nfor [algorithms](benchmarl\u002Falgorithms\u002Fcommon.py), [tasks](benchmarl\u002Fenvironments\u002Fcommon.py) and [models](benchmarl\u002Fmodels\u002Fcommon.py).\nTo introduce your solution in the library, you just need to implement the abstract methods\nexposed by these base classes which use objects from the [TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl) library.\n\nHere is an example on how you can create a custom algorithm [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fextending\u002Falgorithm).\n\nHere is an example on how you can create a custom task [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fextending\u002Ftask).\n\nHere is an example on how you can create a custom model [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fextending\u002Fmodel).\n\n\n## Configuring\nAs highlighted in the [run](#run) section, the project can be configured either\nin the script itself or via [hydra](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fintro\u002F). \nWe suggest to read the hydra documentation\nto get familiar with all its functionalities. \n\nEach component in the project has a corresponding yaml configuration in the BenchMARL \n[conf tree](benchmarl\u002Fconf). \nComponents' configurations are loaded from these files into python dataclasses that act \nas schemas for validation of parameter names and types. That way we keep the best of \nboth words: separation of all configuration from code and strong typing for validation! \nYou can also directly load and validate configuration yaml files without using hydra from a script by calling \n`ComponentConfig.get_from_yaml()`.\n\n### Experiment\n\nExperiment configurations are in [`benchmarl\u002Fconf\u002Fconfig.yaml`](benchmarl\u002Fconf\u002Fconfig.yaml).\nRunning custom experiments is extremely simplified by the [Hydra](https:\u002F\u002Fhydra.cc\u002F) configurations.\nThe default configuration for the library is contained in the [`benchmarl\u002Fconf`](benchmarl\u002Fconf) folder.\n\nWhen running an experiment you can override its hyperparameters like so\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo experiment.lr=0.03 experiment.evaluation=true experiment.train_device=\"cpu\"\n```\n\nExperiment hyperparameters are loaded from [`benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml`](benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml)\ninto a dataclass [`ExperimentConfig`](benchmarl\u002Fexperiment\u002Fexperiment.py) defining their domain.\nThis makes it so that all and only the parameters expected are loaded with the right types.\nYou can also directly load them from a script by calling `ExperimentConfig.get_from_yaml()`.\n\nHere is an example of overriding experiment hyperparameters from hydra \n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_experiment.sh) or from\na script [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_experiment.py).\n\n### Algorithm\n\nYou can override an algorithm configuration when launching BenchMARL.\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=masac algorithm.num_qvalue_nets=3 algorithm.target_entropy=auto algorithm.share_param_critic=true\n```\n\nAvailable algorithms and their default configs can be found at [`benchmarl\u002Fconf\u002Falgorithm`](benchmarl\u002Fconf\u002Falgorithm).\nThey are loaded into a dataclass [`AlgorithmConfig`](benchmarl\u002Falgorithms\u002Fcommon.py), present for each algorithm, defining their domain.\nThis makes it so that all and only the parameters expected are loaded with the right types.\nYou can also directly load them from a script by calling `YourAlgorithmConfig.get_from_yaml()`.\n\nHere is an example of overriding algorithm hyperparameters from hydra \n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_algorithm.sh) or from\na script [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_algorithm.py).\n\n\n### Task\n\nYou can override a task configuration when launching BenchMARL.\nHowever this is not recommended for benchmarking as tasks should have fixed version and parameters for reproducibility.\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo task.n_agents=4\n```\n\nAvailable tasks and their default configs can be found at [`benchmarl\u002Fconf\u002Ftask`](benchmarl\u002Fconf\u002Ftask).\nThey are loaded into a dataclass [`TaskConfig`](benchmarl\u002Fenvironments\u002Fcommon.py), defining their domain.\nTasks are enumerations under the environment name. For example, `VmasTask.NAVIGATION` represents the navigation task in the\nVMAS simulator. This allows autocompletion and seeing all available tasks at once.\nYou can also directly load them from a script by calling `YourEnvTask.TASK_NAME.get_from_yaml()`.\n\nHere is an example of overriding task hyperparameters from hydra \n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_task.sh) or from\na script [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_task.py).\n\n### Model\n\nYou can override the model configuration when launching BenchMARL.\nBy default an MLP model will be loaded with the default config.\nYou can change it like so:\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo model=layers\u002Fmlp model=layers\u002Fmlp model.layer_class=\"torch.nn.Linear\" \"model.num_cells=[32,32]\" model.activation_class=\"torch.nn.ReLU\"\n```\n\nAvailable models and their configs can be found at [`benchmarl\u002Fconf\u002Fmodel\u002Flayers`](benchmarl\u002Fconf\u002Fmodel\u002Flayers).\nThey are loaded into a dataclass [`ModelConfig`](benchmarl\u002Fmodels\u002Fcommon.py), defining their domain.\nYou can also directly load them from a script by calling `YourModelConfig.get_from_yaml()`.\n\nHere is an example of overriding model hyperparameters from hydra \n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_model.sh) or from\na script [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_model.py).\n\n#### Sequence model\nYou can compose layers into a sequence model.\nAvailable layer names are in the [`benchmarl\u002Fconf\u002Fmodel\u002Flayers`](benchmarl\u002Fconf\u002Fmodel\u002Flayers) folder.\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo model=sequence \"model.intermediate_sizes=[256]\" \"model\u002Flayers@model.layers.l1=mlp\" \"model\u002Flayers@model.layers.l2=mlp\" \"+model\u002Flayers@model.layers.l3=mlp\" \"model.layers.l3.num_cells=[3]\"\n```\nAdd a layer with `\"+model\u002Flayers@model.layers.l3=mlp\"`.\n\nRemove a layer with `\"~model.layers.l2\"`.\n\nConfigure a layer with `\"model.layers.l1.num_cells=[3]\"`.\n\nHere is an example of creating a sequence model from hydra \n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_sequence_model.sh) or from\na script [![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_sequence_model.py).\n\n## Features\n\nBenchMARL has several features:\n- A test CI with integration and training test routines that are run for all simulators and algorithms\n- Integration in the official TorchRL ecosystem for dedicated support\n- Possibility of using different algorithms and models for different agent groups (see [`examples\u002Fensemble`](examples\u002Fensemble))\n\n\n### Logging\n\nBenchMARL is compatible with the [TorchRL loggers](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl\u002Ftree\u002Fmain\u002Ftorchrl\u002Frecord\u002Floggers).\nA list of logger names can be provided in the [experiment config])(benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml.\nExample of available options are: `wandb`, `csv`, `mflow`, `tensorboard` or any other option available in TorchRL. You can specify the loggers\nin the yaml config files or in the script arguments like so:\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance \"experiment.loggers=[wandb]\"\n```\nThe wandb logger is fully compatible with experiment restoring and will automatically resume the run of \nthe loaded experiment.\n\n### Checkpointing\n\nExperiments can be checkpointed every `experiment.checkpoint_interval` collected frames.\nExperiments will use an output folder for logging and checkpointing which can be specified in `experiment.save_folder`.\nIf this is left unspecified,\nthe default will be the hydra output folder (if using hydra) or (otherwise) the current directory \nwhere the script is launched.\nThe output folder will contain a folder for each experiment with the corresponding experiment name.\nTheir checkpoints will be stored in a `\"checkpoints\"` folder within the experiment folder.\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo experiment.max_n_iters=3 experiment.on_policy_collected_frames_per_batch=100 experiment.checkpoint_interval=100\n```\n\nTo load from a checkpoint, pass the absolute checkpoint file name to `experiment.restore_file`.\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo experiment.max_n_iters=6 experiment.on_policy_collected_frames_per_batch=100 experiment.restore_file=\"\u002Fhydra\u002Fexperiment\u002Ffolder\u002Fcheckpoint\u002Fcheckpoint_300.pt\"\n```\nHere is a python example when modifying the config\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fcheckpointing\u002Freload_experiment.py)\nand one keeping the same config \n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fcheckpointing\u002Fresume_experiment.py).\n\nThere are also ways to **resume** and **evaluate** hydra experiments directly from the file\n```bash\npython benchmarl\u002Fevaluate.py ..\u002Foutputs\u002F2024-09-09\u002F20-39-31\u002Fmappo_balance_mlp__cd977b69_24_09_09-20_39_31\u002Fcheckpoints\u002Fcheckpoint_100.pt\n```\n```bash\npython benchmarl\u002Fresume.py ..\u002Foutputs\u002F2024-09-09\u002F20-39-31\u002Fmappo_balance_mlp__cd977b69_24_09_09-20_39_31\u002Fcheckpoints\u002Fcheckpoint_100.pt\n```\n\n### Callbacks\n\nExperiments optionally take a list of [`Callback`](benchmarl\u002Fexperiment\u002Fcallback.py) which have several methods\nthat you can implement to see what's going on during training such \nas `on_batch_collected`, `on_train_end`, and `on_evaluation_end`.\n\n[![Example](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fcallback\u002Fcustom_callback.py)\n\n\n## Citing BenchMARL\n\nIf you use BenchMARL in your research please use the following BibTeX entry:\n\n```BibTeX\n@article{bettini2024benchmarl,\n  author  = {Matteo Bettini and Amanda Prorok and Vincent Moens},\n  title   = {BenchMARL: Benchmarking Multi-Agent Reinforcement Learning},\n  journal = {Journal of Machine Learning Research},\n  year    = {2024},\n  volume  = {25},\n  number  = {217},\n  pages   = {1--10},\n  url     = {http:\u002F\u002Fjmlr.org\u002Fpapers\u002Fv25\u002F23-1612.html}\n}\n```\n\n## License\nBenchMARL is licensed under the MIT License. See [LICENSE](LICENSE) for details.\n","![BenchMARL](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_fe2009b7e3d9.png)\n\n\n# BenchMARL\n[![tests](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Factions\u002Fworkflows\u002Funit_tests.yml\u002Fbadge.svg)](test)\n[![Documentation Status](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_13d664e1afd7.png)](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002F?badge=latest)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue.svg)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)\n\u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fbenchmarl\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fbenchmarl\" alt=\"pypi version\">\u003C\u002Fa>\n[![Downloads](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_13c502f0fd81.png)](https:\u002F\u002Fpepy.tech\u002Fproject\u002Fbenchmarl)\n[![Discord Shield](https:\u002F\u002Fdcbadge.limes.pink\u002Fapi\u002Fserver\u002Fhttps:\u002F\u002Fdiscord.gg\u002FjEEWCn6T3p)](https:\u002F\u002Fdiscord.gg\u002FjEEWCn6T3p)\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2312.01472-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2312.01472)\n\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance\n```\n\n\n[![Examples](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExamples-blue.svg)](examples) [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002FBenchMARL\u002Fblob\u002Fmain\u002Fnotebooks\u002Frun.ipynb)\n[![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBenchmarks-Wandb-yellow)](https:\u002F\u002Fwandb.ai\u002Fmatteobettini\u002Fbenchmarl-public\u002Freportlist)\n\n- 观看关于BenchMARL和TorchRL中多智能体仿真与学习的[演讲](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1tOIMgJf_VQ)。\n- 观看关于在VMAS中创建自定义场景并在BenchMARL中训练该场景的[讲座](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mIb1uGeRJsg)\n\n### 什么是BenchMARL 🧐？\n\nBenchMARL是一个多智能体强化学习（MARL）训练库，旨在实现不同MARL算法和环境之间的可重复性和基准测试。其使命是提供一个标准化的接口，便于新算法和环境的集成，从而与现有解决方案进行公平比较。BenchMARL以[TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl)为后端，这使其具备高性能和最先进的实现。它还使用[hydra](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fintro\u002F)进行灵活且模块化的配置，并且其数据报告与[marl-eval](https:\u002F\u002Fsites.google.com\u002Fview\u002Fmarl-standard-protocol\u002Fhome)兼容，以支持标准化和统计上稳健的评估。\n\nBenchMARL的**核心设计原则**包括：\n* _通过系统化的配置基础和标准化实现可重复性_\n* _标准化且统计稳健的绘图与报告_\n* _实验独立于算法、环境和模型的选择_\n* _覆盖广泛的MARL生态系统_\n* _易于实现新的算法、环境和模型_\n* _充分利用[TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl)的知识与基础设施，而不重复造轮子_\n\n### 我为什么要使用BenchMARL 🤔？\n\n你可能会问，为什么我要使用BenchMARL呢？其实，你可以用BenchMARL来比较不同的算法、环境和模型，检验你的新研究与现有成果的差异，或者只是想初步了解这一领域，快速掌握当前的研究现状。\n\n### 目录\n\n- [BenchMARL](#benchmarl)\n  * [如何使用](#how-to-use)\n    + [Notebooks](#notebooks)\n    + [安装](#install)\n    + [运行](#run)\n  * [概念](#concept)\n  * [精细调优的公开基准](#fine-tuned-public-benchmarks)\n  * [报告与绘图](#reporting-and-plotting)\n  * [扩展](#extending)\n  * [配置](#configuring)\n    + [实验](#experiment)\n    + [算法](#algorithm)\n    + [任务](#task)\n    + [模型](#model)\n  * [特性](#features)\n    + [日志记录](#logging)\n    + [检查点](#checkpointing)\n    + [回调函数](#callbacks)\n  * [引用BenchMARL](#citing-benchmarl)\n\n\n## 如何使用\n\n### Notebooks\n- [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002FBenchMARL\u002Fblob\u002Fmain\u002Fnotebooks\u002Frun.ipynb) &ensp; **运行BenchMARL实验**。\n- [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fproroklab\u002FVectorizedMultiAgentSimulator\u002Fblob\u002Fmain\u002Fnotebooks\u002FSimulation_and_training_in_VMAS_and_BenchMARL.ipynb) &ensp;  **在VMAS中创建场景并在BenchMARL中训练**。我们将创建一个场景，其中多个具有不同形态的机器人需要在避开彼此及障碍物的同时到达各自的目标，并使用MAPPO和MLP\u002FGNN策略进行训练。\n\n\n### 安装\n\n#### 安装TorchRL\n\n你可以从PyPI安装TorchRL。\n\n```bash\npip install torchrl\n```\n更多详细信息或安装夜间版本，请参阅\n[TorchRL安装指南](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl#installation)。\n\n#### 安装BenchMARL\n你可以直接从GitHub安装：\n```bash\npip install benchmarl\n```\n或者克隆到本地以访问配置文件和脚本：\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL.git\npip install -e BenchMARL\n```\n\n#### 安装环境\n\nBenchMARL中的所有环境依赖项都是可选的，可以单独安装。\n\n##### VMAS\n\n```bash\npip install vmas\n```\n\n##### PettingZoo\n```bash\npip install \"pettingzoo[all]\"\n```\n\n##### MeltingPot\n```bash\npip install dm-meltingpot\n```\n\n##### MAgent2\n\n```bash\npip install git+https:\u002F\u002Fgithub.com\u002FFarama-Foundation\u002FMAgent2\n```\n\n##### SMACv2\n\n请按照环境[仓库](https:\u002F\u002Fgithub.com\u002Foxwhirl\u002Fsmacv2)中的说明进行操作。\n[这里](.github\u002Funittest\u002Finstall_smacv2.sh)是我们如何在Linux上安装它的方法。\n\n### 运行\n\n实验使用一个[默认配置](benchmarl\u002Fconf)启动，该配置可以通过多种方式覆盖。要了解如何自定义和覆盖配置，请参阅[配置部分](#configuring)。\n\n#### 命令行\n\n要从命令行启动一个实验，可以执行以下命令：\n\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance\n```\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_experiment.sh)\n\n\n得益于[hydra](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fintro\u002F)，你可以像运行多组实验一样执行基准测试，例如：\n\n```bash\npython benchmarl\u002Frun.py -m algorithm=mappo,qmix,masac task=vmas\u002Fbalance,vmas\u002Fsampling seed=0,1\n```\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_benchmark.sh)\n\nhydra 多组运行的默认实现是顺序执行，但也有[并行](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fplugins\u002Fjoblib_launcher\u002F)和[slurm](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fplugins\u002Fsubmitit_launcher\u002F)启动器可供选择。\n\n#### 脚本\n\n你也可以在脚本中加载并启动你的实验：\n\n```python\nexperiment = Experiment(\n    task=VmasTask.BALANCE.get_from_yaml(),\n    algorithm_config=MappoConfig.get_from_yaml(),\n    model_config=MlpConfig.get_from_yaml(),\n    critic_model_config=MlpConfig.get_from_yaml(),\n    seed=0,\n    config=ExperimentConfig.get_from_yaml(),\n)\nexperiment.run()\n```\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_experiment.py)\n\n\n你还可以在`Benchmark`中运行多个实验：\n\n```python\nbenchmark = Benchmark(\n    algorithm_configs=[\n        MappoConfig.get_from_yaml(),\n        QmixConfig.get_from_yaml(),\n        MasacConfig.get_from_yaml(),\n    ],\n    tasks=[\n        VmasTask.BALANCE.get_from_yaml(),\n        VmasTask.SAMPLING.get_from_yaml(),\n    ],\n    seeds={0, 1},\n    experiment_config=ExperimentConfig.get_from_yaml(),\n    model_config=MlpConfig.get_from_yaml(),\n    critic_model_config=MlpConfig.get_from_yaml(),\n)\nbenchmark.run_sequential()\n```\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Frunning\u002Frun_benchmark.py)\n\n\n## 概念\n\nBenchMARL 的目标是将不同的多智能体强化学习环境和算法统一到相同的接口下，从而实现公平且可重复的比较与基准测试。BenchMARL 是一个全流程的统一训练库，旨在让用户只需一行代码就能在我们的算法和任务之间进行任何他们想要的比较。为了实现这一目标，BenchMARL 将来自[TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl)的组件相互连接起来，后者提供了一个高效可靠的后端。\n\n该库为每个组件都提供了一个[默认配置](benchmarl\u002Fconf)。虽然其中一些配置是可以更改的（例如实验配置），但另一些配置（如任务）则不应被更改，以确保结果的可重复性。为此，BenchMARL 的每个版本都会配有一个默认配置。\n\n接下来，我们将介绍该库中的每个组件。\n\n**实验**。实验是一次训练运行，其中算法、任务和模型都是固定的。实验通过传递这些值以及随机种子和实验超参数来配置。实验的[超参数](benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml)涵盖了在线和离线算法、离散和连续动作，以及概率性和确定性策略（因为它们与所使用的算法或任务无关）。实验可以从命令行或脚本中启动。更多信息请参阅[运行](#run)部分。\n\n**基准测试**。在该库中，我们称“基准测试”为一组实验的集合，这些实验可以在任务、算法或模型上有所不同。基准测试中的所有实验共享相同的实验配置。基准测试允许以标准化的方式比较不同的多智能体强化学习组件。基准测试可以从命令行或脚本中启动。更多信息请参阅[运行](#run)部分。\n\n**算法**。算法是由多个组件（例如损失函数、回放缓冲区等）组成的集合，它们决定了训练策略。以下是 BenchMARL 中当前已实现算法的表格。\n\n| 名称                                                                                                                                        | 开关策略 | 策略-价值网络 | 评价网络是否具备完全可观测性 | 动作兼容性  | 概率型策略网络 |   \n|---------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------|------------------------------|-----------------------|---------------------|\n| [MAPPO](https:\u002F\u002Farxiv.org\u002Fabs\u002F2103.01955)                                                                                                   | 开            | 是          | 是                          | 连续 + 离散           | 是                 |   \n| [IPPO](https:\u002F\u002Farxiv.org\u002Fabs\u002F2011.09533)                                                                                                    | 开            | 是          | 否                           | 连续 + 离散           | 是                 |  \n| [MADDPG](https:\u002F\u002Farxiv.org\u002Fabs\u002F1706.02275)                                                                                                  | 关           | 是          | 是                          | 连续                  | 否                  | \n| [IDDPG](benchmarl\u002Falgorithms\u002Fiddpg.py)                                                                                                      | 关           | 是          | 否                           | 连续                  | 否                  |   \n| [MASAC](benchmarl\u002Falgorithms\u002Fmasac.py)                                                                                                      | 关           | 是          | 是                          | 连续 + 离散           | 是                 |   \n| [ISAC](benchmarl\u002Falgorithms\u002Fisac.py)                                                                                                        | 关           | 是          | 否                           | 连续 + 离散           | 是                 |   \n| [QMIX](https:\u002F\u002Farxiv.org\u002Fabs\u002F1803.11485)                                                                                                    | 关           | 否           | 不适用                       | 离散                  | 否                  | \n| [VDN](https:\u002F\u002Farxiv.org\u002Fabs\u002F1706.05296)                                                                                                     | 关           | 否           | 不适用                       | 离散                  | 否                  |  \n| [IQL](https:\u002F\u002Fwww.semanticscholar.org\u002Fpaper\u002FMulti-Agent-Reinforcement-Learning%3A-Independent-Tan\u002F59de874c1e547399b695337bcff23070664fa66e) | 关           | 否           | 不适用                       | 离散                  | 否                  |  \n\n\n**任务**。任务是来自特定环境的场景，构成了需要解决的多智能体强化学习挑战。\n它们在许多方面有所不同，以下是BenchMARL中当前环境的表格：\n\n| 环境                                                         | 任务                                | 合作性               | 全局状态 | 奖励函数               | 动作空间          |    向量化    |\n|---------------------------------------------------------------------|--------------------------------------|---------------------------|--------------|-------------------------------|-----------------------|:----------------:|\n| [VMAS](https:\u002F\u002Fgithub.com\u002Fproroklab\u002FVectorizedMultiAgentSimulator)  | [27](benchmarl\u002Fconf\u002Ftask\u002Fvmas)       | 合作 + 竞争             | 否           | 共享 + 独立 + 全局 | 连续 + 离散         |       是        |    \n| [SMACv2](https:\u002F\u002Fgithub.com\u002Foxwhirl\u002Fsmacv2)                         | [15](benchmarl\u002Fconf\u002Ftask\u002Fsmacv2)     | 合作                    | 是           | 全局                        | 离散                  |        否        |\n| [MPE](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fmultiagent-particle-envs)           | [8](benchmarl\u002Fconf\u002Ftask\u002Fpettingzoo)  | 合作 + 竞争             | 是           | 共享 + 独立          | 连续 + 离散         |        否        |\n| [SISL](https:\u002F\u002Fgithub.com\u002Fsisl\u002FMADRL)                               | [2](benchmarl\u002Fconf\u002Ftask\u002Fpettingzoo)  | 合作                    | 否           | 共享                        | 连续                  |        否        |\n| [MeltingPot](https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmeltingpot)         | [49](benchmarl\u002Fconf\u002Ftask\u002Fmeltingpot) | 合作 + 竞争             | 是           | 独立                        | 离散                  |        否        |\n| [MAgent2](https:\u002F\u002Fgithub.com\u002FFarama-Foundation\u002Fmagent2)             | [1](benchmarl\u002Fconf\u002Ftask\u002Fmagent)      | 合作 + 竞争             | 是           | 分组全局                  | 离散                  |        否        |\n\n\n> [!NOTE]  \n> BenchMARL 使用 [TorchRL MARL API](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl\u002Fissues\u002F1463) 来对智能体进行分组。\n> 在竞争性环境中，例如 MPE，队伍会分属不同组别。每个组别都有自己的损失、模型、经验回放池等。\n> 参数共享选项指的是组内共享。更多信息请参阅[创建自定义算法](examples\u002Fextending\u002Falgorithm\u002Falgorithms\u002Fcustomalgorithm.py) 的示例。\n\n**模型**。模型是用于处理数据的神经网络。它们可以作为策略网络使用，也可以根据需求用作评价网络。我们提供了一组基础模型（层）以及一个用于串联不同层的SequenceModel。所有模型都可以在智能体组内选择是否进行参数共享。以下是BenchMARL中实现的模型列表：\n\n| 名称                                     | 去中心化 | 局部输入的集中式 | 全局输入的集中式 | \n|------------------------------------------|:-------------:|:-----------------------------:|:-----------------------------:|\n| [MLP](benchmarl\u002Fmodels\u002Fmlp.py)           |      是      |              是              |              是              |\n| [GRU](benchmarl\u002Fmodels\u002Fgru.py)           |      是      |              是              |              是              |\n| [LSTM](benchmarl\u002Fmodels\u002Flstm.py)         |      是      |              是              |              是              |\n| [GNN](benchmarl\u002Fmodels\u002Fgnn.py)           |      是      |              是              |              否              |\n| [CNN](benchmarl\u002Fmodels\u002Fcnn.py)           |      是      |              是              |              是              |\n| [Deepsets](benchmarl\u002Fmodels\u002Fdeepsets.py) |      是      |              是              |              是              |\n\n## 微调后的公开基准测试\n> [!WARNING]  \n> 本节仍在开发中。我们正不断优化实验，以便用户能够访问最先进的基准测试。  \n> 如果您希望参与这项工作，请与我们联系。\n\n在 `fine_tuned` 文件夹中，我们收集了一些针对特定环境的已测试超参数，以帮助用户快速启动基准测试。您只需运行该文件夹中的脚本，即可自动使用建议的超参数。\n\n我们将为您调整基准测试，并将配置文件和基准测试图表公开发布到 [Wandb](https:\u002F\u002Fwandb.ai\u002Fmatteobettini\u002Fbenchmarl-public\u002Freportlist) 上。\n\n目前可用的基准包括：\n\n- **VMAS**:  [![Conf](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FConf-purple.svg)](fine_tuned\u002Fvmas\u002Fconf\u002Fconfig.yaml)  [![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBenchmarks-Wandb-yellow)](https:\u002F\u002Fapi.wandb.ai\u002Flinks\u002Fmatteobettini\u002Fr5744vas)\n\n以下是结果表格：\n\n| **\u003Cp align=\"center\">环境\u003C\u002Fp>** | **\u003Cp align=\"center\">样本效率曲线（所有任务）\u003C\u002Fp>**                                                                                                                        | **\u003Cp align=\"center\">性能概况\u003C\u002Fp>**                                                                                                                               | **\u003Cp align=\"center\">综合评分\u003C\u002Fp>**                                                                                                                        |\n|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| VMAS                                  | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_878bdee620e7.png\"\u002F> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_e439e595d91c.png\"\u002F> | \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_78805bbb22c8.png\"\u002F> |\n\n## 报告与绘图\n\n报告与绘图功能与 [marl-eval](https:\u002F\u002Fgithub.com\u002Finstadeepai\u002Fmarl-eval) 兼容。  \n如果 `experiment.create_json=True`（这是 [实验配置](benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml) 中的默认设置），则会在实验输出文件夹中生成一个名为 `{experiment_name}.json` 的文件，其格式符合 [marl-eval](https:\u002F\u002Fgithub.com\u002Finstadeepai\u002Fmarl-eval) 的标准。  \n您可以使用 [eval_results](benchmarl\u002Feval_results.py) 中的工具加载并合并这些文件，从而轻松创建美观的基准测试图表。再也不用为 matplotlib 和 LaTeX 而烦恼了！\n\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fplotting)\n\n![aggregate_scores](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_78805bbb22c8.png)\n![sample_efficiancy](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_878bdee620e7.png)\n![performace_profile](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_readme_e439e595d91c.png)\n\n\n## 扩展\nBenchMARL 的核心原则之一是允许用户利用现有的算法和任务实现来评估自己新提出的解决方案。\n\n为此，我们在 [算法](benchmarl\u002Falgorithms\u002Fcommon.py)、[任务](benchmarl\u002Fenvironments\u002Fcommon.py) 和 [模型](benchmarl\u002Fmodels\u002Fcommon.py) 中提供了具有简单抽象方法的标准接口。  \n要在库中引入您的解决方案，您只需实现这些基类所暴露的抽象方法，这些基类使用 [TorchRL](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl) 库中的对象。\n\n以下是一个如何创建自定义算法的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fextending\u002Falgorithm)。\n\n以下是一个如何创建自定义任务的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fextending\u002Ftask)。\n\n以下是一个如何创建自定义模型的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fextending\u002Fmodel)。\n\n\n## 配置\n如 [运行](#run) 部分所述，该项目既可以在脚本本身中进行配置，也可以通过 [hydra](https:\u002F\u002Fhydra.cc\u002Fdocs\u002Fintro\u002F) 进行配置。  \n我们建议您阅读 hydra 的文档，以熟悉其所有功能。\n\n项目中的每个组件都在 BenchMARL 的 [conf 树](benchmarl\u002Fconf) 中拥有对应的 YAML 配置文件。  \n这些配置文件会被加载到 Python 数据类中，作为验证参数名称和类型的模式。这样我们既能将配置与代码分离，又能通过强类型检查确保参数的正确性！  \n您还可以直接从脚本中调用 `ComponentConfig.get_from_yaml()` 来加载和验证配置 YAML 文件，而无需使用 hydra。\n\n### 实验\n\n实验配置位于 [`benchmarl\u002Fconf\u002Fconfig.yaml`](benchmarl\u002Fconf\u002Fconfig.yaml)。借助 [Hydra](https:\u002F\u002Fhydra.cc\u002F) 配置，运行自定义实验变得极为简便。库的默认配置包含在 `benchmarl\u002Fconf` 文件夹中。\n\n运行实验时，可以通过以下方式覆盖其超参数：\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo experiment.lr=0.03 experiment.evaluation=true experiment.train_device=\"cpu\"\n```\n\n实验超参数从 [`benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml`](benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml) 加载到一个数据类 [`ExperimentConfig`](benchmarl\u002Fexperiment\u002Fexperiment.py) 中，该类定义了这些参数的有效范围。这样可以确保只加载预期的参数，并且类型正确。你也可以通过调用 `ExperimentConfig.get_from_yaml()` 直接从脚本中加载这些参数。\n\n以下是使用 Hydra 覆盖实验超参数的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_experiment.sh)，或直接从脚本中覆盖 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_experiment.py)。\n\n### 算法\n\n在启动 BenchMARL 时，你可以覆盖算法的配置。\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=masac algorithm.num_qvalue_nets=3 algorithm.target_entropy=auto algorithm.share_param_critic=true\n```\n\n可用算法及其默认配置可在 `benchmarl\u002Fconf\u002Falgorithm` 中找到。它们会被加载到每个算法对应的数据类 [`AlgorithmConfig`](benchmarl\u002Falgorithms\u002Fcommon.py) 中，以定义其参数范围。这确保了只会加载预期的参数，并且类型正确。你也可以通过调用 `YourAlgorithmConfig.get_from_yaml()` 直接从脚本中加载这些配置。\n\n以下是使用 Hydra 覆盖算法超参数的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_algorithm.sh)，或直接从脚本中覆盖 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_algorithm.py)。\n\n### 任务\n\n在启动 BenchMARL 时，你可以覆盖任务的配置。然而，出于可重复性的考虑，不建议在基准测试中这样做，因为任务应具有固定的版本和参数。\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo task.n_agents=4\n```\n\n可用任务及其默认配置可在 `benchmarl\u002Fconf\u002Ftask` 中找到。它们会被加载到一个数据类 [`TaskConfig`](benchmarl\u002Fenvironments\u002Fcommon.py) 中，用于定义任务的范围。任务是以环境名称为前缀的枚举类型。例如，`VmasTask.NAVIGATION` 表示 VMAS 模拟器中的导航任务。这支持自动补全功能，并能一次性查看所有可用任务。你也可以通过调用 `YourEnvTask.TASK_NAME.get_from_yaml()` 直接从脚本中加载这些配置。\n\n以下是使用 Hydra 覆盖任务超参数的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_task.sh)，或直接从脚本中覆盖 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_task.py)。\n\n### 模型\n\n在启动 BenchMARL 时，你可以覆盖模型的配置。默认情况下，会加载一个具有默认配置的 MLP 模型。你可以按如下方式更改：\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo model=layers\u002Fmlp model=layers\u002Fmlp model.layer_class=\"torch.nn.Linear\" \"model.num_cells=[32,32]\" model.activation_class=\"torch.nn.ReLU\"\n```\n\n可用模型及其配置可在 `benchmarl\u002Fconf\u002Fmodel\u002Flayers` 中找到。它们会被加载到一个数据类 [`ModelConfig`](benchmarl\u002Fmodels\u002Fcommon.py) 中，用于定义模型的参数范围。你也可以通过调用 `YourModelConfig.get_from_yaml()` 直接从脚本中加载这些配置。\n\n以下是使用 Hydra 覆盖模型超参数的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_model.sh)，或直接从脚本中覆盖 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_model.py)。\n\n#### 序列模型\n你可以将多个层组合成一个序列模型。可用层的名称位于 `benchmarl\u002Fconf\u002Fmodel\u002Flayers` 文件夹中。\n\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo model=sequence \"model.intermediate_sizes=[256]\" \"model\u002Flayers@model.layers.l1=mlp\" \"model\u002Flayers@model.layers.l2=mlp\" \"+model\u002Flayers@model.layers.l3=mlp\" \"model.layers.l3.num_cells=[3]\"\n```\n\n使用 `\"+model\u002Flayers@model.layers.l3=mlp\"` 添加一层。\n\n使用 `\"~model.layers.l2\"` 移除一层。\n\n使用 `\"model.layers.l1.num_cells=[3]\"` 配置某一层。\n\n以下是使用 Hydra 创建序列模型的示例 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_sequence_model.sh)，或直接从脚本中创建 [![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fconfiguring\u002Fconfiguring_sequence_model.py)。\n\n## 功能\n\nBenchMARL 具有以下几项功能：\n- 包含集成和训练测试流程的测试 CI，适用于所有模拟器和算法。\n- 集成到官方 TorchRL 生态系统中，提供专门的支持。\n- 可以为不同的智能体群体使用不同的算法和模型（参见 [`examples\u002Fensemble`](examples\u002Fensemble)）。\n\n### 日志记录\n\nBenchMARL 兼容 [TorchRL 日志记录器](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Frl\u002Ftree\u002Fmain\u002Ftorchrl\u002Frecord\u002Floggers)。可以在实验配置文件 (`benchmarl\u002Fconf\u002Fexperiment\u002Fbase_experiment.yaml`) 中提供日志记录器名称列表。可用选项包括：`wandb`、`csv`、`mflow`、`tensorboard`，以及 TorchRL 中提供的其他任何选项。你可以在 YAML 配置文件或脚本参数中指定日志记录器，例如：\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance \"experiment.loggers=[wandb]\"\n```\n\n`wandb` 日志记录器与实验恢复完全兼容，能够自动恢复已加载实验的运行。\n\n### 检查点\n\n实验可以每隔 `experiment.checkpoint_interval` 个收集到的帧进行一次检查点保存。\n实验会使用一个用于日志记录和检查点保存的输出文件夹，该文件夹可以在 `experiment.save_folder` 中指定。\n如果未指定，\n默认将使用 Hydra 的输出文件夹（如果使用 Hydra）或当前脚本启动的目录。\n输出文件夹中会为每个实验创建一个以实验名称命名的子文件夹，\n其检查点文件将存储在该实验文件夹内的 `\"checkpoints\"` 文件夹中。\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo experiment.max_n_iters=3 experiment.on_policy_collected_frames_per_batch=100 experiment.checkpoint_interval=100\n```\n\n要从检查点加载模型，只需将检查点文件的绝对路径传递给 `experiment.restore_file` 即可。\n```bash\npython benchmarl\u002Frun.py task=vmas\u002Fbalance algorithm=mappo experiment.max_n_iters=6 experiment.on_policy_collected_frames_per_batch=100 experiment.restore_file=\"\u002Fhydra\u002Fexperiment\u002Ffolder\u002Fcheckpoint\u002Fcheckpoint_300.pt\"\n```\n以下是修改配置时的 Python 示例：\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fcheckpointing\u002Freload_experiment.py)\n以及保持配置不变的示例：\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fcheckpointing\u002Fresume_experiment.py)。\n\n此外，还可以直接通过文件名来**恢复**和**评估** Hydra 实验：\n```bash\npython benchmarl\u002Fevaluate.py ..\u002Foutputs\u002F2024-09-09\u002F20-39-31\u002Fmappo_balance_mlp__cd977b69_24_09_09-20_39_31\u002Fcheckpoints\u002Fcheckpoint_100.pt\n```\n```bash\npython benchmarl\u002Fresume.py ..\u002Foutputs\u002F2024-09-09\u002F20-39-31\u002Fmappo_balance_mlp__cd977b69_24_09_09-20_39_31\u002Fcheckpoints\u002Fcheckpoint_100.pt\n```\n\n### 回调函数\n\n实验可以选择性地接受一个 [`Callback`](benchmarl\u002Fexperiment\u002Fcallback.py) 列表，这些回调对象包含多个方法，\n例如 `on_batch_collected`、`on_train_end` 和 `on_evaluation_end`，可用于监控训练过程中的各项指标。\n\n[![示例](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FExample-blue.svg)](examples\u002Fcallback\u002Fcustom_callback.py)\n\n\n## 引用 BenchMARL\n\n如果您在研究中使用了 BenchMARL，请使用以下 BibTeX 条目：\n\n```BibTeX\n@article{bettini2024benchmarl,\n  author  = {Matteo Bettini and Amanda Prorok and Vincent Moens},\n  title   = {BenchMARL: 多智能体强化学习基准测试},\n  journal = {机器学习研究期刊},\n  year    = {2024},\n  volume  = {25},\n  number  = {217},\n  pages   = {1--10},\n  url     = {http:\u002F\u002Fjmlr.org\u002Fpapers\u002Fv25\u002F25-217.html}\n}\n```\n\n## 许可证\nBenchMARL 采用 MIT 许可证授权。详情请参阅 [LICENSE](LICENSE) 文件。","# BenchMARL 快速上手指南\n\nBenchMARL 是一个基于 TorchRL 构建的多智能体强化学习（MARL）训练库，旨在提供标准化的接口，以便在不同算法和环境之间进行公平的比较和基准测试。它支持灵活的配置（Hydra）和强大的数据报告功能。\n\n## 环境准备\n\n在开始之前，请确保您的系统满足以下要求：\n\n*   **操作系统**: Linux, macOS 或 Windows\n*   **Python 版本**: 3.8, 3.9, 3.10 或 3.11\n*   **前置依赖**: 建议先安装好 PyTorch。\n\n> **国内加速提示**：\n> 建议使用国内镜像源加速 Python 包的安装。例如使用清华源：\n> `pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple \u003Cpackage_name>`\n\n## 安装步骤\n\n### 1. 安装后端依赖 (TorchRL)\nBenchMARL 依赖 TorchRL 作为后端。\n\n```bash\npip install torchrl\n```\n\n### 2. 安装 BenchMARL\n您可以直接通过 PyPI 安装，或者克隆源码以便修改配置和脚本。\n\n**方式一：直接安装（推荐）**\n```bash\npip install benchmarl\n```\n\n**方式二：源码安装（便于开发）**\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL.git\npip install -e BenchMARL\n```\n\n### 3. 安装环境依赖（可选）\nBenchMARL 支持多种多智能体环境，您可以根据需要单独安装：\n\n*   **VMAS** (向量多智能体模拟器):\n    ```bash\n    pip install vmas\n    ```\n*   **PettingZoo**:\n    ```bash\n    pip install \"pettingzoo[all]\"\n    ```\n*   **MeltingPot**:\n    ```bash\n    pip install dm-meltingpot\n    ```\n*   **MAgent2**:\n    ```bash\n    pip install git+https:\u002F\u002Fgithub.com\u002FFarama-Foundation\u002FMAgent2\n    ```\n*   **SMACv2**: 请参考其官方仓库说明进行安装。\n\n## 基本使用\n\nBenchMARL 的核心设计理念是通过一行命令即可启动实验。默认配置位于 `benchmarl\u002Fconf`，可通过命令行参数覆盖。\n\n### 命令行运行单个实验\n以下命令将使用 **MAPPO** 算法在 **VMAS** 的 **balance** 任务上运行训练：\n\n```bash\npython benchmarl\u002Frun.py algorithm=mappo task=vmas\u002Fbalance\n```\n\n### 命令行运行基准测试（多实验并行）\n利用 Hydra 的功能，您可以一次性运行多个算法、任务和随机种子的组合：\n\n```bash\npython benchmarl\u002Frun.py -m algorithm=mappo,qmix,masac task=vmas\u002Fbalance,vmas\u002Fsampling seed=0,1\n```\n*注：默认执行方式为串行，也可配置为并行或提交到 Slurm 集群运行。*\n\n### Python 脚本运行\n您也可以在 Python 代码中加载并运行实验或基准测试：\n\n**运行单个实验：**\n```python\nfrom benchmarl.experiment import Experiment\nfrom benchmarl.tasks import VmasTask\nfrom benchmarl.algorithms import MappoConfig\nfrom benchmarl.models import MlpConfig\nfrom benchmarl.experiment.common import ExperimentConfig\n\nexperiment = Experiment(\n    task=VmasTask.BALANCE.get_from_yaml(),\n    algorithm_config=MappoConfig.get_from_yaml(),\n    model_config=MlpConfig.get_from_yaml(),\n    critic_model_config=MlpConfig.get_from_yaml(),\n    seed=0,\n    config=ExperimentConfig.get_from_yaml(),\n)\nexperiment.run()\n```\n\n**运行基准测试：**\n```python\nfrom benchmarl.experiment import Benchmark\nfrom benchmarl.algorithms import MappoConfig, QmixConfig, MasacConfig\nfrom benchmarl.tasks import VmasTask\nfrom benchmarl.models import MlpConfig\nfrom benchmarl.experiment.common import ExperimentConfig\n\nbenchmark = Benchmark(\n    algorithm_configs=[\n        MappoConfig.get_from_yaml(),\n        QmixConfig.get_from_yaml(),\n        MasacConfig.get_from_yaml(),\n    ],\n    tasks=[\n        VmasTask.BALANCE.get_from_yaml(),\n        VmasTask.SAMPLING.get_from_yaml(),\n    ],\n    seeds={0, 1},\n    experiment_config=ExperimentConfig.get_from_yaml(),\n    model_config=MlpConfig.get_from_yaml(),\n    critic_model_config=MlpConfig.get_from_yaml(),\n)\nbenchmark.run_sequential()\n```","某自动驾驶实验室的研究团队正在评估多种多智能体强化学习（MARL）算法，以优化十字路口车辆协同通行的效率。\n\n### 没有 BenchMARL 时\n- **环境搭建繁琐**：研究人员需为每种算法（如 MAPPO、QMIX）手动编写不同的数据接口和环境适配代码，耗时数周且容易出错。\n- **对比难以公平**：由于缺乏统一的超参数配置标准和随机种子管理，不同算法的实验结果受实现细节干扰大，无法判断性能差异是源于算法本身还是代码实现。\n- **复现成本极高**：团队成员间共享实验配置困难，新成员难以快速复现他人的基准测试结果，导致大量时间浪费在调试环境而非改进算法上。\n- **数据分析分散**：实验日志格式不统一，绘制对比图表需手动清洗数据，难以生成符合学术标准的统计分析报告。\n\n### 使用 BenchMARL 后\n- **一键切换实验**：通过简单的命令行（如 `algorithm=mappo task=vmas\u002Fbalance`），即可在统一架构下瞬间切换算法与任务，无需重写任何底层代码。\n- **标准化公平竞技**：BenchMARL 内置了标准化的配置模板和统计评估协议，确保所有算法在完全一致的环境下运行，性能对比真实可信。\n- **无缝复现与协作**：基于 Hydra 的模块化配置让实验参数可完整保存和分享，团队成员能轻松复现彼此工作，大幅降低沟通与调试成本。\n- **自动化专业报告**：工具自动兼容 marl-eval 标准，直接生成具有统计显著性的高质量对比图表和日志，让论文撰写和数据汇报事半功倍。\n\nBenchMARL 将研究人员从重复的“造轮子”工作中解放出来，使其能专注于核心算法创新与多智能体系统的本质探索。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_BenchMARL_fe2009b7.png","facebookresearch","Meta Research","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Ffacebookresearch_449342bd.png","",null,"https:\u002F\u002Fopensource.fb.com","https:\u002F\u002Fgithub.com\u002Ffacebookresearch",[81,85],{"name":82,"color":83,"percentage":84},"Python","#3572A5",98.6,{"name":86,"color":87,"percentage":88},"Jupyter Notebook","#DA5B0B",1.4,607,124,"2026-04-19T13:39:50","MIT","Linux","未说明（基于 PyTorch\u002FTorchRL，通常支持 CUDA GPU 加速，但非强制要求）","未说明",{"notes":97,"python":98,"dependencies":99},"该工具是用于多智能体强化学习（MARL）的基准测试库。核心后端为 TorchRL。所有环境依赖（如 VMAS, PettingZoo, MeltingPot, MAgent2, SMACv2）均为可选，需根据具体任务单独安装。其中 SMACv2 在 Linux 上安装有特定脚本说明，暗示主要支持 Linux 环境。配置管理使用 Hydra，支持串行、并行及 Slurm 集群运行。","3.8, 3.9, 3.10, 3.11",[100,101,102,103,104,105,106,107,108],"torchrl","hydra-core","vmas","pettingzoo","dm-meltingpot","MAgent2","smacv2","marl-eval","wandb",[14,13,110],"其他",[112,113,114,115,116,117,118,119,120,121],"benchmark","machine-learning","marl","multi-agent","multi-agent-reinforcement-learning","pytorch","reinforcement-learning","rl","robotics","torch","2026-03-27T02:49:30.150509","2026-04-20T12:53:04.792083",[125,130,135,140,145,150,155],{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},44814,"如何启用并行评估以加速非向量化环境的测试？","目前评估阶段默认是顺序执行的。若要解决此问题，需要确保配置正确。根据社区反馈，在 PettingZoo 环境中，可以通过修改配置文件（如 `benchmarl\u002Fenvironments\u002Fpettingzoo\u002Fcommon.py`）中的配置复制逻辑来解决部分兼容性问题，使 `SyncDataCollector` 能够正常工作。维护者表示未来会改进此功能，目前建议减少评估频率或评估次数作为临时方案。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F143",{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},44815,"为什么修改任务枚举（Enum）的参数会影响其他同名任务实例？","这是由于枚举和继承机制导致的全局状态共享问题。当用户尝试为同一个任务（如 `VmasTask.BALL_TRAJECTORY`）设置不同参数时，后续修改会覆盖之前的设置。该问题已在 PR #175 中修复，建议更新到最新版本以获取正确的独立任务配置行为。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F173",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},44816,"按照文档设置了参数，为什么 BenchMARL 没有自动生成视频？","除了需要在配置文件中设置视频相关参数（参考 `base_experiment.yaml` 第 78-80 行）并将 logger 设置为 `wandb` 外，还需要调整 `evaluation_interval` 的值。维护者建议将 `evaluation_interval` 设置为一个较大的数值（例如 6000），以确保在评估间隔内触发视频录制逻辑。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F106",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},44817,"运行时遇到 'No module named pettingzoo.utils.all_modules' 或 'multi_agent_ale_py' 错误怎么办？","这通常是由于 PettingZoo 版本过旧或依赖构建失败导致的。解决方案是安装最新版本的 PettingZoo（`pip install -U pettingzoo`）。维护者已提交修复补丁至 TorchRL，确保使用最新的依赖包通常能解决此模块缺失问题。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F41",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},44818,"在使用 LSTM 或 GRU 模型训练时出现错误，是否支持修改网络结构？","目前在训练过程中动态修改网络模型（特别是涉及 LSTM 和 GRU 等循环神经网络时）会导致错误。维护者指出这是已知限制（参考 Issue #121），并计划在即将发布的新版本中修复此问题。暂时建议避免在训练中动态更改此类模型结构，或使用标准的 MLP 模型。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F138",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},44819,"运行命令时报错 'No module named hydra' 如何解决？","该错误通常是因为本地代码版本与安装的依赖不匹配。请检查并确保所有的 BenchMARL 文件都来自最新的 main 分支版本。如果是通过源码安装，请拉取最新代码并重新安装；如果是 pip 安装，请尝试升级到最新版本。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F128",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},44820,"如何在不使用 Hydra 的情况下保存和加载实验配置？","目前非 Hydra 启动的实验默认不会自动保存完整的重构配置（如 algorithm_config, model_config 等），因此无法直接通过 `Experiment.load_from_directory` 完美还原所有参数而不手动指定。虽然日志目录（如 wandb 文件夹）中可能包含 `config.yaml`，但这主要用于记录而非重建实验对象。目前的变通方法是手动记录构造实验所需的参数，或者等待官方后续增加针对非 Hydra 模式的完整配置序列化支持。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F178",[161,166,171,176,181,186,191,196,201,206,211,215,220],{"id":162,"version":163,"summary_zh":164,"released_at":165},353864,"1.5.2","次要版本\n\n与 TorchRL 0.11 搭配使用","2026-02-07T16:01:05",{"id":167,"version":168,"summary_zh":169,"released_at":170},353865,"1.5.1","# 优化了重新加载功能，增加了更多配置选项、新的回调函数、多维 MLP 输入，并修复了各类 bug\n\n**BenchMARL 发布版本与 TorchRL 0.10 搭配使用**\n\n## 功能特性\n\n* [新特性] 由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F201 中实现，公开 Wandb 的更多参数\n* [新特性] 由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F228 中实现，支持在重新加载时覆盖实验配置\n* [新特性] 由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F212 中实现，公开 Adam 优化器的更多参数\n* [新特性] 由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F233 中实现，支持在检查点中排除缓冲区\n* [新特性] 由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F211 中实现，使 `Mlp` 能够处理多维特征\n* [新特性] 新增用于 `state_dict` 的 `Callback` 方法，由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F237 中实现\n\n## 问题修复\n\n* [BugFix] 切换到正确的设备，由 @Xmaster6y 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F214 中实现\n* [修复] CI 和依赖项问题，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F225 中完成\n* [BugFix] GNN 中的 RelVel 问题，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F240 中修复\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fcompare\u002F1.5.0...1.5.1","2025-11-10T12:21:59",{"id":172,"version":173,"summary_zh":174,"released_at":175},353866,"1.5.0","# 离散MASAC重写、评估中的静态初始化、实验重新加载、教程、任务样式重构等更多内容\n\n**BenchMARL发布，与TorchRL 0.8配套**\n\n**BC-breaking变更**：\n- 由@matteobettini在https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F175中实现，将Task枚举与任务类解耦。此前，任务既是枚举，又包含了环境创建的逻辑；现在这两者被分离。`Task`仅包含可用任务的枚举，而`TaskClass`则负责环境的创建逻辑。这一改动旨在解决https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F173的问题。\n\n\n## 【教程】创建VMAS场景并进行训练 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F172\n\n[![在Colab中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fproroklab\u002FVectorizedMultiAgentSimulator\u002Fblob\u002Fmain\u002Fnotebooks\u002FSimulation_and_training_in_VMAS_and_BenchMARL.ipynb) &ensp;  **在[BenchMARL](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL)中创建VMAS场景并对其进行训练**。我们将构建一个场景：多个具有不同本体特征的机器人需要在避开彼此及障碍物的同时到达各自的目标，并使用MAPPO算法和MLP\u002FGNN策略对其进行训练。\n\n## 【功能】无需重新传递配置即可重新加载实验 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F179\n\n现在只需传递检查点文件，即可通过多种方式重新加载实验。\nhttps:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fconcepts\u002Ffeatures.html#reloading\n\n## 【功能，BC-breaking】解耦Task枚举与任务类 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F175\n\n此前，任务既是枚举，也包含了环境创建的逻辑；如今，这两者被分离。`Task`仅包含可用任务的枚举，而`TaskClass`则负责环境的创建逻辑。这一改动旨在解决https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fissues\u002F173的问题。\n\n示例：\n\n```python\nVmasTask.BALANCE # Task\nVmasTask.BALANCE.get_from_yaml(path=None) # TaskClass，可传入自定义的yaml文件路径\nVmasTask.BALANCE.get_task(config=None)  # TaskClass，若不希望从yaml加载，可传入自定义配置\nassert  VmasTask.BALANCE.get_from_yaml()  == VmasTask.BALANCE.get_task(config=None)\n``` \n\n## 【功能】静态评估 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F185\n\n通过设置`experiment.evaluation_static=True`，评估环境将在整个训练过程以及每次运行之间保持一致。\n\n## 【功能】离散MASAC重写 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F192\n\nhttps:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F192提供了非常详细的说明。\n\n简而言之，请看新的离散MASAC实现相较于旧版在VMAS平衡任务上的表现有多出色：\n\n![W B Chart 15_04_2025, 10_19_47](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F85297a8c-69eb-45dd-97c7-5c743276cc5d)\n\n## 有什么","2025-05-01T12:59:53",{"id":177,"version":178,"summary_zh":179,"released_at":180},353867,"1.4.0","**BenchMARL 发布版本，配套 TorchRL 0.7.0**\n\n包含大量新特性与多项 Bug 修复！\n\n## 新环境：MAgent2\n\n特别感谢 @JoseLuisC99 的首次贡献及在此过程中的帮助。\n\n* [环境] MAgent2，由 @JoseLuisC99 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F137 中实现。\n\n## 非向量化环境的并行采集\n\n得益于 @gliese876b 的大力协助，我们引入了使用 TorchRL `ParallelEnv` 对非向量化环境进行并行采集的功能。\n\n详情请参阅：\n\n* [特性] 并行采集，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F152 中实现。\n\n## 优先级重放缓冲区\n\n再次感谢 @gliese876b 的巨大贡献。\n\n* [特性] 优先级重放缓冲区，由 @gliese876b 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F160 中实现。\n\n## 集成模型与算法\n\n基于 @karthiks1701 的精彩需求，我们新增了为不同智能体群体使用不同模型和算法的可能性。\n\n详情请见：https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fconcepts\u002Ffeatures.html#ensemble-models-and-algorithms\n\n* [特性] 集成模型与算法（不同智能体群体可选择不同配置），由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F159 中实现。\n\n## 重放缓冲区的磁盘存储\n\n同样得益于 @JoseLuisC99 的建议，我们增加了将缓冲区存储到磁盘的功能。\n\n* [特性] 重放缓冲区的磁盘存储，由 @JoseLuisC99 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F155 中实现。\n\n## VMAS 足球环境\n\n在 BenchMARL 中尽情体验全新 VMAS 足球环境的强大功能。\n\n更多信息请参阅：https:\u002F\u002Fgithub.com\u002Fproroklab\u002FVectorizedMultiAgentSimulator\u002Freleases\u002Ftag\u002F1.5.0\n\n![football_vmas-ezgif com-optimize](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F2bff7aef-6fac-4865-bd2a-be385a8cf740)\n\n## 变更内容\n* [错误] 修复不可用组合的错误，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F142 中完成。\n* [Bug 修复] 修复 MeltingPot 缓冲区转换问题，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F148 中完成。\n* [Bug 修复] 修正 VMAS 参数名称，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F149 中完成。\n* [环境] MAgent2，由 @JoseLuisC99 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F137 中实现。\n* [文档] MAgent 相关文档更新，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F150 中完成。\n* [小幅调整] 依赖项更新，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F151 中完成。\n* [特性] 并行采集功能，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F152 中实现。\n* [特性] 优先级重放缓冲区，由 @gliese876b 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F160 中实现。\n* [文档] 修正 MAgent 文档中的错别字，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F162 中完成。\n* [特性] 集成模型与算法（不同智能体群体可选择不同配置），由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch","2025-02-06T10:57:09",{"id":182,"version":183,"summary_zh":184,"released_at":185},353868,"1.3.0","# BenchMARL 中的内存网络\n\n**BenchMARL 与 TorchRL 0.6.0 一同发布**\n\n## 亮点\n\n### BenchMARL 中的 RNN\n\n我们现在支持将 RNN 作为模型使用！\n\n我们已实现并将 [GRU](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fgenerated\u002Fbenchmarl.models.Gru.html#benchmarl.models.Gru) 和 [LSTM](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fgenerated\u002Fbenchmarl.models.Lstm.html) 添加到库中。\n\n这些模型既可用于策略网络，也可用于评论家网络（既可以基于本地智能体输入，也可以基于全局集中式输入）。它们还与任何参数共享方式兼容。\n\n我们在 [repeat_previous](https:\u002F\u002Fpopgym.readthedocs.io\u002Fen\u002Flatest\u002Fautoapi\u002Fpopgym\u002Fenvs\u002Frepeat_previous\u002Findex.html) 的多智能体版本上对 GRU 进行了基准测试，结果表明它能够解决该任务，而单纯的 MLP 则无法完成。\n![W B Chart 01_08_2024, 09_17_59](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F9d35c36b-2d93-49a4-9b9e-19c2cfa4262c)\n\n与传统的 RNN 不同，我们不进行时间填充。相反，我们在序列中按时间步进行循环，并读取“is_init”标志。这种方法虽然速度较慢，但能带来更好的效果。\n\n另外，像往常一样，您还可以根据需要将它们与其他任意模型（如 CNN、GNN 等）串联使用。\n\n## 简化模型重载与评估\n\n我们添加了一些实用工具，详情请参见 [这里](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fconcepts\u002Ffeatures.html#evaluating)。\n\n具体来说，我们新增了 `experiment.evaluate()` 方法，以及一些有用的命令行工具，例如 `benchmarl\u002Fevaluate.py` 和 `benchmarl\u002Fresume.py`，只需提供检查点文件的路径即可。\n\n现在，您无需再次提供所有配置，即可从 Hydra 运行中重新加载模型；这些脚本会自动在 Hydra 文件夹中找到您之前使用的配置。\n\n## 更完善的剧集指标记录\n\nBenchMARL 现在会将全局任务完成标志置为真时视为剧集结束。因此，即使某些智能体提前完成任务，只要全局完成标志设置为 `all()`，剧集仍会被视为已完成。\n\n以下是剧集指标的计算方式概述：\n![epispde_reward compuation](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F1b07d48d-e385-43fb-be2c-c94e42cc21fa)\n\nBenchMARL 将关注全局的 `done` 标志（始终假定已设置），通常可以通过对各个智能体的 `done` 标志取 `any` 或 `all` 来计算。\n\n在所有情况下，全局完成标志都用于计算剧集奖励。\n\n我们会在三个不同层级上记录剧集奖励的最小值、平均值和最大值：\n- 智能体级别（默认关闭，可手动开启）\n- 组别级别，即组内智能体的平均值\n- 全局级别，即各组及组间的平均值\n\n## 变更内容\n* [BugFix] 修复带梯度的收集功能，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F114 中完成\n* [Refactor] 更新即将弃用的值，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F118 中完成\n* [Docs] 添加引用信息，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F119 中完成\n* [Model] GRU 及通用 RNN 兼容性","2024-10-25T15:55:48",{"id":187,"version":188,"summary_zh":189,"released_at":190},353869,"1.2.1","**BenchMARL 发布版本，配套 TorchRL 0.4.0**\n\n本次新版本带来了许多令人兴奋的更新！\n\n最重要的是，对 [GNN](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fgenerated\u002Fbenchmarl.models.Gnn.html#benchmarl.models.Gnn) 进行了重大改进，并新增了一个模型：[DeepSets](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fgenerated\u002Fbenchmarl.models.Deepsets.html#benchmarl.models.Deepsets)。\n\n![1718290825438](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F46be1372-e574-49c3-b773-f3d3a2e027e2)\n\n\n## 新特性\n* [特性] 允许在规格中使用多个观测键，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F82 和 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F83 中实现。\n* [特性] 缓冲设备管理，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F87 中实现。\n* [特性] 增加更多 VMAS 任务，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F88 中实现。\n* [特性] 简化 BenchMARL 的扩展流程，并改进扩展示例，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F89 中实现。\n* [示例] 使用梯度进行收集，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F77 中实现。\n* [特性] 允许在不同模型之间共享参数，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F95 中实现。\n* [特性] GNN 可根据位置动态构建拓扑结构，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F98 中实现。\n* [模型] DeepSets，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F96 中实现。\n* [特性] PPO 小批量优势计算，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F100 中实现。\n* [特性] `keep_checkpoints_num` 和 `checkpoint_at_end` 配置选项，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F102 中实现。\n* [特性] 在第一次迭代时就运行评估，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F108 中实现。\n* [特性] 迭代计时器包含评估时间，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F110 中实现。\n\n## 新贡献者\n* @mchoilab 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F105 中完成了首次贡献。\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fcompare\u002F1.2.0...1.2.1","2024-07-16T14:58:31",{"id":192,"version":193,"summary_zh":194,"released_at":195},353870,"1.2.0","**BenchMARL 与 TorchRL 0.4.0 同步发布**\n\nBenchMARL 现已扩展，新增来自 [Google DeepMind MeltingPot](https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmeltingpot) 的 49 个基于视觉的任务 🎉\n\n但不止于此！我们还引入了一种全新的 CNN 模型 🚀，该模型可用于智能体和评价网络中（完全兼容任何参数共享和集中化策略）。\n\n## 变更内容\n* [功能] 允许为观测和全局状态键使用任意名称，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F72 中实现\n* [模型] CNN 模型，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F74 中实现\n* [功能] 兼容多输入模型，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F73 中实现\n* [环境] MeltingPot 环境，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F75 中实现\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fcompare\u002F1.1.1...1.2.0","2024-04-26T11:04:48",{"id":197,"version":198,"summary_zh":199,"released_at":200},353871,"1.1.1","对齐 to torchrl 0.3.1\n\n## 变更内容\n* [CI] 修复 CI，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F65 中完成\n* [测试] 简化测试，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F66 中完成\n* [CI] 修复 CI，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F67 中完成\n* [发布] 1.1.1，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F69 中完成\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fcompare\u002F1.1.0...1.1.1","2024-03-04T10:05:16",{"id":202,"version":203,"summary_zh":204,"released_at":205},353872,"1.1.0","## 亮点\n- 新增 [GNN 模型](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fgenerated\u002Fbenchmarl.models.Gnn.html#benchmarl.models.Gnn)\n- 新增 [VMAS 场景和 VMAS MPE 场景](https:\u002F\u002Fbenchmarl.readthedocs.io\u002Fen\u002Flatest\u002Fgenerated\u002Fbenchmarl.environments.VmasTask.html#benchmarl.environments.VmasTask)\n- 多项错误修复及新增配置参数\n- BenchMARL 1.1.0 与 TorchRL 0.3.0 搭配使用\n\n## 变更内容\n* [模型] GNN，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F30 中实现\n* [文档] 引用信息，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F39 中添加\n* [错误修复] 修复离散 SAC，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F40 中完成\n* [任务] VMAS MPE（向量化），由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F42 中实现\n* [功能] 算法中可选的 Tanh 变换分布，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F45 中添加\n* [功能] 可选择在采样动作上还是在模式上进行评估，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F49 中实现\n* [错误修复] 使用正确类型以防止 multiwalker 初始化错误，由 @KaleabTessera 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F47 中完成\n* [CI] 修复代码覆盖率问题，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F51 中解决\n* [功能] 更多 VMAS 任务，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F48 中添加\n* [文档] 修复拼写错误，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F57 中完成\n* [错误修复] 重命名 PPO 参数，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F59 中完成\n* [文档] 修复拼写错误，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F60 中完成\n* [CI] 使用 TorchRL 夜间版本运行主测试，并为测试 TorchRL 稳定版设置单独的 CI 流程，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F53 中实现\n* [重构] 调整 PPO 参数名称，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F62 中完成\n* [版本管理] 1.1.0 版本，由 @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F61 中发布\n\n## 新贡献者\n* @KaleabTessera 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F47 中做出了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fcompare\u002F1.0.0...1.1.0","2024-02-02T14:34:15",{"id":207,"version":208,"summary_zh":209,"released_at":210},353873,"1.0.0","# BenchMARL 文档\n\nBenchMARL 文档现已在 [https:\u002F\u002Fbenchmarl.readthedocs.io\u002F](https:\u002F\u002Fbenchmarl.readthedocs.io\u002F) 上线。\n\n## 变更内容\n* [功能] @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F35 中添加了更多回调函数。\n* [文档] @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F36 中添加了视频演示的链接。\n* [修复] @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F37 中修复了任务加载模式的验证问题。\n* [文档] @matteobettini 在 https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fpull\u002F34 中完成了文档的构建。\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FBenchMARL\u002Fcompare\u002F0.0.4...1.0.0","2023-11-26T09:47:13",{"id":212,"version":213,"summary_zh":77,"released_at":214},353874,"0.0.4","2023-10-31T16:56:13",{"id":216,"version":217,"summary_zh":218,"released_at":219},353875,"0.0.3","- Added yaml configuration files to PyPi package\r\n- Addded possibility to access the experiment from the algorithm","2023-10-25T08:12:10",{"id":221,"version":222,"summary_zh":223,"released_at":224},353876,"0.0.2","First release","2023-10-16T14:23:27"]