[控场AI]
· 5 分钟阅读· 2,871 字

用MAPPO训练4人小队打2D大逃杀:40秒实战与踩坑记录

用MAPPO训练4人小队打2D大逃杀:40秒实战与踩坑记录

Reddit开发者用MAPPO训练4人小队玩开源大逃杀survev,展示多智能体协作实验。

一位Reddit开发者用MAPPO训练4人AI小队玩开源大逃杀游戏survev,放出了40秒实战短片和训练中的若干坑。实验的亮点在于把多智能体强化学习的几个核心难题——部分可观测、信用分配、分层动作空间——压缩进一个轻量可复现的场景。系统采用信息隔离:四个成员共享一个actor网络,agent id作输入区分身份,actor只能看到与真实客户端一致的信息,特权状态仅喂给centralized critic。动作分为intent、target、use三层,以提升探索效率和可解释性。小队共享团队奖励,并用集火、交叉火力、救援等协作项引导行为。作者不公开代码和细节,担心被用作公共服务器上的作弊工具。

当大逃杀变成一场多智能体协作实验

Reddit上一位开发者分享了他用MAPPO(Multi-Agent PPO)训练4人小队玩survev的实验。survev是一个开源的surviv.io克隆,整个战局里的每个角色都是AI控制的bot。他放出了一段40秒的实战短片,也坦率地列出了训练过程中"咬"到他的那些坑。

这件事有意思的地方不在于"AI会打游戏",而在于它把多智能体强化学习里最难的几个问题——部分可观测、信用分配、动作空间分层——压缩进了一个轻量、可复现的实验场景。

架构拆解:演员看不到上帝视角

整套系统最关键的约束是信息隔离。四个小队成员共享同一个actor网络,agent id作为输入来区分身份。actor能拿到的信息严格等同真实游戏客户端:约1.4k维特征、两个24x24的局部网格、一张小地图,这些通过小型CNN处理;对最多12个可见敌人做集合编码(set encoder),再送进一个256维的GRU做时序记忆。

这个设计直接决定了模型能否落地。因为actor的输入和真实客户端一致,同一个网络可以打包成浏览器扩展直接跑,不需要服务器开后门。而特权状态——比如全局敌人位置、血量全貌——只喂给centralized critic,用来降低训练时的方差。critic是训练期的"作弊器",actor不是。

分层动作空间:先想意图,再选目标

动作没有做成一个扁平的大列表,而是分了三层:策略先选一个intent(搜刮、探索、找掩体、探头、撤退、重新集结、推进、进圈等),再选一个target,最后选用什么(枪、近战、手雷、烟雾、治疗)。

这样做的好处是动作空间被结构化,探索效率更高,策略也更容易解释——你知道bot"想干什么",而不只是"按了什么键"。代价是每层都需要各自的学习信号,分层的信用分配比单层更难调。

MAPPO(Multi-Agent PPO) 是 PPO 算法在多智能体场景下的扩展。PPO 本身属于 actor-critic 家族,用裁剪的替代目标避免策略更新步子过大。MAPPO 的关键改动是采用 CTDE(Centralized Training, Decentralized Execution) 范式:每个 agent 有自己的 actor,但在训练时共享一个能观测全局状态的 centralized critic。这让 critic 在估计价值时掌握更多信息,从而降低梯度方差,而 actor 在部署时仍只依赖本地观测。MAPPO 在星际争霸微操(SMAC)等基准上以相对简单的实现取得了接近甚至超过 off-policy 方法的表现,因此成为多智能体协作任务里常见的基线选择。

部分可观测(Partially Observable)指单个 agent 无法获知环境的完整状态,只能看到局部信息。在多智能体系统中,每个 agent 既要应对环境的不确定性,也要应对其他 agent 行为和意图的不确定性,这使得单 agent 的 MDP 假设失效,需要建模为 Dec-POMDP。GRU 等循环网络常被用来在部分可观测下维护时序记忆,弥补单帧信息的不足。

