Multi-Agent · MARL

开元棋牌多智能体与MARL博弈研究

开元棋牌多智能体围绕Multi-Agent、MARL、General-sum、Joint Action、Coordination、Competition、Credit Assignment、Non-stationarity与Opponent Modeling,记录多个AI同时学习、同时博弈时出现的稳定性问题。

四个Agent之间通过Coordination青色连线与Competition橙色连线构成的多智能体关系图
多个Agent之间同时存在Coordination(协作)和Competition(竞争)关系,不能简单归为"多个AI互相比赛"。

开元棋牌多智能体是开元棋牌研究体系中专注于"多个AI如何在同一博弈中相互影响"的模块。传统单智能体强化学习假设Environment对学习者而言是静止的:给定同样的状态和动作,转移和Reward是稳定的。但当棋牌博弈中存在两个以上Agent,且这些Agent都在同步学习、同步更新Policy时,这个假设就不再成立——每个Agent眼中的Environment实际上包含了其他Agent的Policy,而这些Policy本身在不断变化,这就是MARL要处理的核心问题之一,也就是Non-stationarity。

这一研究模块围绕几个具体问题展开:多个Agent同时行动时如何描述Joint Action及其带来的组合复杂度;不同博弈结构下(Zero-sum、General-sum、Cooperative、Competitive、Mixed)Agent之间的利益关系有本质差异,不能用同一套逻辑处理;团队获得共同Reward后,如何做Credit Assignment,判断具体是哪个Agent的哪个Action起了作用;以及在无法直接获取对手Policy的情况下,如何通过观察历史行为做Opponent Modeling。

开元棋牌多智能体不做"多个AI同时运行"这种表面描述,而是把每一类博弈结构、每一种协作或对抗关系拆开来看,记录训练过程中实际遇到的稳定性问题和建模选择,是一个偏工程和实验记录性质的研究栏目。

交互实验 · Multi-Agent Demo

Joint Action组合实验:切换Agent数量观察组合空间增长

切换2/3/4个Agent,观察Joint Action组合数量(示例按每个Agent平均6种候选动作估算)随Agent数量增长的速度——这不是简单的线性增长。

Agent 数量 → Joint Action 组合 Demo Data
当前 Agent 数量
—
Joint Action 组合数(示例)
—
两两关系组数
—

示例假设每个Agent平均有6个候选动作,仅用于说明组合空间的增长速度,不代表真实实验数据。

Agent A与Agent B动作组合形成Joint Action矩阵的示意图
Joint Action:所有Agent同时选择的动作组合,数量随参与者数量和各自动作空间快速增长。
多个Agent的Action沿时间轴指向Team Reward并标注问号的Credit Assignment示意图
Credit Assignment:团队获得一个最终Reward后,很难判断具体哪个Agent的哪个Action贡献了多少。
Zero-sum与General-sum收益结构对比的重叠圆示意图
Zero-sum与General-sum是不同的收益结构,不能用同一套分析工具处理。
核心术语

开元棋牌多智能体核心概念

