【论文研读】MARLlib 的架构分析

【论文研读】MARLlib: A Scalable Multi-agent Reinforcement Learning Library


和尚念经

多智能体强化学习框架研究。
多智能体强化学习库。
多智能体强化学习算法实现。
多智能体强化学习环境的统一化,标准化。
多智能体强化学习算法解析。
多智能体强化学习 算法性能比较。


3. MARLlib Architecture

在本节中,我们将主要阐述MARLlib如何解决两个主要挑战,即MARL算法的多样性和环境接口的不一致性。为了克服这些挑战,我们开发了一个新的代理级分布式数据流、一个统一的代理环境接口和一个有效的策略映射机制。其他特性,如框架可扩展性、特定于任务的技巧和文档可以在附录中找到。

3.1 agent级的分布式数据流,方便算法的统一

集中式训练分散执行(CTDE)是解决多智能体问题的常用框架,其中智能体维护自己的策略进行独立执行和优化,在训练阶段利用集中式信息协调智能体的更新方向。在这个框架下,现有的库将整个学习管道分为两个阶段:数据采样和模型优化。在模型优化阶段,数据采样阶段的所有数据都是可用的,使训练集中。然而,这样,选择合适的数据和使用这些数据来优化模型是在同一阶段耦合的。因此,扩展算法以适应其他任务模式(例如合作和竞争)变得更具挑战性,并且需要重新设计整个学习管道。

MARLlib 通过将原始分组数据流等效地分解为代理级分布式数据流来解决这个问题。本质上,在样本采集和优化过程中,它将多智能体训练中的每个智能体作为一个独立的单元,但在后处理阶段,智能体之间共享集中的信息(后处理是在模型优化之前处理采样数据的RLlib API;我们丰富它以适应不同的算法),以确保等价。在后处理中,代理与其他代理共享观察数据(从环境中采样的数据)和预测数据(策略或Q值所采取的操作)。所有代理都维护各自的数据缓冲区,其中存储了它们的经验和其他代理共享的必要信息。进入学习阶段后,agent之间不需要信息共享,可以独立进行自我优化。通过这种方式,我们将原始组合的数据流分发给代理,并将数据共享和优化完全解耦,从而允许相同的实现解决多种模式的任务。

如何实现解耦的呢?
在后处理阶段,处理采样数据,用代理级分布式数据流的方式。具体而言,所有代理都维护各自的数据缓冲区,其中存储了它们的经验和其他代理共享的必要信息。

此外,虽然所有基于ctde的算法通常共享相似的代理级数据流,但它们仍然具有独特的数据处理逻辑。受EPyMARL[26]的启发,我们进一步将算法分为独立学习、集中批评和价值分解三类,以实现模块共享和可扩展性。总结如下(精华!!!):

  1. 独立学习算法让智能体独立学习;
  2. 集中式评价算法利用共享信息对评价者进行优化,进而指导分散行为者的优化;
  3. 价值分解算法学习一个联合的价值函数,并将其分解成单个的价值函数,然后代理在执行过程中使用它来选择动作。

根据它们的算法特性,我们在后处理阶段实现了合适的数据共享策略,如下面的图2所示。
在这里插入图片描述
图2: MARLlib的代理级分布式数据流。

观察数据是指从环境中采样的数据,例如奖励或全局状态。
预测数据是指由代理生成的数据,例如Q值或选择的操作。
后处理是指数据共享过程。每个代理维护自己的学习管道,其中收集的数据用于优化代理本身的策略。因此,数据流是代理级分布的。
数据流有独立学习、集中批判和价值分解三种类型[26],根据它们的中心信息利用方式进行了区分。从单智能体的角度来看,独立学习算法(如IQL[36])本质上是分布式数据流,跳过了信息共享过程,如(a)所示。对于集中式批评算法(如MAPPO[43]),在进入训练阶段之前,在后处理函数中收集并共享中心信息,包括观测数据和预测数据,以确保分布式数据流。如(b)所示。在值分解类别(如FACMAC[27])中,所有agent的预测数据必须是共享的,而观测数据是可选的,这取决于算法的混合功能。相应的数据流如(c)所示。

3.2 Agent-environment 交互的通用接口

