【COMA】一种将团队回报拆分为独立回报的多智能体算法

COMA: Counterfactual Multi-Agent Policy Gradients笔记 1. 论文讲了什么/主要贡献是什么 文章介绍了COMA算法,主要解决了在集中训练、分散决策的框架中,全局全局奖励的分配问题。文中受到difference rewards的启发,采用了根据当前代理采取的动作相比于当前代理采取默认动作对全局奖励的提高来判断代理对全局奖励的贡献大小,从而对代理的actor进行有效的更新。并根据算法设计了能够有效估计优势函数的方式。 2. 论文摘要: Cooperativ... 阅读详情

COMA 是一种基于 Policy-Based 的多智能体算法,其核心思想是在于 “独立回报分配”。当多个智能体在执行任务时,获得的奖励分数是由所有智能体的行为共同决定的,那么怎么把一个奖励分数合理的分配给每一个智能体呢?这就是 COMA 算法要解决的关键问题。在网络结构上,COMA 沿用了 Actor-Critic 架构,其中 Actor 使用基于 Policy-Based 的 RNN 网络。

1. COMA 解决了什么问题(Motivation)

COMA 是一种解决多智能体强化学习问题的算法,对于大多数多智能体强化学习问题(MARL)都面临着同样一个问题:信度分配(也叫回报分配)。

这是指,当多个 Agent 在同时执行任务时,我们应该怎样合理的去评价每一个 Agent 的行为效用,举个例子:

假设我们现在正在训练一个算法模型,使用该算法模型去玩 MOBA 类游戏(DOTA 或者 LOL),算法模型需要同时操控 5 个英雄。在训练过程中遇到了这样一个情况:我方 3 个英雄迎面撞上了敌方 1 个英雄。此时,算法模型控制 1 号英雄和 2 号英雄对敌方英雄发起进攻,但却让 3 号英雄撤退。那么最终,因为 2 打 1 的局面,我方成功击败对方英雄,获得了 10 分的奖励分(Reward),那么我们该怎样为我方的这 3 个英雄进行奖励分配?

在上面案例中,我们很明显能看出,在人数占优势的情况下,算法选择让 1 号和 2 号英雄一起发起进攻是一次正确的尝试,而让 3 号英雄尝试撤退显然就不那么明智了。由于对 1 号和 2 号的正确决策,使得整个指挥策略得到了正向的奖励分(Positive Reward),但显然我们不能直接将这个正向奖励分同时应用到这 3 个英雄上。

我们希望被正确决策的英雄(1 号和 2 号)获得较高的奖励分,而被错误决策的英雄(3 号)获得负的惩罚分,即最后的期望得分可能为:1 号(8分),2 号(8分),3 号(-6分)。

三个英雄的得分总和加起来还是 10 分,只是每个英雄能够按照自己的实际情况获得对应的合理奖励分。

这就是 回报分配 的概念。

为了解决 Individual Reward Assignment 的问题,COMA 引入了一种叫做 “反事实准则(counterfactual baseline)” 的概念,这个概念是整篇论文的重点。

反事实准则提出,每个 agent 应该拥有自己独立的 reward,这样才能知道在这一次的全局行为决策中单个 agent 的 action 贡献是多少。即,通过 counterfactual baseline 来解决 “回报分配” 的问题。


2. COMA 怎么解决独立回报分配问题(Method)

2.1 核心思想 counterfactual baseline 的提出

在第一章节中我们提到,要想成功进行模型训练,我们就需要知道每个 agent 的独立回报究竟是多少。那么单个 agent 的 reward 该怎么去计算呢?

COMA 提出:可以将当前情况下的全局 reward 和将该 agent 行为替换为一个 “默认行为” 后的全局 reward 做差。我们可以这样理解:该回报值其实计算的是 Agent a a a 采取行为 u u u 会比采取默认行为 c a c_a ca​ 要更好( D a D^a Da > 0)还是更坏( D a D^a Da < 0)。

我们用 D a D^a Da 来表示单个 Agent 采取行为后的独立回报,计算公式如下:

D a = r ( s , u ) − r ( s , ( u − a , c a ) ) D^a = r(s, \textbf{u}) - r(s, (\textbf{u}^{-a}, c_a)) Da=r(s,u)−r(s,(u−a,ca​))

其中, u − a \textbf{u}^{-a} u−a 代表联合动作空间除去当前Agent a a a 这一时刻采取的行为。 ( u − a , c a ) (\textbf{u}^{-a}, c_a) (u−a,ca​) 代表当前Agent a a a 采取"默认行为" c a c_a ca​ 后所有Agent的联合动作空间。

上述 特定agent 的 特定动作 的 reward ( D a D^a Da)就被称为 counterfactual baseline,COMA 使得每一个 agent 的每一个 action 都会被计算出一个 counterfactual baseline。我们将在后面的章节结合代码来讲解这个 counterfactual baseline 究竟怎么计算。

2.2 算法大框架 —— 基于 AC 框架的 CTDE(Centralized Training Distributed Execution)模式