Multi-Agent是什么?
Multi-Agent指同一个决策环境中同时存在两个或两个以上独立决策主体,每个Agent都有自己的观测、动作空间,甚至自己的目标函数。开元棋牌多智能体中,Multi-Agent不只是"很多个Agent"这个数量概念,更关键的是每个Agent的决策会改变其他Agent面对的局面,彼此的动作互相耦合,这种耦合结构决定了整个系统不能被拆成多个独立的单智能体问题分别求解。
MARL是什么?
MARL即Multi-Agent Reinforcement Learning,是强化学习框架向多个同时学习的Agent扩展后的分支。与单智能体RL不同,MARL中每个Agent的最优Policy依赖于其他Agent当前采取的Policy,训练目标不再是对固定Environment求最优解,而是在其他学习者同步更新的条件下寻找某种均衡或稳定策略,这也是MARL比单智能体RL更难收敛的根本原因。
两名Agent和多个Agent有什么区别?
两名Agent的博弈结构相对简单,很多经典理论(如Zero-sum下的Minimax)有明确解,对手的Policy也只有一个来源,Opponent Modeling目标单一。当Agent数量超过两个,除了组合空间随Agent数量指数增长外,还会出现子群体临时结盟、多方利益不完全对齐等情况,博弈结构从两人对局变成更复杂的多方互动,简单的两人博弈理论往往不能直接套用。
General-sum是什么?
General-sum描述的是一种收益结构:各Agent的Reward总和不是固定常数,既不像Zero-sum那样此消彼长,也不像纯Cooperative那样完全一致。在General-sum环境中,Agent之间可能存在部分利益重叠、部分利益冲突,某个联合行动可能让所有人同时变好或同时变差。开元棋牌多智能体中大量真实的多人棋牌互动属于General-sum,需要单独的方法处理,不能套用Zero-sum的求解思路。
Joint Action是什么?
Joint Action指某一时刻所有Agent各自选择的动作组合在一起构成的整体动作。单个Agent只能决定自己那一部分,但Environment的下一状态和各方Reward往往是由Joint Action共同决定的。这带来一个直接后果:Agent不能只优化自己的动作,还要考虑其他Agent可能选择的动作,Joint Action的组合数量随Agent数和各自动作空间同时增长,是Multi-Agent问题复杂度的主要来源之一。
Coordination是什么?
Coordination指多个Agent为达成共同或部分共同的目标,在动作选择上相互配合、避免冲突或重复的过程。Coordination并不要求Agent之间事先协商,很多情况下是通过观察对方历史行为、建立某种隐式约定实现的。Coordination失败的典型表现是多个Agent选择了理论上都合理、但组合在一起互相抵消甚至冲突的动作,这在General-sum和Cooperative环境中都是常见的训练难点。
Competition是什么?
Competition指Agent之间存在直接利益冲突,一方的收益提升通常伴随另一方收益下降的关系。Competition在Zero-sum环境中最为纯粹,但在General-sum和Mixed环境中,Competition往往只发生在局部或特定阶段,和Cooperation交替出现。开元棋牌多智能体关注的是Competition关系如何随局势变化,而不是把它当成贯穿始终的固定标签。
Credit Assignment是什么?
Credit Assignment指在多个Agent共同产生一个团队结果(尤其是团队Reward)之后,判断这个结果具体由哪些Agent、哪些Action贡献而来的问题。团队Reward往往是稀疏且延迟的,某个Agent的关键动作可能发生在结果出现之前很多步,这使得直接把最终Reward归因到某个具体动作变得困难,是Multi-Agent训练中公认的核心难题之一。
Non-stationarity是什么?
Non-stationarity指从单个Agent的视角看,Environment的转移规律和Reward反馈会随时间发生变化,原因是其他Agent的Policy也在同步更新。单智能体RL依赖的"Environment对固定Policy的响应是稳定的"这一前提在Multi-Agent场景下不再成立,同一个动作在不同训练阶段可能得到完全不同的反馈,这直接影响训练的收敛性和稳定性。
Opponent Modeling是什么?
Opponent Modeling指Agent尝试根据对手过去的行为、动作分布等可观测信息,推测对手当前或未来可能采取的Policy,从而调整自己的决策。Opponent Modeling的难点在于对手的Policy本身可能在持续变化,静态建立一次的模型很快会过时,需要结合Non-stationarity问题一起考虑,并持续用新的观测数据更新对对手的估计。
多个AI同时学习为什么困难?
多个AI同时学习的困难来自几个因素叠加:Environment对每个学习者而言是Non-stationary的,训练目标本身在持续漂移,难以收敛到一个稳定点;Joint Action空间随Agent数量增长过快,探索效率明显下降;团队场景下存在Credit Assignment难题,Reward信号稀疏且难以准确归因到具体Agent的具体动作;此外General-sum和Mixed环境下Coordination与Competition交替出现,单一固定的训练目标和评估标准往往很快就不再适用,需要不断重新校准。
原创研究文章

开元棋牌多智能体:3篇原创研究文章

开元棋牌多智能体:三个Agent同时改变Policy以后,为什么任何一个Agent看到的Environment都在不断变化?

单智能体强化学习有一个几乎从不被单独强调、却被默认成立的前提:Environment对于学习中的Agent来说是静止的。给定同一个状态、采取同一个动作,转移到下一个状态的概率分布和获得的Reward是稳定的,不随训练进程改变。正是这个前提,才让"求解一个固定MDP的最优Policy"这件事变得有意义——Environment不动,Agent才有一个明确的、可以逐步逼近的目标。