在许多RL库中,通常采用OpenAI Gym的观察、奖励、完成和信息接口。然而,这个标准化的接口不能简单地扩展到MARL。在MARL中,多个代理共存,每个代理都有自己的经验数据。额外的信息有时是可用的,比如动作掩码和全局状态。根据任务模式的不同,奖励可以是标量或字典。此外,代理可能无法与环境同步交互,这构成了另一个挑战。为了解决这些问题,MARLlib从两个方面统一了多代理接口

首先,MARLlib统一了接口数据结构。

MARLlib提出了一个新的接口,遵循Gym API, obs, reward, done, info,在实践中兼容不同的多智能体任务设置,涵盖数据结构和任务模式。

如图(3)所示,在MARLlib中,从环境返回的观测值是一个带有三个键的字典:observation、action_mask、global_state。该设计满足大多数情况,并与RLlib的数据处理逻辑兼容。其他与观测相关的信息包含在info中。

Reward是一个以agent id为键的字典。为了适应合作任务,将标量团队奖励转换为字典结构,复制代理数次。Done是一个包含单个键"all"的字典,它仅在所有代理终止时为真。

其次,MARLlib支持同步和异步代理-环境交互

在MARLlib之前的现有MARL库,如PyMARL,不支持异步采样,主要关注同步情况。然而,异步代理-环境交互在Go和Hanabi等多代理任务中很常见。
由于RLlib灵活的数据收集机制,MARLlib支持同步和异步代理与环境的交互:使用代理id收集和存储数据。只有当我们接收到完成的终端信号时,才会返回所有数据供后续使用。这个采样过程如图3所示。

在这里插入图片描述

3.3 高效的策略映射

在多智能体场景下,适当的参数共享策略可以提高算法的性能。尽管它很重要,但大多数现有工作对共享模式的支持不足,而且实现是重复的——MAPPO基准重写了共享和分离设置的所有内容,而EPyMARL重复模型结构以同时支持这两种设置。

在MARLlib中,我们通过实现RLlib的策略映射API,支持共享(所有代理共享参数)、分离(没有代理共享参数)和组(同一组内的代理共享参数)参数共享。直观地说,它将代理的虚拟策略映射到实际维护、使用和优化的物理策略。映射到相同物理策略的智能体共享参数。由于策略映射对代理是透明的,因此它们实际上对数据进行采样并使用物理策略进行优化。因此,可以在不影响算法实现的情况下实现不同类型的参数共享。在实践中,我们只需要为每个环境维护一个包含所有相关信息的策略映射字典,以支持多种共享模式。通过修改策略映射API以满足需求,可以实现更自定义的参数共享策略。

怎么理解策略映射呢?
不同的智能体采取不同的策略,映射需要考虑某个智能体属于哪一类的人,能量有多大,从而给它分配合适的策略。

4. Python 包的调用举例

API 使用举例分析

惊叹!实现一个多智能体的模型需要的代码如此的精简!

5. 管道控制

MARLlib通过允许用户自定义配置文件提供了一个简化的训练管道。这些文件是完全解耦的,位置如 图4 所示。

为了在修改配置时提供更大的灵活性,MARLlib支持三种优先级,从低到高依次列出:1)基于文件的配置,包括所有默认的*。yaml文件。2)基于api的自定义配置,允许用户指定自己的偏好,如{“core_arch”:“mlp”,“encode_layer”:“128-256”}。3)命令行参数,如$python mappo.py -algo_args.num_sgd_iter =6。
如果在多个级别上设置一个参数,则较高级别的配置优先于较低级别的配置。通过提供多个级别的配置,MARLlib允许用户定制他们的培训管道,以满足他们的特定需求,促进更高效和有效的训练过程。

在这里插入图片描述
图4:MARLlib配置器包含四个配置文件,用户可以自定义环境、算法、模型和基本的RLlib设置。

6. 文档

文档分为了四个大块。

MARLlib Handbook, Navigate From RL to MARL, Algorithm Documentation, and Resources.

文档,项目链接如下:
https://github.com/Replicable-MARL/MARLlib

说明:

  • 阴影标注了 top 2
  • SMAC的环境下,和 EPyMARL 做了对比。
    在这里插入图片描述
    表 2 : 对于不同的合作任务,不同的算法的不同表现情况。

