1. 介绍
- 研究场景:多智能体在竞争、合作以及竞争合作同时存在的复杂环境中学习
- 算法应用环境:Multi-agent Particle Environment - MPE https://github.com/openai/multiagent-particle-envs
- 架构:CTDE
- 即训练
Agent
时给予Critic额外信息(全局信息),而在测试时去掉Critic;
- 即训练
- 使Agent在得到训练后,Actor根据即时环境获取自己下一步的动作;
- 优势:通过获得额外的信息可以避免像Q-Learning、Policy Gradient等单Agent算法在多Agent复杂环境下由于只能获取自己的状态和动作
- 解决问题:
- 环境是非稳定、动态的问题-每个agent的policy在训练期间都会发生变化,从而导致环境不稳定,并会阻止简单地应用经验重播;
- Maddpg使得每个Agent所面临的环境仍然可以被视为稳定。
- 随着agent数量增长,Policy Gradient方差增大;
2. 前置知识
- MADDPG是在DDPG算法的基础上,而DDPG是结合DQN与Actor-Critic
- DQN为一个新神经网路 + 一个老神经网络
- Actor-Critic算法结合了 Policy Gradient (Actor) 和 Function Approximation (Critic) 的方法。Actor-Critic基于概率选行为,Critic 基于Actor的行为评判行为的得分,Actor根据Critic的评分修改选行为的概率。
- Actor-Critic算法的结构也是具有两个神经网络
- DDPG算法是在actor critic算法的基础上加入了DQN的思想
- actor神经网络和critic神经网络都分别由两个神经网络构成
- Multi-agent Particle Environment (MPE) 多智能体算法运行环境:https://github.com/openai/multiagent-particle-envs
3. MADDPG原理
3.1 与ddpg对比
从上面的伪代码中可以看出:动作加噪音、‘soft’更新以及目标损失函数都与DDPG基本一致,因此其最重要的即在对于Critic部分进行参数更新训练时,其中的输入值——action和observation,都是包含所有其他Agent的action和observation的。通过给予每个Agent其他Agent的信息,从而使每个单一的Agent受其他Agent改变policy的影响程度降低,从而认为在已知的信息条件下,环境可以看作是稳定不变。
3.2 maddpg的三个特点
MADDPG框架
论文中的三个特点,本文进行理解:
critic 学习
- 对其他agent策略估计
- Critic的更新需要value target net,它用到了其他智能体的策略【通过通信获取】。但是本文放宽这个条件,让每个agent维护n-1个策略逼近函数估计各策略。
【逼近函数表示第i个智能体对第j个智能体策略的函数逼近。从而替换1)式value target net变量】
策略逼近函数
polciy 学习
- AC框架设计
- Critic扩展为可以利用其他智能体的策略进行学习,从而每一个agent的policy gradient梯度都含有以全局policy为输入的critic。即每个智能体对其他智能体的策略进行一个函数逼近。
- 策略集合优化
- 为了减少智能体针对竞争对手过拟合出强策略,采用了一种策略集合的思想,第i个智能体的策略由一个具有K个子策略的集合提供,在每一个训练episode中只是用一个子策略。
4. 代码分析
源码抽象
4.1 程序架构
训练在trian.py实现
1. 创建环境和每个智能体(实例化n trainer类)和训练网络、初始化所有变量
2. 进入主循环:
2.1 获取所有智能体的动作列表
2.2 环境根据所有智能体的actions, 进行step操作(以获取新的状态、奖赏、done、info)
2.3 收集experience,并将其存储到各自replay buffer中:
2.3.1 先存储每个训练器的experience
2.3.2 用step得到的新的状态信息更新原来的状态信息
2.3.3 累计reward值(episode的总reward; agent的各自reward)
2.4 训练网络,更新网络参数
4.2 agent代码
maddpg.py:
一个类:MADDPGAgentTrainer 在该类中调用P—train,Q—trian,利用function来建立所利用的函数。
包含1个类,4个函数,该类中调用这4个函数以完成相应的功能。
p_train 创建policy network,target network q_train 创建q network,target network
两个函数的唯一差异就是损失函数的设定
5. 代码复现
实现了在四种环境【有竞争和沟通,有竞争无沟通,无竞争有沟通,无竞争无沟通】中,ddpg和maddpg的reward走势图。
设定:1. ddpg的使用:只有good agent采用ddpg
代码中的环境名称 | 是否具有沟通 | 是否具备竞争 | 环境解释 |
---|---|---|---|
simple_spread | N | N | N个agent,N个地标。agent会根据任何agent与每个地标的距离获得奖励。如果agent与其他agent冲突,则将受到处罚。因此,agent必须学会覆盖所有地标,同时避免碰撞。 |
simple_speaker_listener | Y | N | 2个代理,3个不同颜色的地标。每个座席都想到达其目标地标,奖励是集体的。一个agent是不会移动的“说话人”(灰色)(遵守另一个agent的目标),另一个agent是听众(不会说话,但必须导航到正确的地标) |
simple_push | N | Y | 1个特工,1个对手,1个地标。代理根据到地标的距离获得奖励。如果对手靠近地标,并且代理人离地标较远,则会得到奖励。因此,对手学会了将特工从地标上推开。 |
simple_world_comm | Y | Y | 捕食者—猎物的环境。好的特工(绿色)速度更快,并且希望避免被对手(红色)击中。对手行动较慢,想打败优秀的特工。障碍物(黑色大圆圈)阻碍了道路。(1)有食物(蓝色小球),这些善良的代理人会因为靠近而得到奖励;(2)现在,我们拥有了“森林”,从外面看不到内部的代理人; (3)有一个“领导对手”,可以随时查看特工,并且可以与其他对手进行交流以帮助协调追赶。 |
num of episodes - mean episode reward 学习曲线
基本在5000 episodes
收敛,maddpg效果相比ddpg好。
参考
[1] 深度解析OPENAI-MADDPG. https://blog.csdn.net/kysguqfxfr/article/details/100070584/
[2] 多智能体深度强化学习——MADDPG算法代码分析(tensorflow). https://blog.csdn.net/qq_41871826/article/details/110678626?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control
[3] Multi-agent Particle Environment - MPE多智能体强化学习运行环境的任务简介. https://blog.csdn.net/weixin_43483381/article/details/114240352?ops_request_misc=&request_id=&biz_id=102&utm_term=多智能体仿真环境mpe&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduweb~default-0-114240352.pc_v2_rank_blog_default