开元棋牌多智能体在观察三个Agent同时训练的场景时,第一个要处理的问题就是这个前提不成立了。设想三个Agent A、B、C同时参与同一个博弈,各自持有自己的Policy,并且都在用各自采集到的经验数据同步更新。对Agent A而言,它所处的"Environment"并不只是棋盘规则本身,而是棋盘规则叠加上B和C当前的Policy——B和C会做什么,直接决定了A执行某个动作之后会得到什么样的下一状态和Reward。

问题在于,B和C的Policy并不是固定的。它们和A一样,也在根据自己观察到的经验持续更新。于是就出现了这样一个循环:A的最优Policy依赖B、C当前的Policy;B、C的Policy会因为训练而改变;一旦B、C改变,A原来针对旧版本B、C计算出来的"最优"就未必还是最优。A更新自己的Policy去适应新的B、C,而A的更新又会反过来改变B、C所面对的Environment,迫使B、C也要重新适应。三个Agent互相追逐着一个不断移动的目标,谁都没有一个真正静止的参照物。

这就是Non-stationarity在Multi-Agent场景下的具体含义:从任何一个Agent的局部视角看,它所面对的转移规律和Reward反馈随时间在变化,而变化的根源不是外部随机性,而是其他学习者的Policy更新。这一点和普通意义上"环境有噪声""环境有随机性"是两回事——噪声通常有稳定的统计特性,可以被建模和平均掉;但Non-stationarity意味着连"用来描述环境的模型"本身都在漂移,历史采集到的经验数据描述的可能已经是一个不再存在的旧环境。

这种情况对训练稳定性的影响是具体而且可以观察到的。首先是价值估计失真。Agent A用过去若干轮采集的经验去估计某个状态-动作对的价值,但如果这些经验采集于B、C的旧Policy阶段,而B、C现在已经切换到新Policy,那么A基于旧经验算出来的价值估计对当前局面已经不再准确,继续用它来指导决策,相当于在用一张过时的地图找路。

其次是训练过程容易出现震荡而非平稳收敛。如果没有额外机制处理这种相互追逐的关系,三个Agent的Policy可能出现类似"剪刀石头布"式的循环:A针对B、C的旧版本调整到某种状态,B据此调整,C再据此调整,调整完一圈之后A面对的局面又变了,于是重新开始调整,却始终没有稳定到某个可以停下来的点。这种循环本身在理论上和实践中都是Multi-Agent训练里非常典型的现象,开元棋牌多智能体在记录训练日志时,经常能观察到几个Agent的胜率、动作分布在若干轮次之间反复摆动而不收敛的情况。

第三个影响是经验数据的时效性问题。单智能体RL里,经验回放池(如果使用)里的旧数据通常仍然是对同一个Environment的有效样本,只是可能不如新数据精确。但在三个Agent同步更新的场景下,较早采集的联合经验描述的是一个已经不存在的联合Policy组合,继续把它当作当前Environment的代表性样本使用,可能会引入系统性的偏差,这也是为什么处理Non-stationarity往往需要对经验数据的"新鲜度"格外敏感。

举一个具体一点的例子帮助理解这种现象:假设A在训练早期学会了针对B、C当时相对保守的走法采取某种激进策略,并因此在一段时间里维持着不错的表现。如果B、C后续逐渐学会了识别并反制这种激进策略,A原本管用的Policy会在自身没有做任何改变的情况下,表现突然出现下滑。对A而言,这种下滑很容易被误读成自己的Policy出了问题,需要推倒重来,但更准确的解读是Environment——也就是B、C当前的联合Policy——已经变了,A实际面对的是一个新问题,而不是旧问题的延续,这两种解读会指向完全不同的调整方向。

从工程角度看,这种问题没有一个能一次性解决的通用方案,更多是需要在具体场景里权衡:是让某些Agent的更新频率放慢从而给其他Agent更稳定的参照,还是引入某种形式的历史Policy记录让Agent对"过去自己面对过的对手版本"有更完整的认识,又或者接受一定程度的震荡,只关注长期平均表现而不是逐轮的稳定性。开元棋牌多智能体这一研究模块目前更多是把这类现象如实记录下来,分析它出现的条件和表现形式,而不是宣称已经找到某种通用的解决办法——三个Agent同时改变Policy这件事本身,决定了"稳定"在这里从来不是默认状态,而是需要专门争取的结果。