7. 实验

在本节中,我们评估了SMAC[33]、MPE[22]、GRF[19]、MAMuJoCo[27]和管理[46]等5个MARL测试平台23个任务上的17种算法,选择这些算法是因为它们在MARL研究中的受欢迎程度,以及它们在任务模式、观察形状、附加信息、动作空间、稀疏或密集奖励、同质或异构代理类型方面的多样性。我们报告了四种随机种子下实验的平均收益,总共有一千多个实验。实验结果如表2和图5所示。基于这些结果,我们证实了实施的质量,并提供了深刻的分析。
在这里插入图片描述
图5:在MAgent (a-d)和MPE (e-h)中8种混合场景(agent分组竞争)的收益曲线。不同风格的曲线代表不同的agent组。在学习过程中,竞争群体的收益曲线呈现动态平衡,平衡点取决于算法和任务。放大以获得更好的可视化。

7.1 实现的质量的分析

贡献1 收敛快速

为了证明MARLlib的正确性,我们在保持重要超参数不变的情况下,将MARLlib在SMAC上实现的性能与EPyMARL报告的性能进行了比较。EPyMARL的结果在策略上算法上消耗4000万步,在策略外算法上消耗400万步。MARLlib分别只消耗它们的一半,因为我们发现它足以使训练收敛。即使训练步骤更少,我们也能匹配EPyMARL报告的大部分性能,如表2所示。

贡献2 奖励高(return 高)

(注意,作者用百分比的方式掩盖自己对比实验的数量的少,哈哈哈)
对于所有可用于比较的性能对,MARLlib在63%的性能对上获得了相似的结果(总奖励差异小于1.0),在25%的性能对上获得了优异的结果,而在其余12%的性能对上出现了较差的结果。由于每种算法都表现出预期的性能、通用性和稳定性,因此我们不依赖于特定于任务的技巧。这些实验结果证实了实现的正确性。

贡献3 更多的算法实现

在这个表中,我们还首次报告了5种算法在SMAC和MPE上的性能,12种算法在GRF上的性能,10种算法在MAMuJoCo上的性能,供社区参考。

7.2 性能表现的分析

经验表明,在强壮的强化学习算法的基础上开发单智能体强化学习算法是明智的选择。例如,PPO主要用于单代理RL,因为它比 vanilla PG 和A2C具有更好的经验性能。这种优势影响了多智能体的性能——MAPPO和VDPPO在大多数情况下都超过了MAA2C和VDA2C。

另一个证实这一结论的证据是值迭代方法的鲁棒性。与策略梯度方法相比,基于值迭代的算法具有较低的超参数敏感性和更高的样本效率。多智能体版本的Q学习(如IQL、VDN和QMIX)也继承了这一优势,并在大多数场景(如SMAC和MPE)中显示出强大的性能。

启发:
1. 要使用值迭代的方法,鲁棒性好。
2. 单智能体的开发要使用比较强的RL算法。比如PPO就比A2C要好。

其他

表2中的算法根据它们在具有相似任务模式的各种协作任务上的性能进行分类。根据我们的分析,我们观察到某些类型的算法在特定任务上表现出更好的性能。例如,当不需要中心信息时,独立学习算法是有效的,而集中式批评算法更适合于学习多种但协调的行为。

相比之下,价值分解算法在大多数协作基准测试中占主导地位。对于具有多种行为的合作任务,MAPPO和 HAPPO已成为强有力的基线。有关这些算法在协作任务上的性能的更详细分析,请参阅附录B.1。

除了合作任务,我们还评估了非合作任务中的算法,特别是竞争和混合任务。然而,在这些任务中的基准测试算法提出了一些挑战,因为代理可以表现出合作和竞争行为。我们将在附录B.2中更详细地讨论这些挑战。

附录

B.1 合作任务上算法的有效性的分析

当中心信息不是必需的时候,独立学习是有效的。虽然智能体之间的协调对于MARL算法至关重要,而独立学习在理论上是次优的,但已有的工作[10]指出,独立学习可以超越其他算法。在表2中,我们发现在simple_spread和pass_and_shoot等场景中,独立学习算法比集中式批评算法更好,在这些场景中,智能体的行为类似,中心信息对于策略优化是不必要的。同样,如果没有全局视图,独立学习也无法解决诸如simple_speaker_listener和simple_reference等协调任务。

