Press "Enter" to skip to content

强化学习 | COMA

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

本文首发于: 行者AI

 

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

 

上述的算法都是关于值分解的,每个 agent 的回报都是一样的。如果在一局王者荣耀的游戏中,我方大顺风,我方一名角色去 1 打 5,导致阵亡,然后我方 4 打 5,由于我方处于大优势,我方团灭对方,我方所有的 agent 都获得正的奖励。开始去 1 打 5 的 agnet 也获得了一个正的奖励,显然他的行为是不能获得正的奖励。就出现了“吃大锅饭”的情况,置信度分配不均。

 

COMA 算法就解决了这种问题,利用反事实基线来解决置信度分配的问题。COMA 是一种“非中心化”的策略控制系统。

 

1. Actor-Critic

 

COMA 主要采样了 Actor-Critic 的主要思想,一种基于策略搜索的方法,中心式评价,边缘式决策。

 

2. COMA

 

COMA 主要使用反事实基线来解决置信分配问题。在协作智能体的系统中,判断一个智能体执行一个动作的的贡献有多少,智能体选取一个动作成为默认动作(以一种特殊的方式确认默认动作),分别执行较默认动作和当前执行的动作,比较出这两个动作的优劣性。这种方式需要模拟一次默认动作进行评估,显然这种方式增加了问题的复杂性。在 COMA 中并没有设置默认动作,就不用额外模拟这基线,直接采用当前策略计算智能体的边缘分布来计算这个基线。COMA 采用这种方式大大减少了计算量。

 

基线的计算:

 

u ′ a ∑ ​ π a ( u ′ a ∣ τ a ) Q ( s , ( u − a , u ′ a ) )

 

COMA 网络结构

图中(a)表示 COMA 的集中式网络结构,(b)表示 actior 的网络结构,(c)表示 Critic 的网络结构。

 

3. 算法流程

 

初始化 actor_network,eval_critic_network,target_critic_network,将 eval_critic_network 的网络参数复制给 target_critic_network。初始化 buffer D ,容量为 M ,总迭代轮数 T ,target_critic_network 网络参数更新频率 p 。

 

f o r t = 1 t o T d o

 

1)初始化环境

 

2)获取环境的 S ,每个 agent 的观察值 O ,每个 agent 的 a v a i l a c t i o n ,奖励 R 。

 

3) f o r s t e p = 1 t o e p i s o d e _ l i m i t

 

a)每个 agent 通过 actor_network,获取每个动作的概率,随机 sample 获取动作 a c t i o n 。actor_network,采用的 GRU 循环层,每次都要记录上一次的隐藏层。

 

b)执行 a c t i o n ,将 S , S n e x t ​ ,每个 agent 的观察值 O ,每个 agent 的 a v a i l a c t i o n ,每个 agent 的 n e x t a v a i l a c t i o n ,奖励 R ,选择的动作 u ,env 是否结束 t e r m i n a t e d ,存入经验池 D 。

 

c) i f l e n ( D ) > = M

 

d)随机从 D 中采样一些数据,但是数据必须是不同的 episode 中的相同 transition。因为在选动作时不仅需要输入当前的 inputs,还要给神经网络输入 hidden_state,hidden_state 和之前的经验相关,因此就不能随机抽取经验进行学习。所以这里一次抽取多个 episode,然后一次给神经网络传入每个 episode 的同一个位置的 transition。

 

e) t d e ​ r r o r = Q e ​ v a l 计算 loss,更新 Critic 参数。 G t ​ 表示从状态 S ,到结束,获得的总奖励。

 

f)通过当前策略计算每个 agent 的每个 step 的基线,基线计算公式:

 

u ′ a ∑ ​ π a ( u ′ a ∣ τ a ) Q ( s , ( u − a , u ′ a ) ) ( 边 缘 分 布 )

 

g)计算执行当前动作的优势 advantage:

 

A a ( s , u ) = Q ( s , u ) − u ′ a ∑ ​ π a ( u ′ a ∣ τ a ) Q ( s , ( u − a , u ′ a ) )

 

h)计算 loss,更新 actor 网络参数:

 

l o s s = ( ( a d v a n t a g e ∗ s e l e c t a ​ c t i o n p ​ i l ​ o g ) ∗ m a s k ) . s u m ( ) / m a s k . s u m ( )

 

i) i f t p = 0 :

 

j)将 eval_critic_network 的网络参数复制给 target_critic_network。

 

4. 结果对比

我自己跑的数据,关于 QMIX,VDN,COMA,三者之间的对比,在相同场景下。

5. 算法总结

 

COMA 在论文写的算法原理很好,但是在实际的场景中,正如上面的两张图所示,COMA 的表现并不是很理想。在一般的场景中,并没有 QMIX 的表现好。笔者建议读者,在实际的环境中,可以试试 VDN,QMIX 等等,COMA 不适合“带头冲锋”。

 

6. 资料

 

 

COMA:https://arxiv.org/abs/1705.08926

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注