一个多Agent团队最终获得较高Reward以后,为什么仍然很难判断究竟是哪一个Action真正产生了贡献?

多Agent团队任务中,最终结果通常以团队整体的Reward形式呈现:赢了这一局,团队所有Agent共享一个正向Reward;输了,所有Agent一起承担负向Reward。这种设计在博弈规则层面是合理的——胜负本来就是团队层面的结果,不属于某一个Agent单独拥有。但这也带来一个直接的训练难题:当团队Reward出现之后,怎么知道这个结果里,哪个Agent、哪一步Action真正起了作用,哪些只是恰好在场?这就是Credit Assignment问题,开元棋牌多智能体在处理团队类场景时,几乎每次都会碰到它。

这个问题难在两个地方。第一是团队Reward的稀疏性。很多棋牌类博弈里,中间过程不会持续给出明确的Reward信号,真正的Reward往往只在整局结束时才出现一次。这意味着团队在几十步、上百步的交互过程中做了大量Action,但只有最后一个标量结果可以用来学习。把这一个结果平均分摊给之前所有的Action,显然是不准确的——不是每一步都同等重要,但系统本身并没有直接告诉你哪一步更重要。

第二是延迟性。团队最终获胜的关键动作,可能发生在游戏中段甚至前期,当时的局面变化并不直接体现为立即可见的收益,要再过很多步之后,它的价值才通过后续一系列互动逐渐显现出来。这种延迟使得"这个Action导致了后面的好结果"这种因果关系很难通过时间上的临近性来判断,一个Agent的关键伏笔和另一个Agent后来的临门一脚之间,可能隔着大段和结果关系不大的常规交互。

更麻烦的是,团队内部多个Agent的Action是交织在一起共同影响局面的,不存在一个可以干净拆开的"各自贡献"。某个Agent的动作创造了机会,另一个Agent的动作利用了这个机会,最终结果同时依赖两者,任何一方缺席结果都会不同,但也不能简单说其中一方贡献了百分之多少。这和单Agent场景下"这一步动作直接导致了这个Reward"的清晰因果链完全不是一回事。

面对这个问题,常见的缓解思路大致有两类,但都有需要留意的权衡。第一类是反事实基线(Counterfactual Baseline)的思路:通过对比"这个Agent执行了实际Action"和"这个Agent换成某个默认或基准Action、其他Agent不变"两种情况下团队Reward的差异,估计这个Agent这一步Action的边际贡献。这个思路在直觉上合理,但代价也很明显——计算或估计这种反事实情形本身需要额外的建模假设,基准Action选得是否合理直接影响估计的准确性,而且当团队规模变大、Action空间变复杂时,反事实估计的方差会明显上升,估计结果本身也可能不稳定。

第二类是引入某种局部Reward设计,给每个Agent补充一些更贴近其自身行为的中间信号,而不完全依赖最终的团队Reward。这样做的好处是能缓解稀疏性和延迟性带来的学习困难,让每个Agent更快获得关于自己动作好坏的反馈。但代价是局部Reward的设计本身依赖人为判断,如果设计得不够贴合团队目标,Agent可能会学到只优化局部信号、却对团队整体目标帮助有限甚至有害的行为——这种局部最优和全局目标脱节的风险,在实际训练中并不少见。

这两类思路还有一个共同的局限,就是它们都没有真正解决问题,只是把难度换了一种形式。反事实基线把"哪个Action有贡献"的问题,换成了"基准Action该怎么选、反事实该怎么估计"的问题;局部Reward设计把"团队Reward怎么拆分"的问题,换成了"局部信号该怎么设计才不会偏离团队目标"的问题。这两个换算之后的问题同样不简单,尤其是当团队规模从两三个Agent扩大到更多Agent时,反事实估计要考虑的组合情况和局部Reward要覆盖的行为模式都会同步变得更复杂,缓解思路本身的成本也在上升,并不是选定一种方法之后就可以一劳永逸。

开元棋牌多智能体目前对这个问题的态度是把它当作一个需要持续观察、而不是一次性解决的课题:不同的缓解方法在不同的团队规模、不同的博弈结构下表现差异很大,没有哪一种方法能保证在所有场景下都给出准确的贡献拆分。较为务实的做法,是在具体场景里同时观察团队整体表现和各Agent的局部行为模式,把Credit Assignment的估计结果当作参考而不是精确答案,持续对照实际复盘调整判断。