集中式批评更擅长学习多样但协调一致的行为。 在多智能体任务中,智能体可以扮演不同的角色,并且它们的行为应该是特定于角色的[15,40]。集中式批评适合这些任务,因为局部观察和全局信息都得到了很好的利用。MAPPO就是一个很好的例子,它是集中式批评的代表性算法,在SMAC、MPE和GRF中的大多数协作任务上都表现良好。HAPPO是MAPPO的异构版本,在MAMuJoCo中实现了健壮的性能。MAPPO和HAPPO是具有不同行为的协作任务的强基线。

除了两种特定的情况外,价值分解在流行的合作基准中占主导地位。第一种情况是持续控制。众所周知的VDN、QMIX 等值分解算法不适合连续控制任务,VDA2C、VDPPO等算法也较差。第二种情况是具有稀疏奖励函数(如GRF)的长期规划问题。从经验上看,价值分解方法的性能明显差于ITRPO和MAPPO等其他类别的算法。我们确定了两个主要原因:1)VDN和QMIX使用的值迭代更倾向于密集的奖励函数;2)the mixer 几乎不能分解一个接近于零的Q函数。除了这两种情况外,值分解算法以最佳的样本效率实现了鲁棒性。

B.2 Algorithms Evaluation in Mixed Scenarios

在混合任务中对算法进行基准测试具有挑战性。混合任务中的智能体表现得既合作(与队友合作)又竞争(与对手竞争)。由于策略总是处于动态平衡状态,因此很难根据获得的奖励来证明哪种算法更好:当一个策略优化得更好时,其对手策略的性能就会下降。

在混合任务模式下,算法可以通过所有不同策略的奖励总和来评估。一个政策优化迫使竞争政策获得更高的回报。总奖励越高,算法越好(图5[a-d])。虽然不同策略的奖励总和通常用于评估混合任务模式下的算法,但需要注意的是,这并不是评估性能的唯一方法。事实上,这条规则也有例外(图5)。例如,某些任务可能具有恒定的总奖励值和策略,这些策略可以快速达到竞争策略之间镜像学习曲线的平衡。在这些情况下,评估算法的公平和通用标准仍然是一个活跃的研究领域。

Mixed Scenarios 的算法(又有敌人又有队友的情况),似乎并不适合我们的算力分配任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/82429.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5W2H分析法模版

(1)WHAT——是什么,目的是什么,做什么工作。 条件是什么,哪一部分工作要做,目的是什么,重点是什么,与什么有关系,功能是什么,规范是什么,工作对象…

【IDEA+Spark Streaming 3.4.1+Dstream监控套接字流统计WordCount保存至MySQL8】

【IDEASpark Streaming 3.4.1Dstream监控套接字流统计WordCount保存至MySQL8】 把DStream写入到MySQL数据库中 Spark 3.4.1MySQL 8.0.30sbt 1.9.2 文章目录 【IDEASpark Streaming 3.4.1Dstream监控套接字流统计WordCount保存至MySQL8】前言一、背景说明二、使用步骤1.引入库2…

时序数据库 TDengine 与 WhaleStudio 完成相互兼容性测试认证

近年来,开源及其价值获得社会各界的广泛认可,无论是国家政策导向还是企业数字化转型,都在加速拥抱开源。对于如操作系统、数据库等基础软件来说,开源更是成为驱动技术创新的有力途径。 在此背景下,近日,涛…

Feign

一、为什么使用Feign 二、Feign和RestTemplate的区别 三、自定义配置 四、Feign日志 1.配置文件方式 2.java代码方式

TS 踩坑之路(四)之 Vue3

