本文主要是结合文章Joint Optimization of Handover Control and Power Allocation Based on Multi-Agent Deep Reinforcement Learning对MAPPO算法进行解析。
该文章详细地介绍了作者应用MAPPO时如何定义奖励、动作等,目前该文章 没有在git-hub开放代码,如果想配合代码学习MAPPO,可以参考MAPPO代码详解(超级详细)或者参考小小何先生原创文章。
MAPPO开源代码下载地址:
https://github.com/marlbenchmark/on-policy
代码配套论文:
The Surprising Effectiveness of MAPPO in Cooperative, Multi-Agent Games
此代码对环境要去较高,可下载轻量版的代码进行学习:
https://github.com/tinyzqh/light_mappo
MAPPO算法简介
MAPPO是一种多代理最近策略优化深度强化学习算法,它是一种on-policy算法,采用的是经典的actor-critic架构,其最终目的是寻找一种最优策略,用于生成agent的最优动作。
场景设定
一般来说,多智能体强化学习有四种场景设定:
通过调整MAPPO算法可以实现不同场景的应用,但就此篇论文来说,其将MAPPO算法用于Fully cooperative场景中,在本文中所有Agent共享奖励(共用一个奖励函数),即所有智能体的奖励由一套公式生成。
通信架构
现有的多 agent 深度强化学习算法通信方式主要由三种:
全通信集中决策:联合感知,中心决策(神经网络内部通信)
全通信自主决策:联合感知,独立决策(神经网络之前通信)
欠通信自主决策:无信息交互,独立决策(一般用循环神经网络)
不同的算法框架决定了不同的通信方式,MAPPO有中心式、分散式和混合式三种框架。
我们在应用MAPPO算法时,应该先明确算法框架,用的最多是混合式的框架,即中心化训练、去中心化执行的框架,刚开始时智能体将自己的状态观测数据传递给中心控制器,中央控制器得到全局状态S后对模型进行训练,得到最优分散控制策略后传给agent,训练完后智能体就可以不再与中心控制器通信,可以基于自己的局部观测状态通过自己的动作策略函数来产生最优动作。
值得注意的是,在这种框架中每个智能体有单独的actor-critic网络,训练时智能体自己的actor网络要接受每个critic的打分。
算法伪代码:
基本流程是:
1 初始化Q和π,神经网络参数ω、θ为超参数(ω、θ开始时随机初始化,通过训练来改进ω、θ)
2 初试化relay buffer D
3 在一个定义步长内,arent u执行策略函数π(old)产生的动作,得到reward r(t)和下一个状态s(t+1)
4 通过计算得到矩形框内数据
5 储存数据到buffer D中去
6 打乱D中的数据顺序,并从新编号(从而打破数据之间的相关性,从而稳定训练过程)
7 这里基本意思就是抽取数据并更新ω、θ,然后用更新后的参数去更新Q和π。
具体细节请参考原文。
参考文献:
[1]MAPPO-Joint Optimization of Handover Control and Power Allocation Based on Multi-Agent Deep Reinforcement Learning.(有定义动作、状态等,无开源代码)
[2]The Surprising Effectiveness of MAPPO in Cooperative, Multi-Agent Games.(总结了MAPPO的改进及特点,并与其它算法进行对比,文章内容干货不多,主要还是结合其开源代码去理解MAPPO)
[3]Multi-task Deep Reinforcement Learning with PopArt