和主流多智能体强化学习算法一样,COMA 也利用 Center-Critic 和 Actor 来实现 “中心式学习,分布式执行” 的模式。即,在训练阶段输入全局信息给中心式 Critic,通过 中心 Critic 教会 Actor 如何来进行行为决策。

但和传统 AC 或是 QMIX 不一样,COMA 中的 Critic 并不直接估计状态值函数 V V V 或是全局总回报 Q t o t Q_{tot} Qtot​,而是去估计一个 agent 在指定状态下所有可执行行为的 Q 值,并通过这些 Q 值完成 counterfactual baseline 的计算。在 2.4 章中我会详细讲解计算过程。

算法网络结构如下:

下面我们分别来看看 Actor 和 Critic 的详细设计。

2.3 Actor 网络设计

COMA 中每一个 Agent 都由 RNN 网络控制,在训练时你可以为每一个 Agent 个体都训练一个独立的 RNN 网络,同样也可以所有 Agent 复用同一个 RNN 网络,这取决于你自己的设计。

RNN 网络一共包含 3 层,输入层(MLP)→ 中间层(GRU)→ 输出层(MLP),实现代码如下:

class RNN(nn.Module):

    # 所有 Agent 共享同一网络, 因此 input_shape = obs_shape + n_actions + n_agents(one_hot_code)
    def __init__(self, input_shape, args):
        super().__init__()

        self.fc1 = nn.Linear(input_shape, args.rnn_hidden_dim)
        self.rnn = nn.GRUCell(args.rnn_hidden_dim, args.rnn_hidden_dim)     # GRUCell(input_size, hidden_size)
        self.fc2 = nn.Linear(args.rnn_hidden_dim, args.n_actions)

    def forward(self, obs, hidden_state):
        x = F.relu(self.fc1(obs))
        h_in = hidden_state.reshape(-1, self.args.rnn_hidden_dim)
        h = self.rnn(x, h_in)  
多智能体强化学习-COMA 多智能体强化学习-COMA 论文全称:Counterfactual Multi-Agent Policy Gradients 论文地址:https://arxiv.org/abs/1705.08926v1 摘要 协作多智能体系统可以很自然地用于建模许多现实世界的问题,例如网络分组路由或自主车辆的协调。因此,需要新的强化学习方法来有效地学习这种系统的分散策略。为此,提出了一种新的多智能体参与者批评方法,称为反事实多智能体策略梯度(COMA)。COMA使用一个集中的批评家来估计Q函数,并使用分散的参与者来优化代 阅读详情

相关推荐

多智能体强化学习- COMA

COMA:反事实基线

大鱼治不了水的博客 2898

多智能体强化学习论文——COMA

存在的问题&研究动机&研究思路 遵循CTDE框架。是大规模多智能体训练的常见的范式,训练过程可以使用模拟器的全局状态信息,但是执行过程每个智能体只能依赖于自身的动作-观测值历史(常用循环神经网络来处理history)。 在协作的环境中,多智能体面临信誉分配的问题。联合动作产生的全局reward并不能让每个智能体很好的推断出自己对全局的贡献。 为了解决信誉分配问题,提出了反事实基准:固定其他智能体的动作,边缘化某个智能体的动作。 在agent之间传递梯度和参数共享,是两种常用于发挥集中式cr

我的AI笔记 2173

多智能体强化学习值函数分解论文调研

分布式执行actor网络采集数据以及模型推理,中心化critic网络训练actor网络。缺点:难以扩展到大规模agent环境中,原因:MADDPG(a)论文中证明随着agent数量增加,集中式critic网络会积累高方差问题,值函数很难收敛。当所有智能体都共用一个系统奖励时,每个智能体所学习的critic实际上是全局critic,评估的是所有智能体的整体观测-动作对的好坏,因此单个智能体无法从中判断自身观测-动作对整个系统的影响,这也就是所谓的**信用分配()问题。

qq_1300258993的博客 2432

强化学习 | COMA

本文首发于:行者AI 在多agent的强化学习算法中,前面我们讲了QMIX,其实VDN是QMIX的一个特例,当求导都为1的时候,QMIX就变成了VDN。QTRAN也是一种关于值分解的问题,在实际的问题中QTRAN效果没有QMIX效果好,主要是QTRAN的约束条件太过于松散,导致实际没有理论效果好。但是QTRAN有两个版本,QTRAN_BASE和QTRAN_ALT,第二版本效果比第一要好,在大部分实际问题中和QMIX的效果差不多。 上述的算法都是关于值分解的,每个agent的回报都是一样的。如果在一局王者.

行者AI 1642

多智能体协作的 “军师与将领” 模式:CTDE 框架下四大经典算法解析—强化学习(21)

不管是 “算价值” 还是 “演员评论家”,CTDE 的聪明之处在于:训练时集中所有信息把策略练精,执行时让每个智能体独立决策。这就像军队训练 —— 演习时指挥官能看到全局,调整战术;实战时,前线士兵只能靠自己和训练成果作战。

wh1236666的博客 2707

【一】最新多智能体强化学习方法【总结】