一、在使用定义默认值withDefaults和defineProps 组合时,默认值设置报错 代码案例 报错信息 不能将类型“{ isBackBtn: false; }”分配给类型“(props: PropsType) > RouteMsgType”。 对象字面量只能指定已知属性,并且“isBackBtn”不在类型“(pro…

【机器学习】在 MLOps构建项目 ( MLOps2)

My MLOps tutorials: Tutorial 1: A Beginner-Friendly Introduction to MLOps教程 2:使用 MLOps 构建机器学习项目 一、说明 如果你希望将机器学习项目提升到一个新的水平,MLOps 是该过程的重要组成部分。在本文中,我们将以经典手写数字分类…

【车道线】TwinLiteNet 复现过程全纪录

码字不易,喜欢的请点赞收藏!!!!! 论文全文翻译:【freespace】TwinLiteNet: An Efficient and Lightweight Model for Driveable Area and Lane Segmentation_莫克_Cheney的博客-CSDN博客 目录…

Vue2:组件高级(下)

Vue2:组件高级(下) Date: May 25, 2023 Sum: 自定义指令、插槽、商品列表、动态组件 目标: 自定义指令 基础概念: 概念: 内置指令:vue 官方提供了 v-for、v-model、v-if 等常用的内置指令。…

机器学习基础08-回归算法矩阵分析(基于波士顿房价(Boston House Price)数据集)

回归算法通常涉及到使用矩阵来表示数据和模型参数。线性回归是最常见的回归算法之一,它可以用矩阵形式来表示。 考虑一个简单的线性回归模型: y m x b y mx b ymxb,其中 y y y 是因变量, x x x 是自变量, m m m 是…

nginx服务

目录 基本介绍 nginx的主要功能 nginx的主要应用场景 nginx常用命令 nginx另外一种安装方式 nginx常用的信号符: nginx配置文件详解 全局配置 event模块 http模块 server模块 location模块: 模块的划分 基本介绍 nginx:高性能、…

【Docker】AUFS、BTRFS、ZFS、储存池详解

洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是…

元组是什么,python怎么使用元组

目录 引言 元组的概念 作用和优势 元组的应用 Python中如何使用元组 注意事项 总结 引言 在Python编程语言中,元组(Tuple)是一种不可变的数据结构,它允许我们以有序且不可修改的方式存储多个元素。与列表不同,…

FFmpeg 编码详细流程

介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。FFmpeg 本身不具有音视频编码的功能和底层能力,只是对各类第三方的编码器API 进行封装调用。老版本的 FFmpeg 将avcodec_encode_video2()作为视频的解码函数 API,将avcodec_encode_audio2(…

【C语言】初识C语言+进阶篇导读

✨个人主页: Anmia.🎉所属专栏: C Language 🎃操作环境: Visual Studio 2019 版本 本篇目的是面向编程新手,没接触过编程的人。以及C进阶的导读。 内容是C语言重要知识点的简单解释,不做详解。给…

web-ssrf

目录 ssrf介绍 以pikachu靶场为例 curl 访问外网链接 利用file协议查看本地文件 利用dict协议扫描内网主机开放端口 file_get_content 利用file协议查看本地文件: fsockopen() 防御方式: ssrf介绍 服务器端请求伪造,是一种由攻击者构造形成…

ClickHouse(九):Clickhouse表引擎 - Log系列表引擎

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

使用ResponseBodyAdvice做分页处理

目录 父pom文件 pom文件 配置文件 MyResponseBodyAdvice ResponseDto MyBatisConfig UsersController UsersMapper UserMapper.xml 结果 父pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

代码反向生成时序图类图-Visual_Paradigm实践

目录 前言 一、Visual_Paradigm介绍 1、主界面介绍 2、功能简介 二、基于代码的序列图生成 1、新建VP项目工程 2、序列图反向生成 三、VP类图生成 1、生成主入口 四、数据ER模型生成 1、SQL脚本 2、ER反向生成 总结 前言 不知道作为研发的小伙伴们&#xff0c;在平时的…

【Git】保姆级详解:Git配置SSH Key(密钥和公钥)到github

博主简介&#xff1a;22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a;是瑶瑶子啦每日一言&#x1f33c;: “当人们做不到一些事情的时候&#xff0c;他们会对你说你也同样不能。”——《当幸福来敲门》 克里斯加德纳 Git配置SSH Key 一、什么是Git?二、什么…

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S&#xff08;DDD with SpringBoot&#xff09;为本作者使用DDD过程中开发的框架&#xff0c;目前已可公开查看源码&#…