多智能体强化学习算法MA-POCA

论文原文:On the Use and Misuse of Absorbing States in Multi-agent Reinforcement Learning

预备知识参考:

强化学习纲要(周博磊课程)

强化学习实践教学

多智能体强化学习入门

MA-POCA是Unity官方2021年11月推出的多智能体强化学习算法,其首次应用在Unity强化学习插件ML-Agents中,取得了让人满意的效果,ML-Agents让我们能够非常便捷地创建自己的强化学习训练环境,我写过对应的文章:Unity强化学习之ML-Agents的使用

在这里插入图片描述

MA-POCA是Unity强化学习插件ML-Agents所使用的官方的多智能体算法,它的实现参考于MADDPG
在介绍MA-POCA之前,需要了解多智能体深度强化学习的代表算法MADDPG。它是经典的的中心化训练和非中心化执行的算法,即在训练的时候,Critic不仅需要知道该智能体的动作信息,还需要知道其他智能体的动作信息,才能做出评判。而在智能体执行的时候,不需要Critic网络参与,因此只需要Actor利用观测到具局部信息采取行动即可。以两个智能体为例:
r ( s , a 1 ) = E a 2 ∈ A , s ′ ∈ S [ r 1 ( s ′ ) p ( s ′ ∣ s , a 1 , a 2 ) π 2 ( a 2 ∣ s ) ] p 1 ( s ′ ∣ s , a 1 ) = ∑ a 2 ∈ A p ( s ′ ∣ s , a 1 , a 2 ) π 2 ( a 2 ∣ s ) r(s,a_1) = E_{a_2 \in A,s' \in S}[r_1(s')p(s'|s,a_1,a_2)\pi_2(a_2|s)] \\ p_1(s'|s,a_1) = \sum_{a_2\in A} p(s'|s,a_1,a_2)\pi_2(a_2|s) r(s,a1)=Ea2A,sS[r1(s)p(ss,a1,a2)π2(a2s)]p1(ss,a1)=a2Ap(ss,a1,a2)π2(a2s)

算法在以下约束下运行:
1.算法学习到的策略只能使用本地的信息。
2.算法无需知道实际的可微分动力学模型。
3.对智能体之间的通讯方式不做任何假设。

除了中心化训练和非中心化执行之外,该算法改进了经验回放记录的数据,每一条数据由所构成,其中代表每个智能体的局部观测。另外,该算法还利用了策略集合效果优化,对每个智能体学习多个策略,利用所有策略的整体效果进行优化,提高了算法的稳定性。

MA-POCA是基于COMA的改进算法,它的改进针对游戏中复杂多变的环境,更好地适应了智能体数量和种类无法确定的场合。它在集中式训练,分布式执行的AC框架上提出了两个改进点:一是针对数量不确定的智能体组合,使用了注意力机制的特殊神经网络结构,可以处理不定量输入,并且代替了现有的COMA算法全耦合的吸收状态。二是针对智能体死后信用分配问题提供了良好的解决方法,使得智能体能够做出利他性决定,牺牲自身实现团队利益最大化,并且可以在任何时候加入或退出多智能体小组,这对应游戏角色在团战中的复活与死亡。另外MA-POCA在论文中提出,它使用了和PPO一致的信赖域切割方式,并且把GAE的参数使用在了TD更新上,因此,MA-POCA和PPO实际上可以共用一套超参数。

在一个有共享奖励的合作环境中,智能体的行为方式会使整个群体的未来奖励最大化。但是,当单个代理的当前行为导致智能体本身的行为终止(例如自我牺牲)时,它已被排除在环境之外,它不能再观察到队伍获得奖励时的环境状态,也不再能够获得小组后来可能获得的奖励。因此,智能体必须学会最大化这些无法实际得到的奖励。这被称为死后信用分配问题。虽然通过引入吸收状态可以表达已经灭亡的智能体状态,但在实际使用中会让吸收状态的数量不恒定,从而使基于神经网络的函数近似器的训练变得复杂,计算资源也必须应用于不影响环境的智能体。MA-POCA在Critic网络的输入部分加入了自注意力网络后,解决了这些问题,因此网络可以在任意时候添加和删除智能体。

可参考的译文:MA-POCA

相关案例:

ML-Agents案例之地牢逃脱

ML-Agents案例之推箱子游戏

ML-Agents案例之双人足球

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学习网络编程需要掌握以下内容: 1. 网络基础知识:了解计算机网络的基本概念、网络协议以及网络通信的原理,包括TCP/IP协议栈、HTTP协议等。 2. Socket编程:学习Socket编程是网络编程的基础,包括Socket的创建、连接、数据传输等操作。熟悉Socket编程可以实现客户端和服务器之间的通信。 3. 网络通信模型:了解不同的网络通信模型,如客户端-服务器模型、多对多模型等。掌握各种模型的实现方法和适用场景。 4. 并发编程:网络编程中经常需要处理多个客户端的并发连接和数据传输。学习并发编程技术,如多线程、多进程、异步IO等,可以提高程序的并发性能和响应能力。 5. 协议和数据格式:熟悉常用的网络协议和数据格式,如HTTP、JSON等。了解协议的工作原理和数据格式的解析方法,能够更好地处理网络通信中的数据交互。 6. 安全性和稳定性:学习网络安全技术,如加密、认证等,以保障数据的安全性。同时,学习异常处理和错误处理的方法,确保程序的稳定运行。 7. 实践和项目经验:网络编程是一个实践性很强的领域,通过实践项目来巩固所学知识,并且积累经验。可以尝试实现一些简单的服务器和客户端程序,例如聊天室、文件传输等。 总之,学习网络编程需要深入理解网络基础知识,掌握Socket编程和并发编程技术,熟悉协议和数据格式,注重安全和稳定性,同时通过实践项目来提升自己的实际能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值