首页 > 其他分享 >深度强化学习之COMA

深度强化学习之COMA

时间:2022-09-29 11:58:13浏览次数:76  
标签:network 动作 agent critic 深度 COMA 强化 QMIX

深度强化学习之COMA

作者:Xingzhe.AI

来自:行者AI

引言

在多Agent的强化学习算法中,前面我们讲了QMIX,其实VDN是QMIX的一个特例,当求导都为1的时候,QMIX就变成了VDN。QTRAN也是一种关于值分解的问题,在实际的问题中QTRAN效果没有QMIX效果好,主要是QTRAN的约束条件太过于松散,导致实际没有理论效果好。但是QTRAN有两个版本,QTRAN_BASE和QTRAN_ALT,第二版本效果比第一要好,在大部分实际问题中和QMIX的效果差不多。上述的算法都是关于值分解的,每个agent的回报都是一样的。如果在一局王者荣耀的游戏中,我方大顺风,我方一名角色去1打5,导致阵亡,然后我方4打5,由于我方处于大优势,我方团灭对方,我方所有的agent都获得正的奖励。开始去1打5的agnet也获得了一个正的奖励,显然他的行为是不能获得正的奖励。就出现了“吃大锅饭”的情况,置信度分配不均。COMA算法就解决了这种问题,利用反事实基线来解决置信度分配的问题。COMA是一种“非中心化”的策略控制系统。

1. Actor-Critic

COMA主要采样了Actor-Critic的主要思想,一种基于策略搜索的方法,中心式评价,边缘式决策。

2. COMA

COMA主要使用反事实基线来解决置信分配问题。在协作智能体的系统中,判断一个智能体执行一个动作的的贡献有多少,智能体选取一个动作成为默认动作(以一种特殊的方式确认默认动作),分别执行较默认动作和当前执行的动作,比较出这两个动作的优劣性。这种方式需要模拟一次默认动作进行评估,显然这种方式增加了问题的复杂性。在COMA中并没有设置默认动作,就不用额外模拟这基线,直接采用当前策略计算智能体的边缘分布来计算这个基线。COMA采用这种方式大大减少了计算量。

基线的计算:

