4

maddpg原理以及代码解读

 2 years ago
source link: https://jianengli.github.io/2021/03/19/rl/maddpg/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Jianeng

maddpg原理以及代码解读

Created2021-03-19|Updated2021-03-19|强化学习
Word count:1.7k|Reading time:5min|Post View:939
  • 研究场景:多智能体在竞争、合作以及竞争合作同时存在的复杂环境中学习
  • 算法应用环境:Multi-agent Particle Environment - MPE https://github.com/openai/multiagent-particle-envs
  • 架构:CTDE
    • 即训练Agent时给予Critic额外信息(全局信息),而在测试时去掉Critic;
    • 使Agent在得到训练后,Actor根据即时环境获取自己下一步的动作;
  • 优势:通过获得额外的信息可以避免像Q-Learning、Policy Gradient等单Agent算法在多Agent复杂环境下由于只能获取自己的状态和动作
  • 解决问题:
      1. 环境是非稳定、动态的问题-每个agent的policy在训练期间都会发生变化,从而导致环境不稳定,并会阻止简单地应用经验重播;
      • Maddpg使得每个Agent所面临的环境仍然可以被视为稳定。
      1. 随着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 学习

  1. 对其他agent策略估计
    • Critic的更新需要value target net,它用到了其他智能体的策略【通过通信获取】。但是本文放宽这个条件,让每个agent维护n-1个策略逼近函数估计各策略。

【逼近函数表示第i个智能体对第j个智能体策略的函数逼近。从而替换1)式value target net变量】

策略逼近函数

polciy 学习

  1. AC框架设计
    • Critic扩展为可以利用其他智能体的策略进行学习,从而每一个agent的policy gradient梯度都含有以全局policy为输入的critic。即每个智能体对其他智能体的策略进行一个函数逼近。
  1. 策略集合优化
    • 为了减少智能体针对竞争对手过拟合出强策略,采用了一种策略集合的思想,第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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK