强化学习原理与应用作业三-多智能体
课程成绩95代码链接目录0. 说明1. MATD3 for simple spread1.1 gumbel-softmax重参数技巧1.2 熵正则化1.3 细节及展示2. VDN for simple spread2.1 VDN思想2.2 细节及展示3. QMIX for simple spread3.1 从VDN到QMIX3.2 细节3.3 全局状态分析4. 总结0. 说明不同算法分别建立单独的.py文件 (例如MATD3_simple_spread.py、VDN_simple_spread.py、QMIX_simple_spread.py等) 编写实现算法参数均在代码中体现。每个算法的训练数据见result文件下相应的.log文件和.pkl文件例如MATD3.log、MATD3.pkl。学习曲线在learning_curves/png目录下。所有随机种子均已固定在本机上可以复现。所有代码已设置为测试模式即载入训练的模型进行测试所有路径为相对路径可以直接运行。1. MATD3 for simple spread1.1 gumbel-softmax重参数技巧MADDPG是确定性策略梯度算法输出的是确定性动作针对离散型的动作例如MPE环境DDPG本应用u θ ( s ) a r g m a x a A ( s , a ) u_\theta(s)\underset{a}{argmax}\;A(s,a)uθ(s)aargmaxA(s,a)作为其确定性策略来输出一个确定性的离散动作但a r g m a x argmaxargmax操作将使Actor网络的参数θ \thetaθ梯度中断进而导致后续无法用梯度上升的方法由Q ( s , u θ ( s ) ) Q(s, u_\theta(s))Q(s,uθ(s))来更新Actor网络。解决方法使用gumbel-softmax代替argmax通过调低温度系数τ \tauτ代码中设置为0.5使其逼近argmax。1.2 熵正则化通过阅读MADDPG源码得知actor的更新使用了熵正则化技巧。区别与SAC的最大化熵学习MADDPG的熵只是作为一个正则项加在loss上而SAC显式地在优化目标中使用熵并学习一个自动调节的温度系数α \alphaα。MADDPG源码部分如下看到最终loss除了基本的梯度上升最大化Q值还包括了熵正则项系数为1e-3。实验中该部分的设置与MADDPG源码一致。使用熵正则化技巧可以让策略更鲁棒。对比实验结果具体见下图。1.3 细节及展示MPE的simple spread环境中所有智能体的观测空间、动作空间以及功能完全一致属于同构智能体故所有智能体可以共享参数进而减缓惰性智能体lazy agent的出现。与作业2一致这里的MADDPG使用其改进版MATD3实现。即使用探索噪声和策略噪声、使用Twin网络、延迟更新Actor网络和目标网络。具体实现中设置一个episode后更新n次而不是一个step更新一次具体地设置n1即一个episode后更新一次网络参数。尽管n取2或者更大可能会带来更好的收敛效果但这里没有进行繁琐的参数尝试和调试。使用熵正则项和不使用熵正则项的收敛值分别为-4.7、-4.8学习曲线如下具体数值见相应的MATD3.log文件。可以发现使用熵正则化后效果稍优而且可以清晰地看到在训练后期会更加稳定。2. VDN for simple spread2.1 VDN思想VDN的思想是用各合作智能体自己的局部Q值之和来近似团队的Q值并基于团队Q值的TD error来更新参数。由于团队Q值Q t o t Q_{tot}Qtot来自各智能体的Q值Q a Q_aQa故TD error反向传播会分散到各个智能体的Q网络体现出值分解Value Decomposition。2.2 细节及展示实现中使用DRQN代替DQN希望使用循环神经网络具体为GRU结合过往的观测及动作信息 (具体实现为隐藏状态上一时刻的动作)缓解局部观测带来的局限性进而使输出的Q值更加准确。由于每个timestep的动作不仅与当前的局部观测有关还与上一时刻的动作以RNN的隐藏状态相关因此就不能以timestep为单位从经验池随机抽取经验进行学习。所以这里以episode为单位存储经验训练时从经验池一次随机采样多个episode进行学习。与Double DQN的思想类似为减缓高估计算下一时刻的Q值时用m a x a ′ Q t a r g e t ( s ′ , a ′ ) \underset{a}{max}\,Q_{target}(s, a)a′maxQtarget(s′,a′)代替m a x a ′ Q ( s ′ , a ′ ) \underset{a}{max}\,Q(s, a)a′maxQ(s′,a′)即单个智能体自己的局部Q值计算方式为t a r g e t _ q r γ ∗ ( 1 − m a s k ) ∗ Q t a r g e t ( s ′ , a r g m a x a ′ Q ( s ′ , a ′ ) ) target\_q r \gamma*(1-mask) *Q_{target}(s,\underset{a}{arg\,max} \,Q(s,a))target_qrγ∗(1−mask)∗Qtarget(s′,a′argmaxQ(s′,a′))ϵ − g r e e d y \epsilon-greedyϵ−greedy设值起始最大值为0.9终止最小值为0.01且在前t o t a l _ e p i s o d e s / 5 total\_episodes/5total_episodes/5回合内由起始最大值指数递减为终止最小值然后保持最小值不变。同质智能体间使用共享参数进而减缓惰性智能体lazy agent的出现。实现中设置一个episode后更新n次而不是一个step更新一次具体地设置n1即一个episode后更新一次网络参数。学习曲线如下收敛在-5.2左右具体数值见VDN.log。3. QMIX for simple spread3.1 从VDN到QMIX基于价值的MARL算法的基本假定是IGM (Individual Global Max)条件即整体Q值Q t o t Q_{tot}Qtot最大时对应的联合动作为各智能体局部Q值Q a Q_aQa最大时对应的动作。VDN为了满足IGM条件直接简单地将Q t o t Q_{tot}Qtot分解为各Q a Q_aQa的加和形式此时∂ Q t o t Q a 1 \frac{\partial Q_{tot}}{Q_a} 1Qa∂Qtot1。QMIX对VDN作出改进针对如何分解Q t o t Q_{tot}Qtot这一点提出了更一般化的单调性条件即只要求∂ Q t o t Q a ≥ 0 \frac{\partial Q_{tot}}{Q_a} \geq 0Qa∂Qtot≥0即可具体代码实现时将分解系数w ww设置为非负。3.2 细节使用的技巧与上述VDN中2.1节完全一致即用DRQN代替DQNDouble DQN减缓Q值高估ϵ − g r e e d y \epsilon-greedyϵ−greedy的设置、参数共享等。它们在VDN部分已经介绍这里不再展开。3.3 全局状态分析全局状态s的获取通常有两种做法使用环境接口提供的全局状态或者拼接concate各个智能体的局部观测作为全局状态。此外MAPPO论文中还介绍了Agent-Specific Global State (AS)即拼接环境提供的全局状态和各智能体的局部观测。显然AS会造成输入维度过高因为存在重复冗余的信息。为此MAPPO还提出了Feature-Pruned Agent-Specific Global State (FP)即在AS基础上去除重复的特征。由于simple spread场景 (包括整个MPE环境) 没有提供全局状态故MAPPO中的AS及FP方法没法使用。关于全局状态这里做了三种定义拼接各智能体的局部观测作为全局状态其d i m _ s t a t e d i m _ o b s ∗ n u m _ a g e n t s dim\_statedim\_obs*num\_agentsdim_statedim_obs∗num_agents;拼接各智能体的局部观测和上一时刻的动作作为全局状态其d i m _ s t a t e ( d i m _ o b s d i m _ a c t i o n ) ∗ n u m _ a g e n t s dim\_state(dim\_obsdim\_action)*num\_agentsdim_state(dim_obsdim_action)∗num_agents拼接各智能体的局部观测、上一时刻的动作及RNN的隐藏状态作为全局状态其d i m _ s t a t e ( d i m _ o b s d i m _ a c t i o n d i m _ h i d d e n _ s i z e ) ∗ n u m _ a g e n t s dim\_state(dim\_obsdim\_actiondim\_hidden\_size)*num\_agentsdim_state(dim_obsdim_actiondim_hidden_size)∗num_agents。由于作业要求QMIX算法对episodes总数不设限制加之其本身网络结构比VDN更加复杂这里又定义了三种全局状态用以对比实验训练时间较久调参实在不易而且对算法思想的学习没有太大帮助这里没有进行全面、细粒度的调参。三类全局状态的对应的收敛曲线如下最终的收敛值分别为-5.2、-5.3、-5.0具体数值见相应的log文件。可以看到拼接各智能体的局部观测、上一时刻的动作及RNN的隐藏状态作为全局状态这种情况下效果最优收敛值在-5.0之上。4. 总结MADDPG、VDN、QMIX都采用了集中式训练、分散式执行 (CTDE) 的框架即训练时用到了全局信息包括全局状态 (或所有智能体的局部观测) 和全局动作每个智能体决策时仅基于自己的局部观测。它们的区别在于:VDN、QMIX是基于值分解的算法是单智能体DQN算法在多智能体上的扩展。由于基于团队奖励它们只能处理合作型的任务或环境并且和DQN一样它们没法直接处理连续性动作因为没法穷举所有动作来选取使Q最大的动作即a r g m a x a Q ( s , a ) \underset{a}{argmax}\,Q(s,a)aargmaxQ(s,a)。MADDPG算法属于Actor-Critic算法Actor网络使用策略梯度的梯度上升方法训练Critic使用TD error训练。每个智能体都有其自己的中心式的Critic网络 (同质智能体可以采用参数共享)专门对该智能体进行评价而不是采用值分解的方式对整个团队评价这一性质也使得MADDPG能够处理异质智能体间的竞争情形及混合情形当然也能处理合作型的场景。