目录

  • 0. 说明
  • 1. MATD3 for simple spread
    • 1.1 gumbel-softmax重参数技巧
    • 1.2 熵正则化
    • 1.3 细节及展示
  • 2. VDN for simple spread
    • 2.1 VDN思想
    • 2.2 细节及展示
  • 3. QMIX for simple spread
    • 3.1 从VDN到QMIX
    • 3.2 细节
    • 3.3 全局状态分析
  • 4. 总结

0. 说明

不同算法分别建立单独的.py文件 (例如MATD3_simple_spread.pyVDN_simple_spread.pyQMIX_simple_spread.py等) 编写实现,算法参数均在代码中体现。

每个算法的训练数据见result文件下相应的.log文件和.pkl文件,例如MATD3.logMATD3.pkl。学习曲线在learning_curves/png目录下。

所有随机种子均已固定,在本机上可以复现。

所有代码已设置为测试模式,即载入训练的模型进行测试,所有路径为相对路径可以直接运行。

1. MATD3 for simple spread

1.1 gumbel-softmax重参数技巧

MADDPG是确定性策略梯度算法,输出的是确定性动作,针对离散型的动作(例如MPE环境),DDPG本应用uθ(s)=argmaxaA(s,a)u_\theta(s)=\underset{a}{argmax}\;A(s,a)uθ​(s)=aargmax​A(s,a)作为其确定性策略来输出一个确定性的离散动作,但argmaxargmaxargmax操作将使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 细节及展示

  1. MPE的simple spread环境中,所有智能体的观测空间、动作空间以及功能完全一致,属于同构智能体,故所有智能体可以共享参数,进而减缓惰性智能体lazy agent的出现。

  2. 与作业2一致,这里的MADDPG使用其改进版MATD3实现。即使用探索噪声和策略噪声、使用Twin网络、延迟更新Actor网络和目标网络。

  3. 具体实现中设置一个episode后更新n次,而不是一个step更新一次,具体地设置n=1,即一个episode后更新一次网络参数。尽管n取2或者更大可能会带来更好的收敛效果,但这里没有进行繁琐的参数尝试和调试。

使用熵正则项和不使用熵正则项的收敛值分别为-4.7、-4.8,学习曲线如下,具体数值见相应的MATD3.log文件。
可以发现使用熵正则化后效果稍优,而且可以清晰地看到,在训练后期会更加稳定。

2. VDN for simple spread

2.1 VDN思想

VDN的思想是用各合作智能体自己的局部Q值之和,来近似团队的Q值,并基于团队Q值的TD error来更新参数。由于团队Q值QtotQ_{tot}Qtot​来自各智能体的Q值QaQ_aQa​,故TD error反向传播会分散到各个智能体的Q网络,体现出值分解Value Decomposition。

2.2 细节及展示

  1. 实现中使用DRQN代替DQN,希望使用循环神经网络(具体为GRU)结合过往的观测及动作信息 (具体实现为隐藏状态+上一时刻的动作),缓解局部观测带来的局限性,进而使输出的Q值更加准确。
    由于每个timestep的动作不仅与当前的局部观测有关,还与上一时刻的动作以RNN的隐藏状态相关,因此就不能以timestep为单位从经验池随机抽取经验进行学习。所以这里以episode为单位存储经验,训练时从经验池一次随机采样多个episode进行学习。

  2. 与Double DQN的思想类似,为减缓高估,计算下一时刻的Q值时,用maxa′Qtarget(s′,a′)\underset{a'}{max}\,Q_{target}(s', a')a′max​Qtarget​(s′,a′)代替maxa′Q(s′,a′)\underset{a'}{max}\,Q(s', a')a′max​Q(s′,a′),即单个智能体自己的局部Q值计算方式为target_q=r+γ∗(1−mask)∗Qtarget(s′,argmaxa′Q(s′,a′))target\_q = r + \gamma*(1-mask) *Q_{target}(s',\underset{a'}{arg\,max} \,Q(s',a'))target_q=r+γ∗(1−mask)∗Qtarget​(s′,a′argmax​Q(s′,a′))

  3. ϵ−greedy\epsilon-greedyϵ−greedy设值起始最大值为0.9,终止最小值为0.01,且在前total_episodes/5total\_episodes/5total_episodes/5 回合内由起始最大值指数递减为终止最小值,然后保持最小值不变。

  4. 同质智能体间使用共享参数,进而减缓惰性智能体lazy agent的出现。

  5. 实现中设置一个episode后更新n次,而不是一个step更新一次,具体地设置n=1,即一个episode后更新一次网络参数。