多人策略环境出现临时合作和竞争转换以后,为什么固定Opponent标签可能很快失效?

在两人Zero-sum博弈里,Opponent这个概念是清晰且稳定的:只有一个对手,双方利益完全对立,给对手建立一个"倾向于怎么行动"的模型,这个模型的适用范围在整局游戏中基本不会发生结构性变化。但开元棋牌多智能体关注的很多多人棋牌场景并不是这种结构,而是General-sum甚至更复杂的Mixed Interaction——多个Agent同时存在,彼此的利益关系既不完全一致也不完全对立,这种场景下"谁是我的对手"这个问题本身可能会随着局势变化而变化。

一个常见的现象是阶段性合作。当场上存在某个明显领先或者对其他所有人都构成威胁的Agent时,原本互相竞争的其他几方,可能会在客观利益上出现临时的一致性——即便没有显式沟通,单纯从各自Reward最大化的角度出发,压制领先者对大家都有利,这就形成了一种事实上的临时合作关系。但这种合作的基础是"共同的威胁存在",一旦威胁解除,比如领先者被压制下去,原来临时合作的几方之间又会重新出现利益分歧,合作关系随之瓦解,重新转为竞争。

这种阶段性合作、阶段性竞争的转换,不是随机发生的,而是由局势结构决定的——具体说是由当前各方的相对局面、各自的Reward结构在那个时刻的排列组合决定的。局势一变,原来合理的合作关系可能立刻不再合理,这个转换的速度可能比较快,不是那种可以提前几十步预判的缓慢趋势。

这对Opponent Modeling提出了一个直接的挑战。如果建模方式是给每个其他Agent贴一个相对固定的标签——比如把某个Agent标记为"倾向于合作型",把另一个标记为"倾向于竞争型",然后用这个标签去预测对方接下来的行为、指导自己的决策,这种静态标签在两人Zero-sum环境下可能还有一定的稳定性,但放到General-sum和Mixed环境里,很容易在局势发生转折之后迅速失效——上一阶段被标记为"合作型"的Agent,可能在局势变化后的下一阶段就转为直接竞争,如果Opponent Model没有跟上这个变化,继续按照旧标签去预期对方的行为,预测出的对手行为和实际行为会出现明显偏差,基于这种偏差做出的决策自然也会受到影响。

需要注意的是,这种失效不是Opponent Modeling方法本身设计得不好,而是问题结构决定的——General-sum和Mixed Interaction本身就不存在一个可以从头用到尾的、单一的对手关系定义。合作或竞争不是这些Agent的固有属性,而是特定局势下利益结构的产物,局势变了,属性自然也要跟着变。想要给这类环境下的Opponent Modeling找一个"一次建模、全程适用"的方案,某种程度上是在用不适合这个问题结构的思路去处理它。

这里还有一个容易被忽略的细节:阶段性合作往往不需要任何显式协议就能出现,也往往不需要显式协议就能瓦解,这意味着单纯观察"这两个Agent是否有过合作行为"这种表面信号,并不足以判断它们之间的关系性质。同一对Agent,在某一段交互里表现得高度一致,换到另一段交互里可能表现得针锋相对,如果只看某个时间窗口内的统计平均,很容易把这种阶段性现象误判成某种稳定的长期倾向,进而给出方向错误的判断,这也是静态标签容易失真的另一个来源。

比较符合这类环境特点的做法,是把Opponent Modeling当成一个需要持续更新的过程,而不是一次性完成的建模任务——不断根据对方最新的行为观测调整对其当前倾向的估计,并且对"关系可能随时反转"这件事本身保持敏感,而不是假设关系一旦建立就会持续稳定。同时,这也意味着评估一个Opponent Model好不好,不能只看它在某个固定阶段预测得准不准,还要看它在局势发生转折的那些关键时间点上,能不能比较快地跟上变化,而不是继续沿用已经过时的判断。

开元棋牌多智能体在这一类问题上的记录重点,就是尽量捕捉这些转折点具体是在什么条件下发生的,以及固定标签式建模在转折点前后的表现差异,把这些观察作为后续讨论动态Opponent Modeling方法时的具体参照,而不是停留在"环境是动态的"这种笼统结论上。