多智能体强化学习入门Qmix
Posted 行者AI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多智能体强化学习入门Qmix相关的知识,希望对你有一定的参考价值。
本文首发于:行者AI
Qmix是多智能体强化学习中比较经典的算法之一,在VDN的基础上做了一些改进,与VDN相比,在各个agent之间有着较大差异的环境中,表现的更好。
1. IQL与VDN
IQL(Independent Q_Learning),是一种比较暴力的解决问题的方法,每个agent都各自为政,自己学习自己的,没有一个共同的目标。导致算法最终很难收敛。但是在实际一些问题中有不错的表现。
VDN(Value-Decomposition Networks For CooperativeMulti-Agent Learning),每个agent都有自己的动作价值函数 Q a Q_a Qa,通过各自的价值函数的 a r g m a x Q a argmaxQ_a argmaxQa,选取动作。 Q t o t = ∑ i = 1 n Q i Q_{tot}=\\sum_{i=1}^nQ_i Qtot=∑i=1nQi,主要将系统的联合 Q t o t Q_{tot} Qtot近似成为多个单智能体的 Q a Q_a Qa函数的和。因为VDN的联合函数的求和形式表现力有限,在有复杂组合的环境中,表现的很差。例如非线性环境。
2. Qmix
2.1 Qmix的算法思想
QMIX的主要目的:找到一个完全去中心化的策略,并没有像VDN一样完全分解,为了保持策略一致性,我们只需要是全局的 Q t o t Q_{tot} Qtot的执行与 a r g m a x Q a argmaxQa argmaxQa上的执行的结果相同:
要达到这个效果只需要满足
Q
t
o
t
Q_{tot}
Qtot对于任何一个
Q
a
Q_a
Qa都是单调递增的:
不难看出,当 ∂ Q t o t ∂ Q a = 1 \\frac {\\partial Q_{tot}}{\\partial Q_a}=1 ∂Qa∂Qtot=1的时候就是VDN,VDN是QMIX的一种特殊情况。
2.2 Qmix的网络结构
QMIX的模型由两大部分组成(三个网络组成),一个是agent network,输出单智能体的 Q i Q_i Qi的函数,mixing network则是以 Q i Q_i Qi作为输入,输出为联合 Q t o t Q_{tot} Qtot。为了保证单调性,mixing network的网络参数权重和偏置通过hypernetworks网络计算得出,并且hypernetworks输出的网络权重都必须大于0,对偏置没有要求。
3. 算法流程
-
初始化网络eval_agent_network,eval_mixing_network这两个网络,分别将这两个网络的参数复制给target_agent_network,targent_mixing_network.初始化buffer D D D,容量为 M M M,总迭代轮数 T T T,target_agent_network,targent_mixing_network两个网络参数更新频率 p p p。
-
f o r for for t = 1 t=1 t=1 $to $ T T T $ do$
1)初始化环境
2)获取环境的 S S S,每个agent的观察值 O O O,每个agent的 a v a i l avail avail a c t i o n action action,奖励 R R R。
3) f o r for for s t e p = 1 step=1 step=1 t o to to e p i s o d e episode episode_ l i m i t limit limit
a)每个agent通过eval_agent_network获取每个动作的 Q Q Q值,eval_agent_network中有GRU循环层,需要记录每个agnet的隐藏层,作为下次GRU隐藏的输入。(一一对应)
b)通过计算出的Q值选择动作。(1,通过最大的 Q Q Q值进行选取动作,有小几率采取随机动作。2,将 Q Q Q值再进行一次softmax,随机采样(sample)动作)
c)将 S S S, S n e x t S_{next} Snext,每个agent的观察值 O O O,每个agent的 a v a i l avail avail a c t i o n action action,每个agent的 n e x t next next a v a i l avail avail a c t i o n action action,奖励 R R R,选择的动作 u u u,env是否结束 t e r m i n a t e d terminated terminated,存入经验池 D D D。
d) i f if if l e n ( D ) len(D) len(D) > = >= >= M M M
e)随机从 D D D中采样一些数据,但是数据必须是不同的episode中的相同transition。因为在选动作时不仅需要输入当前的inputs,还要给神经网络输入hidden_state,hidden_state和之前的经验相关,因此就不能随机抽取经验进行学习。所以这里一次抽取多个episode,然后一次给神经网络传入每个episode的同一个位置的transition。
f)通过DQN相同的方式更新参数:
L ( θ ) = ∑ i = 1 b [ ( y i t o t − Q t o t ( τ , u , s ; θ ) ) 2 ] L(\\theta)=\\sum_{i=1}^b[(y_i^{tot}-Q_{tot}(\\tau,u,s;\\theta))^2] L(θ)=∑i=1b[(yitot−Qtot(τ,u,s;θ))2]
g) i f if if t e r m i n a t e d terminated terminated == T r u e True True a n d and and s t e p step step < = <= <= e p i s o d e episode episode_ l i m i t limit limit
h) f o r for for k = s t e p k=step k=step t o to to e p i s o d e episode episode_ l i m i t limit limit
i)将不足的数据用0进行填充,保证数据的一致性。
j) S , a v a i l a c t i o n = S n e x t , n e x t a v a i l a c t i o n S,avail\\space\\space action = S_{next},next \\space avail \\space action S,avail action=Snext,next avail action
k) i f if if t t t % p = = 0 p==0 p==
以上是关于多智能体强化学习入门Qmix的主要内容,如果未能解决你的问题,请参考以下文章