​ $$\sum_{u'a}\pia(u{'a}|\taua)Q(s,(u{-a},u^{'a}))$$

COMA网络结构

图1. COMA网络结构

图中(a)表示COMA的集中式网络结构,(b)表示actior的网络结构,(c)表示Critic的网络结构。

3. 算法流程

  • 初始化actor_network,eval_critic_network,target_critic_network,将eval_critic_network的网络参数复制给target_critic_network。初始化buffer \(D\),容量为\(M\),总迭代轮数\(T\),target_critic_network网络参数更新频率\(p\)。

  • \(for\) \(t=1\) $to $ \(T\) $ do$

    ​ 1)初始化环境

    ​ 2)获取环境的\(S\),每个agent的观察值\(O\),每个agent的\(avail\) \(action\),奖励\(R\)。

    ​ 3)\(for\) \(step=1\) \(to\) \(episode\)_\(limit\)

    ​ a)每个agent通过actor_network,获取每个动作的概率,随机sample获取动作\(action\)。actor_network,采用的GRU循环层,每次都要记录上一次的隐藏层。

    ​ b)执行\(action\),将\(S\),\(S_{next}\),每个agent的观察值\(O\),每个agent的\(avail\) \(action\),每个agent的\(next\) \(avail\) \(action\),奖励\(R\),选择的动作\(u\),env是否结束\(terminated\),存入经验池\(D\)。

    ​ c)\(if\) \(len(D)\) \(>=\) \(M\)

    ​ d)随机从\(D\)中采样一些数据,但是数据必须是不同的episode中的相同transition。因为在选动作时不仅需要输入当前的inputs,还要给神经网络输入hidden_state,hidden_state和之前的经验相关,因此就不能随机抽取经验进行学习。所以这里一次抽取多个episode,然后一次给神经网络传入每个episode的同一个位置的transition。

    ​ e)\(td\_error =G_t-Q\_eval\)计算loss,更新Critic参数。\(G_t\)表示从状态\(S\),到结束,获得的总奖励。

    ​ f)通过当前策略计算每个agent的每个step的基线,基线计算公式:$$\sum_{u'a}\pia(u{'a}|\taua)Q(s,(u{-a},u^{'a}))$$。(边缘分布)

    ​ g)计算执行当前动作的优势advantage:$A^a(s,u) = Q(s,u)-\sum_{u'a}\pia(u{'a}|\taua)Q(s,(u{-a},u^{'a})) $。

    ​ h)\(loss=((advantage*select\_action\_pi\_log)*mask).sum()/mask.sum()\)计算loss,更新actor网络参数。

    ​ i)\(if\) \(t\) \(p==0\) :

    ​ j) 将eval_critic_network的网络参数复制给target_critic_network。

4. 结果对比

图2. 论文中COMA对比其他网络结果。

我自己跑的数据,关于QMIX,VDN,COMA,三者之间的对比,在相同场景下。

图3. VDN,QMIX,COMA,在sc2中8m地图的表现

图4. VDN,QMIX,COMA,在sc2中2s3z地图的表现

5. 算法总结

COMA在论文写的算法原理很好,但是在实际的场景中,正如上面的两张图所示,COMA的表现并不是很理想。在一般的场景中,并没有QMIX的表现好。笔者建议读者,在实际的环境中,可以试试VDN,QMIX等等,COMA不适合“带头冲锋”。

6. 资料

1.COMA

--- 关注我们

行者AI(成都潜在人工智能科技有限公司,xingzhe.ai)致力于使用人工智能和机器学习技术提高游戏和文娱行业的生产力,并持续改善行业的用户体验。我们有内容安全团队、游戏机器人团队、数据平台团队、智能音乐团队和自动化测试团队。 > >如果您对世界拥有强烈的好奇心,不畏惧挑战性问题;能够容忍摸索过程中的各种不确定性、并且坚持下去;能够寻找创新的方式来应对挑战,并同时拥有事无巨细的责任心以确保解决方案的有效执行。那么请将您的个人简历、相关的工作成果及您具体感兴趣的职位提交给我们。我们欢迎拥抱挑战、并具有创新思维的人才加入我们的团队。请联系:[email protected] > >如果您有任何关于内容安全、游戏机器人、数据平台、智能音乐和自动化测试方面的需求,我们也非常荣幸能为您服务。可以联系:[email protected]

标签:network,动作,agent,critic,深度,COMA,强化,QMIX
From: https://www.cnblogs.com/erwin/p/16740937.html

相关文章

  • MyEclipse技术深度剖析——企业级的Java EE & Jakarta EE IDE
    MyEclipse 是一个功能强大的JavaEEIDE和JakartaEEIDE,它支持快速开发可部署在各种应用程序服务器上的企业级应用程序。内置生产力工具使开发过程更加高效,包括用于Web......
  • 深度阐述Nodejs模块机制
    我们都知道Nodejs遵循的是CommonJS规范,当我们require('moduleA')时,模块是怎么通过名字或者路径获取到模块的呢?首先要聊一下模块引用、模块定义、模块标识三个概念。1Comm......
  • 深度阐述Nodejs模块机制
    我们都知道Nodejs遵循的是CommonJS规范,当我们require('moduleA')时,模块是怎么通过名字或者路径获取到模块的呢?首先要聊一下模块引用、模块定义、模块标识三个概念。1Commo......
  • 一文详解深度学习中的Normalization:BN/LN/WN
    参考资料:https://mp.weixin.qq.com/s?__biz=MzU3NDgxMzI0Mw==&mid=2247504259&idx=3&sn=bcd5af6172a5dd77d29e9d5f15362078&chksm=fd2e34d7ca59bdc11ed2d8663916452293ab4......
  • 深度讲解React Props
    一、props的介绍当React遇到的元素是用户自定义的组件,它会将JSX属性作为单个对象传递给该组件,这个对象称之为“props”。函数声明的组件,会接受一个props形参,获取属性传递......
  • 实现深度克隆拷贝
     //判断是否是某类型constisType=(obj,type)=>{if(typeofobj!=='object')returnfalse;consttypeString=Object.prototype.toString.call(obj);......
  • react组件深度解读
    五、React核心是组件在React中,我们使用组件(有状态、可组合、可重用)来描述UI。在任何编程语言中,你都可以将组件视为简单的函数。React组件也一样,它的输入是props......
  • 在强化学习算法性能测试时使用训练好的模型运行游戏,此时如何控制实时游戏画面的帧数
    问题:在强化学习算法性能测试时使用训练好的模型运行游戏,此时如何控制实时游戏画面的帧数?  ========================================  看到很多训练好的模型......
  • AI之强化学习、无监督学习、半监督学习和对抗学习
    1.强化学习@目录1.强化学习1.1强化学习原理1.2强化学习与监督学习2.无监督学习3.半监督学习4.对抗学习强化学习(英语:ReinforcementLearning,简称RL)是机器学习中的一个领......
  • Elasticsearch from/size-浅分页查询-深分页 scroll-深分页search_after深度查询区别
    Elasticsearch调研深度查询1.from/size浅分页查询一般的分页需求我们可以使用from和size的方式实现,但是这种的分页方式在深分页的场景下应该是避免使用的。深分页的页次......