信用分配(Credit Assignment)指在团队共享一个奖励信号时,判断哪个 agent 的哪一步动作对最终结果贡献了多少。它是多智能体强化学习的核心难题之一:奖励越共享,越难区分个体贡献,也越容易诱发搭便车。常见应对手段包括 centralized critic、反事实基线(COMA)以及显式的奖励分解。

分层强化学习(Hierarchical RL)把策略拆成多层,高层输出抽象意图或子目标,低层负责具体执行。它主要用来缓解长时程任务里动作空间过大、探索稀疏的问题,也便于注入人类先验。分层结构通常配合选项(options)框架或分层策略梯度来训练,各层可以共享或独立更新参数。代价是各层需要各自的信用分配信号,高层做出的意图与其最终后果之间的时间跨度更长,训练起来比单层策略更不稳定。

奖励怎么设:一个团队共享信号

小队共享一个团队奖励,而不是每个agent单独给分。奖励项包括造成和承受的伤害、击倒与击杀、最终排名,外加几个小的团队协作项:集火(focus fire)、交叉火力(crossfire)、救援(revive)。

共享奖励是解决多智能体信用分配的一种直接做法,配合centralized critic效果通常不错。但它也带来经典的"搭便车"风险——如果某个成员什么都不做,团队奖励照样能分到。作者用集火、交叉火力这类项来引导协作行为,本质上是在奖励里显式注入协作先验,而不是指望它自己涌现。

奖励塑形(Reward Shaping)指在稀疏的原始奖励之外额外设计辅助奖励项,以引导策略更快学到期望行为。集火、交叉火力、救援这类协作项就是典型的塑形信号,它们把「合作」这一抽象目标翻译成可累积的数值。塑形能显著加速收敛,但也会引入风险:如果辅助奖励与最终目标不一致,策略可能学会刷分而不真正提升胜率。实践中常把塑形项乘一个较小的权重,并在训练后期逐步衰减。

什么咬了他

作者没有公开代码和全部细节,理由很实在:这种bot如果放出去,可以被当作公共服务器上的作弊工具。这个顾虑本身值得注意——一个在本地未修改服务器上训练的研究项目,距离可用的外挂只有一步之遥。

他愿意回答高层问题,但明确保留了实现细节。从分享的内容看,几个隐含的难点可以推测:分层动作空间让训练更复杂;GRU加CNN加set encoder的组合参数量不小,训练成本高;共享奖励下的协作行为需要手工设计奖励项来引导。

这个实验的意义

survev提供了一个干净的测试床:开源、可控、规则完整。多智能体强化学习在电竞级游戏(如Dota、星际)上已有大量工作,但那些环境重、门槛高。用一个2D大逃杀克隆做4人小队协作,训练和分析成本都低得多,适合快速迭代想法。

更值得关注的是那个信息隔离设计。让actor只看到真实客户端能看到的东西,这不仅是工程上的巧思,也是让研究成果具备实际部署可能的必要条件。很多多智能体研究止步于仿真,正是因为agent依赖了现实里拿不到的信息。

作者最后放话欢迎提问,如果社区追问,或许会透露更多关于分层动作如何训练、团队奖励权重怎么调的细节。对做多智能体协作的人来说,这个案例的价值不在结果,而在它把一整套工程取舍摆到了台面上。

信息隔离在强化学习里对应的是观测空间的设计问题:agent 可用的观测必须与部署时可获得的信息一致,否则训练出的策略会依赖现实中拿不到的「特权信息」,导致迁移到真实环境时性能崩塌。让 actor 与真实客户端接口对齐、把特权状态只留给 critic,是把训练时的样本效率优势和部署时的可行性结合起来的常见做法,也是该实验能被真正落地运行的关键前提。

#MAPPO#多智能体强化学习#survev#大逃杀AI#centralized critic#分层动作空间#共享奖励
分享:

相关推荐