1.连续动作状态空间算法 1.1MADDPG 1.1.1 简介 Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 这是OpenAI团队和McGill大学、UC Berkeley于2017合作发表在NIPS(现在称NeurIPS)上,关于多智能体强化学习(Multi-agent reinforcement learning, MARL)特别经典的一篇文章。本文不仅给出了MADDPG (Multi-agent.

丨汀、的博客 7312

【信息科学与工程学】【控制科学】第五篇 控制工程 (涵盖多智能体控制)01

序号领域算法名称数学方程式/数学模型说明1经典控制传递函数G(s)=U(s)Y(s)​=an​sn+an−1​sn−1+⋯+a0​bm​sm+bm−1​sm−1+⋯+b0​​线性时不变系统输入输出关系2经典控制状态空间模型x˙(t)=Ax(t)+Bu(t) y(t)=Cx(t)+Du(t)时域系统描述,A系统矩阵,B输入矩阵,C输出矩阵,D直传矩阵3经典控制能控性判据rank(Qc​)=rank([B,AB,A2B,…,An−1B])=n状态完全能控的充分必要条件4经典控制能观性判据rank(Qo​)

weixin_49199313的博客 596

SAP财务模块必看:BAPI_ACC_DOCUMENT_POST扩展字段全攻略(含FIBF配置)

本文详细解析了SAP财务模块中如何利用BAPI_ACC_DOCUMENT_POST的EXTENSION1参数扩展自定义字段。文章从需求分析入手,对比了传统增强与BTE(业务交易事件)两种技术路径,并重点提供了基于FIBF配置的完整实战指南,包括数据结构理解、函数模块开发及配置步骤,帮助ABAP开发者和财务顾问高效、可维护地实现如WBS元素、税务代码等字段的灵活传递。

weixin_29290963的博客 390

【Cadence软件技巧集萃】从Capture到Allergo——分布演示从原理符号导出到网络表

Cadence软件功能多样、性能强大,但是使用起来颇费步骤,尤其是从原理图到网络表的导入步骤,没有经过上手实践还真不一定一次就能搞定哩。本文笔者用将分步演示:1、在Capture软件上绘制原理图;2、将原理图导出网络表;3、在Allergo软件上更新网络表;希望给予使用Cadence的读者有效的帮助1、本文简述了建立Capture项目的步骤,演示了调用元件符号库的方法,并绘制了电气原理图;2、针对加载元件封装库可能遇到的问题,做了排查步骤建议;

qq_33175704的博客 2523

badusb详细制作教程(两种方式实现远控)

badusb是一种几乎可以突破任何杀毒软件和防火墙的设备,堪称渗透测试利器 文章目录前言一、什么是badusb?二,badusb的优点三,badusb是如何攻击的?badusb原理HID攻击漏洞产生原因三、准备步骤1.设备2,编辑器的安装与设置四,编写代码(重点)第一种: SEToolkit + badusb实现PowerShell注入攻击第二种:Cobalt Strike + badusb 实现PowerShell注入攻击五,烧录六,badusb有多强大攻击场景总结 BadUSB是《黑客军团》中

Ghost_system的博客 1万+

避坑指南:Dify+Docker+Ollama离线部署实战与疑难解析

本文详细解析了在国产化系统(如银河麒麟V10)内网环境中,如何从零开始离线部署Dify、Docker与Ollama的全栈AI应用开发平台。文章重点拆解了Docker安装中的“没有Release文件”和“GPG密钥错误”等典型报错解决方案,并提供了Ollama离线模型导入与Dify连接配置的完整实战指南,旨在帮助开发者高效完成本地部署,避开常见陷阱。

dd012的博客 458

【2024保研经验帖】中科院信工所夏令营经验分享

中科院信工所夏令营经验分享,信工所夏令营据说只要报了就能进,这个是不是真的尚不清楚,不过qq群里有八九百个人,也属实可怕。招生老师说我们这届夏令营招200-300个左右,于是又开始惶惶不安。 夏令营时期都是线上进行,先是每个科室进行线上招生宣讲,然后报名第一志愿部门和第二志愿部门,不同部门的考核是不同的。有的部门只要求英语面试和综合面试,有的部门除了面试还需要机试,而有的部门除了这些还需要笔试。

m0_63002183的博客 4483

STC8H DMA 串口1全双工中断方式收发通讯C语言

串口1全双工中断方式收发通讯程序。 通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间. 当DMA空间存满设置大小的内容后,通过串口1的DMA自动发送功能把存储空间的数据原样返回. 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。

czhaii的专栏 1462

Python爬虫实战:逆向解析腾讯视频API,高效获取结构化视频信息

首先,我们定义期望获取的数据结构,这有助于数据验证和代码清晰度。python"""腾讯视频信息数据模型"""title: str = Field(..., description="视频标题")vid: str = Field(..., description="视频唯一ID")play_count: Optional[int] = Field(None, description="播放量")

2201_76125261的博客 2370

CODESYS数据处理合集(高低字节/ 字/浮点数/位)

VAR_INPUT//字节0//字节1END_VARVAREND_VAR。

RXXW_Dor的博客 348

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 【QMIX】一种基于Value-Based多智能体算法
下一篇: 数据挖掘在轨迹信息上的应用实验
__何枝
博客等级 码龄9年 78粉丝 20原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值