学习曲线如下,收敛在-5.2左右,具体数值见VDN.log

3. QMIX for simple spread

3.1 从VDN到QMIX

基于价值的MARL算法的基本假定是IGM (Individual Global Max)条件,即整体Q值QtotQ_{tot}Qtot​最大时对应的联合动作为各智能体局部Q值QaQ_aQa​最大时对应的动作。
VDN为了满足IGM条件,直接简单地将QtotQ_{tot}Qtot​分解为各QaQ_aQa​的加和形式,此时∂QtotQa=1\frac{\partial Q_{tot}}{Q_a} =1Qa​∂Qtot​​=1。
QMIX对VDN作出改进,针对如何分解QtotQ_{tot}Qtot​这一点,提出了更一般化的单调性条件,即只要求∂QtotQa≥0\frac{\partial Q_{tot}}{Q_a} \geq 0Qa​∂Qtot​​≥0即可,具体代码实现时将分解系数www设置为非负。

3.2 细节

使用的技巧与上述VDN中2.1节完全一致,即用DRQN代替DQN,Double DQN减缓Q值高估,ϵ−greedy\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中的ASFP方法没法使用。

关于全局状态,这里做了三种定义:

  1. 拼接各智能体的局部观测作为全局状态,其
    dim_state=dim_obs∗num_agentsdim\_state=dim\_obs*num\_agentsdim_state=dim_obs∗num_agents;
  2. 拼接各智能体的局部观测和上一时刻的动作作为全局状态,其
    dim_state=(dim_obs+dim_action)∗num_agentsdim\_state=(dim\_obs+dim\_action)*num\_agentsdim_state=(dim_obs+dim_action)∗num_agents;
  3. 拼接各智能体的局部观测、上一时刻的动作及RNN的隐藏状态作为全局状态,其
    dim_state=(dim_obs+dim_action+dim_hidden_size)∗num_agentsdim\_state=(dim\_obs+dim\_action+dim\_hidden\_size)*num\_agentsdim_state=(dim_obs+dim_action+dim_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最大的动作,即argmaxaQ(s,a)\underset{a}{argmax}\,Q(s,a)aargmax​Q(s,a)。

MADDPG算法,属于Actor-Critic算法,Actor网络使用策略梯度的梯度上升方法训练,Critic使用TD error训练。每个智能体都有其自己的中心式的Critic网络 (同质智能体可以采用参数共享),专门对该智能体进行评价,而不是采用值分解的方式对整个团队评价,这一性质也使得MADDPG能够处理异质智能体间的竞争情形及混合情形,当然也能处理合作型的场景。

强化学习原理与应用作业三相关推荐

  1. 强化学习原理及应用作业之动态规划算法【SYSU_2023SpringRL】

    强化学习原理及应用作业之动态规划算法[SYSU_2023SpringRL] 题目描述: 任务一:动态规划方法 一.策略迭代算法 1.代码 2.结果 3.思路讲解 策略评估 策略提升 二.价值迭代算法 ...

  2. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

  3. 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理

    转自:https://www.cnblogs.com/pinard/p/10609228.html 本篇主要参考了AlphaGo Zero的论文, AlphaGo Zero综述和AlphaGo Zer ...

  4. 独家 | 浅谈强化学习原理(附代码链接)

    作者:Michel Kana 翻译:王琦 校对:王雨桐 本文约4900字,建议阅读15分钟. 本文介绍了强化学习的基本原理,并通过代码实例来讲解如何找到最优策略. Google在2017年年底发布了A ...

  5. 强化学习原理与python实现原理pdf_纯Python实现!Facebook发布PyTorch分布式强化学习库...

    图灵TOPIA来源:Facebook编译:刘静图灵联邦编辑部出品Facebook于近日发布了PyTorch中用于强化学习(RL)研究的平台:TorchBeast.TorchBeast实现了流行的IMP ...

  6. 图解强化学习 原理 超详解 (一)

    强化学习 一.背景 机器学习是人工智能的一个分支,在近30多年已发展为一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.计算复杂性理论等的学科.强化学习(RL)作为机器学习的一个子领域,其灵感来 ...

  7. 【强化学习论文合集】三十三.2021国际人工智能联合会议论文(IJCAI2021)

    欢迎订阅本专栏:<强化学习论文合集> 专栏介绍: 本专栏整理了2017~2022年(后面会持续更新)强化学习领域国际顶级会议已录用的论文,会议包括但不限于:ICML.NeurIPS.AAA ...

  8. 【强化学习论文合集】三十五.2021神经信息处理系统大会论文(NIPS2021)

    欢迎订阅本专栏:<强化学习论文合集> 专栏介绍: 本专栏整理了2017~2022年(后面会持续更新)强化学习领域国际顶级会议已录用的论文,会议包括但不限于:ICML.NeurIPS.AAA ...

  9. 【强化学习论文合集】三十四.2021机器人与自动化国际会议论文(ICRA2021)

    欢迎订阅本专栏:<强化学习论文合集> 专栏介绍: 本专栏整理了2017~2022年(后面会持续更新)强化学习领域国际顶级会议已录用的论文,会议包括但不限于:ICML.NeurIPS.AAA ...

最新文章

  1. 洛谷 P1142 轰炸
  2. 数据库对象 同义词 索引 序列 视图
  3. WindowsPhone7入手,实在的照片
  4. 方差分析中怎么看有无显著性影响_用R语言做单因素方差分析及多重比较
  5. stm32 bootloader跳转
  6. hibernate底层dao
  7. MemCache 分布式缓存
  8. 字节内部前端开发手册(完整版)开放下载!
  9. openshift k8s_带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8
  10. 书摘:刘润《5分钟商学院》之“结果偏见”
  11. 「写论文」“常用关联词”汇总
  12. Jupyter 安装与应用
  13. 3dsmax2014安装激活之 “软件许可证检出失败 错误20”或者显示错误5。
  14. 阿里云轻量应用服务器部署Node.js+React+MongoDB前后端分离项目
  15. 【webservice】Two classes have the same XML type name(转)
  16. Python学习记录-项目案例实现:爬虫篇 02
  17. 当 BBR 面对时延抖动
  18. Linux查看服务器的cpu和内存的硬件信息
  19. 徐州当铺模型,乡村金融中心的建立
  20. 2022年第3周(1月10日-1月16日)中国各影院电影票房排行榜:榜首票房83万元,8家影院观影人次超过万人(附年榜TOP100详单)

热门文章

  1. 机器视觉系统硬件(2):光源
  2. [源码和文档分享]基于JSP实现的试题库管理系统
  3. html5 为什么,为什么我们都该关注HTML5
  4. Sheets集合与Worksheets集合的区别
  5. java(JDK)环境安装步骤以及环境变量配置
  6. 玩转Nginx服务器,怎能不懂Nginx的配置和优化?
  7. 用百度访问受限的MSN space空间
  8. redis高并发之秒杀活动解决方案
  9. [转帖]redis监控工具汇总
  10. eCharts实现多图表切换