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复杂环境下由于只能获取自己的状态和动作
  • 解决问题:
      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