想象你是一名足球教练,面对一支刚组建的球队:门将守门、前锋进攻、中场组织,11 名球员各司其职,但每个人在场上只能看到自己周围十几米的画面。你要让这支队伍学会配合——什么时候传球、什么时候跑位、什么时候射门。更棘手的是,对手也在不断变阵,你练好的战术可能转眼就失效。这就是多智能体强化学习(Multi-Agent Reinforcement Learning,简称 MARL)要面对的世界:多个智能体在同一个共享环境里,通过不断试错,学会协作或竞争。 从一个人踢球到一支球队比赛,难度发生了质变:环境不再稳定(别人也在学)、功劳不好分(进球是全队的)、计算量暴涨(人越多状态空间越大)。为了应对这些挑战,研究者提出了“集中训练、分散执行”的思路,并发展出 MADDPG、MAPPO 两大代表性算法。它们就像“训练时教练看全局,比赛时球员自己决断”。这篇文章会用一支球队的故事,带你从零认识 MARL:它要解决什么、有哪些经典算法、如何评估、应用在哪、以及新手最容易踩的坑。

岗位关联

掌握 MARL 的核心挑战与主流算法,你就能在多智能体系统的实际项目中正确选型、设计奖励与评估方案,这是走向自动驾驶、无人机集群、游戏 AI 等前沿岗位的关键一步。

目录
  1. 可视化演示
  2. MARL基本概念
  3. 核心挑战
  4. 设计蓝图
  5. MADDPG算法
  6. MAPPO算法
  7. 评估方法
  8. 应用蓝图
  9. 避坑指南
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

MARL基本概念

一个人练射门,球门不会跑,皮球怎么弹有规律可循,你只需不断调整自己的脚法。可一旦上了 11 人制的球场,情况完全不同:队友在跑位、对手在抢断、守门员会预判你的假动作。每个球员都只能看到眼前几米的画面,却要做出影响全场的决策。这就是单智能体强化学习与多智能体强化学习(MARL)最直观的区别——从“一个人修炼”变成“一支球队作战”。

学术上,单智能体强化学习的世界叫“马尔可夫决策过程”(MDP),多智能体的世界叫“马尔可夫博弈”(Markov Game)。MDP 里只有一个决策者,世界的变化只由它自己的动作决定;而在马尔可夫博弈里,N 个智能体同时做决策,世界下一秒变成什么样,取决于所有人的动作合在一起的效果。

每个智能体的完整处境,可以用一个七元组来描述:

把这张“比赛说明书”装进脑子,你就明白 MARL 在研究什么:如何在每个人只看到局部、只控制自己的情况下,让整支队伍在共享的绿茵场上取得最好的长期结果。接下来的每一章,都是在解决这张说明书里某个刁钻的环节。

G=⟨S,{Oi}i=1N,{Ai}i=1N,{Ri}i=1N,T,γ⟩\displaystyle G = \left\langle S, \{O_i\}_{i=1}^{N}, \{A_i\}_{i=1}^{N}, \{R_i\}_{i=1}^{N}, T, \gamma \right\rangle
这个公式是 MARL 的“比赛说明书”:一群人(N 个智能体)共享一个世界(S),各看各的(O_i),各做各的(A_i),各拿各的分(R_i),共同推动世界演化(T)。
  1. 状态集合 S整个球场上所有值得关注的信息,包括足球和所有球员的位置。
    SS
  2. 观测集合 O_i第 i 个球员实际能看到的局部画面,通常只占全局信息的一小部分。
    {Oi}i=1N\{O_i\}_{i=1}^{N}
  3. 动作集合 A_i第 i 个球员可以选择的技术动作,如传球、跑位、射门。
    {Ai}i=1N\{A_i\}_{i=1}^{N}
  4. 奖励集合 R_i每个球员得到的反馈分数,可以相同也可以不同,取决于我们怎么定义“好坏”。
    {Ri}i=1N\{R_i\}_{i=1}^{N}
  5. 转移函数 T世界演化的规则,描述所有人做出动作后状态如何变化,它是概率性的而非确定的。
    T:S×A1×⋯×AN→Δ(S)T: S \times A_1 \times \cdots \times A_N \to \Delta(S)
  6. 折扣因子 γ教练的目光远近,越接近 1 越看重长期收益,越小越看重眼前利益。
    γ∈[0,1)\gamma \in [0, 1)

核心挑战

为什么带一支球队比带一个球员难十倍?想象这个场景:你辛辛苦苦练了一周的边路传中战术,结果对手这周改打三中卫,你的战术瞬间失灵。更崩溃的是,队友也在进步——他改变了跑位习惯,你原本的传球路线就废了。在 MARL 里,这种“身边的一切都在变”的处境有个专门的名字:非平稳性。

站在任意一个智能体 i 的视角,它感知到的世界规律是这样计算的:

除了非平稳,还有三个头疼的问题。其一是信用分配:一次成功的团队进球,到底是传球的人、跑位的人还是射门的人功劳大?团队奖励是一锅粥,没人知道每粒米是谁煮熟的。其二是部分可观测:每个球员只有局部视野,但决策又依赖全局信息。其三是扩展性:智能体数量一多,联合状态和联合动作空间指数爆炸,计算量像滚雪球一样失控。

非平稳让“活在昨天”的经验作废,信用分配让“论功行赏”无法进行,部分可观测让“闭眼踢球”成为日常,扩展性让“人多力量大”变成一句空话。这四座大山正是 MARL 算法设计的出发点。理解了敌人长什么样,下一章的算法我们就能看懂它如何见招拆招。

P(s′∣s,ai)=∑a−iP(s′∣s,ai,a−i)×π−i(a−i∣o−i)\displaystyle P(s' \mid s, a_i) = \sum_{a_{-i}} P(s' \mid s, a_i, a_{-i}) \times \pi_{-i}(a_{-i} \mid o_{-i})
这个公式解释了“为什么别人的学习让你头晕”:你眼中的世界规律,是别人策略的“平均值”。别人一变,平均值就变,你的世界也跟着变。
  1. 左边 P(s' | s, a_i)智能体 i 眼中,从状态 s 出发做完动作 a_i 后到达 s' 的概率。
    P(s′∣s,ai)P(s' \mid s, a_i)
  2. a_{-i} 的含义除 i 之外所有其他智能体的动作组合。
    a−i=(a1,…,ai−1,ai+1,…,aN)a_{-i} = (a_1, \dots, a_{i-1}, a_{i+1}, \dots, a_N)
  3. 世界固有规律 P(s' | s, a_i, a_{-i})给定所有人的动作后,环境本身的演化规则。
    P(s′∣s,ai,a−i)P(s' \mid s, a_i, a_{-i})
  4. 他人策略 π_{-i}(a_{-i} | o_{-i})其他球员当前采用的战术,它决定别人会做什么动作。
    π−i(a−i∣o−i)\pi_{-i}(a_{-i} \mid o_{-i})
  5. 求和消元把别人的动作按概率“平均”掉。问题来了——别人也在训练,π_{-i} 每时每刻都在变,所以哪怕环境规则没变,智能体 i 眼中的规律也在不断漂移。
    P(s′∣s,ai)=Ea−i∼π−i[P(s′∣s,ai,a−i)]P(s' \mid s, a_i) = \mathbb{E}_{a_{-i} \sim \pi_{-i}}\left[P(s' \mid s, a_i, a_{-i})\right]

设计蓝图

面对这四座大山,聪明的教练们想到一个巧妙的折中方案。平时训练时,教练站在场边高台上,拿着战术板,能看到全场每个球员的位置、体力、对手的阵型——这是“集中”的优势。但真正比赛时,教练不能在场边喊出每一个动作,球员必须靠自己眼睛看到的画面临场决断——这是“分散”的现实。

这个思路在 MARL 里被称为“集中训练、分散执行”(Centralized Training with Decentralized Execution,简称 CTDE)。训练阶段,算法可以用的信息不受限制,所有智能体的观测、动作、奖励都可以喂给一个“中央大脑”;执行阶段,每个智能体只能用自己的局部观测做决策。MADDPG 和 MAPPO 都是这个框架的代表,区别在于它们各自用了什么样的“中央大脑”。

每个智能体的目标可以用一个统一的式子表达:

在 CTDE 蓝图下,算法设计者还要做两个决定:奖励怎么分配——全员共享一个团队奖励,还是每人奖罚分明?通信怎么进行——允许智能体之间显式对话,还是只能默默观察?不同任务有不同答案:足球里前锋和后腰的“分工奖励”当然不同,但打麻将时四家共享同一桌的输赢。把握住“集中训练、分散执行”这个总纲,后面的算法细节就不会迷路。

Ji(πi)=Eτ∼Pπ[∑t=0Tγtrit]\displaystyle J_i(\pi_i) = \mathbb{E}_{\tau \sim P_\pi}\left[\sum_{t=0}^{T} \gamma^t r_i^t\right]
这个公式是每个球员的“人生目标”:在所有人的策略构成的概率世界里,让自己的长期折扣回报最大。
  1. π_i 与 J_iJ_i 是智能体 i 的“长期收益预期”,π_i 是它的策略——“看到什么情况做什么动作”的决策规则。
    Ji(πi)J_i(\pi_i)
  2. 轨迹 τ从比赛开始到结束的一条完整过程,包括每个时刻的状态和动作。
    τ=(s0,a0,s1,a1,…,sT)\tau = (s_0, a_0, s_1, a_1, \dots, s_T)
  3. 概率 P_π这条轨迹出现的概率,由所有智能体的策略共同决定,这正是多智能体和单智能体的本质区别。
    τ∼Pπ\tau \sim P_\pi
  4. 折扣累计回报把每一时刻的奖励按 γ 指数衰减后加总,既看重眼前也看长远。
    ∑t=0Tγtrit\sum_{t=0}^{T} \gamma^t r_i^t

MADDPG算法

2017 年,研究者提出 MADDPG(Multi-Agent Deep Deterministic Policy Gradient),把“集中训练、分散执行”真正落地。可以这样理解:每个球员上场时只靠自己眼睛做动作,但训练时每个球员身边都配了一位拿着全场监控画面的助理教练(Critic)。这位助理教练能看到所有人的动作,然后告诉这个球员:“刚才那个传球,如果你早半秒,得分期望会更高。”

MADDPG 采用 Actor-Critic 结构。每个智能体 i 有自己的策略网络 μ_i(Actor),负责根据局部观测输出动作;还有一个评估网络 Q_i(Critic),负责给“所有人当前状态下的联合动作”打分。关键就在这个 Critic 上——它不再是单智能体里“只看自己动作”的打分器,而是能看到所有智能体动作的“全局分析师”。

MADDPG 的更新公式长这样:

MADDPG 还有两个细节值得记住:一是经验回放池,所有智能体共享一份“比赛录像集”,随机抽样本打破时间相关性;二是对手建模,Critic 不需要知道其他智能体的真实策略,而是用目标网络近似它们的动作,就像教练根据对手最近的比赛录像预判对方打法。这套“全局评估 + 局部决策”的组合拳,让 MADDPG 在连续动作的协作与竞争任务中大放异彩。

∇θiJ(μi)=Ex∼D[∇θiμi(ai∣oi)×∇aiQiμ(x,a1,…,aN)∣ai=μi(oi)]\displaystyle \nabla_{\theta_i} J(\mu_i) = \mathbb{E}_{x \sim \mathcal{D}}\left[\nabla_{\theta_i} \mu_i(a_i \mid o_i) \times \nabla_{a_i} Q_i^{\mu}(x, a_1, \dots, a_N)\Big|_{a_i = \mu_i(o_i)}\right]
这个公式是球员的“训练动作”:通过经验回放池里的录像样本,算出自己的动作往哪个方向调、自己的参数往哪个方向改,能让助理教练的评分更高。
  1. θ_i 与 J(μ_i)θ_i 是第 i 个球员策略网络的参数,J(μ_i) 是它的长期收益预期。
    ∇θiJ(μi)\nabla_{\theta_i} J(\mu_i)
  2. 经验池 x ~ D从所有历史比赛记录里随机抽一批样本,每条样本包含所有智能体的观测和动作。
    x=(o1,…,oN,a1,…,aN)x = (o_1, \dots, o_N, a_1, \dots, a_N)
  3. 全局 Critic Q_i^μ第 i 个球员的助理教练,输入全队动作,输出对第 i 个球员的评价。
    Qiμ(x,a1,…,aN)Q_i^{\mu}(x, a_1, \dots, a_N)
  4. 动作梯度 ∇_{a_i} Q如果第 i 个球员的动作稍微变化一点,助理教练的打分会怎么变?它告诉球员“该往哪个方向调整动作”。
    ∇aiQiμ(x,a1,…,aN)\nabla_{a_i} Q_i^{\mu}(x, a_1, \dots, a_N)
  5. 策略梯度 ∇_{θ_i} μ_i球员如何更新自己的技能,让他的动作更倾向于落在“高分区”。
    ∇θiμi(ai∣oi)\nabla_{\theta_i} \mu_i(a_i \mid o_i)

MAPPO算法

MADDPG 虽然好,但它继承了 DDPG 的脾气——对超参数敏感,训练不稳定,像一个状态起伏的天才球员。2022 年,一篇论文《The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games》让一个“老实人”逆袭:把单智能体里以稳定著称的 PPO 算法稍加改造用到多智能体场景,效果竟然出奇地好。这个方案就是 MAPPO。

回忆单智能体 PPO 的核心思想:它不追求每一步都迈得很大,而是让新旧策略的差异始终控制在一个安全范围内,宁肯慢一点,也不许“一步走错,满盘皆输”。MAPPO 让所有智能体共享一套策略网络参数,相当于全队读同一本战术手册,只是每个人输入的观测不同。这一点和 MADDPG 每个智能体各有各的网络很不一样。

MAPPO 的目标函数:

为什么 MAPPO 在协作场景里这么能打?首先,参数共享让数据利用率翻倍——每个球员的经验都成了全队共同的养料。其次,它同样可以引入集中式 Critic,在训练时用全局信息估计优势函数。还有一个常被忽视的细节:MAPPO 论文特别强调要开大量并行环境收集样本,就像同时约 100 场训练赛,用海量经验对冲非平稳性。所以如果解决的是纯协作问题,MAPPO 往往是更省心的首选。

LCLIP(θ)=Et[min⁡(rt(θ)A^t,clip⁡(rt(θ),1−ϵ,1+ϵ)A^t)]\displaystyle L^{CLIP}(\theta) = \mathbb{E}_t\left[\min\left(r_t(\theta) \hat{A}_t, \operatorname{clip}\left(r_t(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_t\right)\right]
这个公式是“保守训练”的保证:新战术手册跟旧手册差别太大时,直接踩刹车,确保每个版本更新都小而稳。
  1. 概率比 r_t(θ)新旧两套战术书在同一个动作上的概率之比,接近 1 说明新战术书没有激进改动。
    rt(θ)=πθ(at∣ot)πθold(at∣ot)r_t(\theta) = \frac{\pi_\theta(a_t \mid o_t)}{\pi_{\theta_{\text{old}}}(a_t \mid o_t)}
  2. 优势函数 Â_t这个动作比平均水平的“好多少”,正数说明该做,负数说明该避免。
    A^t=Rt−V(st)\hat{A}_t = R_t - V(s_t)
  3. clip 限幅把概率比强制夹在 [1-ε, 1+ε] 之间,超出窗口的更新直接砍掉,防止步子太大。
    clip⁡(rt(θ),1−ϵ,1+ϵ)\operatorname{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)
  4. min 取小对被裁剪和未被裁剪的两个目标取最小值,保证任何情况下都不追求激进的一步。
    min⁡(原始目标,裁剪目标)\min(\text{原始目标}, \text{裁剪目标})

评估方法

球队训练了一个赛季,怎么判断它到底强不强?只看训练赛里的进球数?不够——因为对手可能是陪练的老年队。真正靠谱的方法是拉出去打正式友谊赛,换不同风格的对手,多打几场,再看综合胜率。MARL 的评估也是同一个道理。

最常见也最直观的指标是胜率:让训练好的多智能体系统与固定对手(或多种对手)对局 M 次,统计获胜比例。另一个常用指标是平均折扣回报,它能反映系统在测试中积累的长期收益:

光看平均回报还不够,好的评估还要做三件事:一是换对手——分别和弱队、强队、风格迥异的队伍过招,看系统面对陌生策略时是否还站得住,这叫鲁棒性测试;二是换场景——改变环境地图、初始位置、障碍物,防止智能体“背答案”;三是曲线分析——不只看最终数字,还要看训练过程中回报曲线是否平稳上升、有没有突然崩溃,这能暴露算法稳定性问题。

一句话总结评估的哲学:训练报告写得再漂亮,都不如和不同对手的实战检验来得硬核。就像足球教练说的,“数据会撒谎,但比分不会”。在设计 MARL 项目时,提前定义好“对手池”和“场景池”,评估才不会变成自嗨。

Rˉ=1M∑k=1M∑t=0Tkγtrt(k)\displaystyle \bar{R} = \frac{1}{M} \sum_{k=1}^{M} \sum_{t=0}^{T_k} \gamma^t r_t^{(k)}
这个公式是“友谊赛结算单”:打 M 场友谊赛,把每场的总得分求平均,得到这个系统的真实水平。
  1. k 与 M一共测试 M 局,用 k 遍历每一局,消除单局运气的成分。
    ∑k=1M\sum_{k=1}^{M}
  2. 一局累计回报第 k 局从中场踢到终场,把每个时刻的奖励按折扣加总。
    ∑t=0Tkγtrt(k)\sum_{t=0}^{T_k} \gamma^t r_t^{(k)}
  3. 求平均把 M 局结果取平均,得到系统的稳定水平。
    1M∑k=1M⋯\frac{1}{M} \sum_{k=1}^{M} \cdots

应用蓝图

球场上的配合智慧,一旦掌握了,就能走出球场来到真实世界。想想看:无人机群在山谷里搜救,十几架飞机要在没有地面指挥的情况下自动划分搜索区域、避开彼此;十字路口没有红绿灯,自动驾驶汽车要互相礼让、交替通行;游戏里五个英雄要推塔,需要有人抗伤、有人输出、有人控制。这些场景的共同点是:多个决策者共享一个环境,必须学会协作或竞争。

以无人机集群协同搜救为例,我们可以把任务建模成“覆盖最大化”问题:每架无人机负责一块区域,整体目标是最小化搜索盲区,同时保持安全距离避免相撞:

这类问题如果写死规则,环境一变就崩溃;如果让每架无人机独立训练,它们又会互相干扰。用 MARL 来解:每架无人机是一个智能体,机载传感器看到的是局部观测,奖励函数把“覆盖率提升”和“碰撞惩罚”揉在一起,训练出来的策略天然具有协作性。同样的配方也适用于自动驾驶路口博弈——车辆之间不需要交流,只要观察彼此的轨迹,就能学会交替通行;游戏 AI 里,MAPPO 让多个英雄共享策略参数,打出团队配合。

从足球场到无人机群,再到自动驾驶和游戏世界,MARL 的底层逻辑都是同一套:在共享环境里,用局部视野做决策,用全局信息做训练,让个体与整体的目标在奖励设计上达成一致。这套“协作共赢”的智慧,正是群体智能在现代 AI 中最迷人的体现。

max⁡p1,…,pN∣⋃i=1NCi∣s.t.∥pi−pj∥≥dmin⁡\displaystyle \max_{p_1, \dots, p_N} \left| \bigcup_{i=1}^{N} C_i \right| \quad \text{s.t.} \quad \|p_i - p_j\| \geq d_{\min}
这个公式是无人机群的“战术目标”:覆盖面积越大越好,但谁也不能和队友撞在一起。
  1. p_i 与 C_i第 i 架无人机的位置,以及它机载传感器能覆盖的圆形范围。
    Ci={q:∥q−pi∥≤r}C_i = \{q : \|q - p_i\| \le r\}
  2. 并集中的竖线所有覆盖区域的并集大小,即整个机群的实际有效覆盖率。
    ∣⋃i=1NCi∣\left| \bigcup_{i=1}^{N} C_i \right|
  3. s.t. 约束条件任意两架无人机之间的距离必须不小于最低安全距离 d_min。
    ∥pi−pj∥≥dmin⁡\|p_i - p_j\| \geq d_{\min}

避坑指南

见过太多新手教练,满怀信心带队,结果赛季一结束就下课。他们的错误非常相似,几乎是 MARL 项目里固定的“翻车四件套”。对照检查,能帮你省下几个月的调参时间。

第一个大坑是忽视非平稳性,直接把多个单智能体 Q-learning 拼在一起训练。前面讲过,其他智能体的策略在变,你的 Q 表等于在追逐一个移动的靶子,永远追不上。第二个大坑是奖励失衡:如果只给团队共享奖励,队伍里会出现“搭便车”的懒汉——反正赢了大家都有分,谁出力谁傻;反过来,如果只给个人奖励,又无法促成合作。常见的补救办法是把两种奖励按系数混合:

第三个大坑是训练崩溃:在竞争场景里,如果一方智能体进步太快,另一方会因“永远输”而学不到有效信号,最终双方都停滞。解决办法是引入“课程学习”——从简单对手练起,或让多个历史版本的对手轮流上场。第四个大坑是超参数敏感:MARL 对学习率、批大小、网络结构比单智能体更挑剔,在小规模调好的参数,换一个智能体数量就失效,需要系统做消融实验,而不是拍脑袋一把梭。

这四个坑看着简单,背后却各是一整类失败项目。记住一句话:多智能体系统里,“别人也在变”是常态,“功劳说不清”是常态,“参数难调”也是常态。接受这些常态,用 CTDE、混合奖励、课程训练去对冲它们,你就能稳稳地把项目带到终点线。

Ri=β×Rteam+(1−β)×Rpersonal\displaystyle R_i = \beta \times R_{\text{team}} + (1 - \beta) \times R_{\text{personal}}
这个公式是“奖励配方”:团队奖励管协作,个人奖励管干活,β 决定队伍的“集体主义”浓度。
  1. R_team 团队奖励所有人共享,鼓励协作达成全局目标。
    RteamR_{\text{team}}
  2. R_personal 个人奖励只与自己的动作和状态有关,鼓励做好本职工作。
    RpersonalR_{\text{personal}}
  3. 平衡系数 β协作与个人表现的旋钮,β 越大队伍越“讲集体”,越小越“讲个人”,需要按任务调试。
    β∈[0,1]\beta \in [0, 1]

AI 应用场景

无人机集群协同搜索

阶段:训练与规划阶段

解决的问题:单架无人机覆盖范围有限,多机协同需要避免重复覆盖和碰撞。传统人工编队规则在复杂地形下僵硬易失效,而 MARL 让每架无人机学会自主协商式分区搜索。

具体案例:灾后山区搜救中,20 架无人机组成编队。用 MADDPG 训练时,每架无人机只接收自己的机载传感器观测(局部视野),但集中式 Critic 能看到所有无人机位置,学会按区域划分覆盖、保持安全间距,整体搜索覆盖率比规则方法提升 30% 以上。

无人驾驶路口博弈

阶段:决策规划阶段

解决的问题:无信号灯路口多车交互(谁先通过、如何礼让)是典型的多智能体博弈。传统规则法在复杂组合场景下需要穷举所有交互情况,容易僵化。

具体案例:四辆自动驾驶汽车在无信号灯十字路口相遇,用 MARL 训练礼让策略。车辆之间不通信,只通过摄像头观察彼此的轨迹和速度,学会交替通行,路口平均通过时间比固定规则提升约 20%,碰撞率显著下降。

游戏AI多单位配合

阶段:策略控制阶段

解决的问题:MOBA 类游戏中一个 AI 需要同时控制多个英雄,完成推塔、团战等需要分工配合的任务,单智能体算法无法处理多单位协作。

具体案例:用 MAPPO 训练 5 个英雄的团队,全部英雄共享一套策略网络参数,但各自输入自己的视野观测。经过大量并行对局训练后,AI 学会“坦克抗伤、射手输出、辅助控场”的分工战术,打团成功率明显高于独立训练的基线。

Python 演示

python79 行
import random  class GridEnv:    """两个智能体, 两个目标点的网格环境"""     def __init__(self, size=5):        self.size = size        self.targets = [(1, 3), (3, 1)]        self.actions = [0, 1, 2, 3]        self.reset()     def reset(self):        self.agents = [(0, 0), (4, 4)]        return self._obs()     def _obs(self):        o1 = self.agents[0] + self.targets[0] + self.targets[1]        o2 = self.agents[1] + self.targets[0] + self.targets[1]        return {0: o1, 1: o2}     def step(self, acts):        moves = [(-1, 0), (0, 1), (1, 0), (0, -1)]        for i in range(2):            dx, dy = moves[acts[i]]            x, y = self.agents[i]            nx, ny = x + dx, y + dy            if 0 <= nx < self.size and 0 <= ny < self.size:                self.agents[i] = (nx, ny)        covered = {t for t in self.targets if t in self.agents}        reward = 1.0 if len(covered) == 2 else 0.0        done = reward > 0        return self._obs(), reward, done  class Agent:    """独立Q学习的智能体, 共享团队奖励"""     def __init__(self, alpha=0.1, gamma=0.9, eps=0.3):        self.q = {}        self.alpha = alpha        self.gamma = gamma        self.eps = eps     def act(self, obs, train=True):        if train and random.random() < self.eps:            return random.choice([0, 1, 2, 3])        vals = [self.q.get((obs, a), 0.0) for a in range(4)]        return vals.index(max(vals))     def update(self, obs, a, r, n_obs):        old = self.q.get((obs, a), 0.0)        nv = max([self.q.get((n_obs, aa), 0.0) for aa in range(4)])        self.q[(obs, a)] = old + self.alpha * (r + self.gamma * nv - old)  def main():    env = GridEnv()    agents = {0: Agent(), 1: Agent()}    wins = 0    episodes = 5000    for ep in range(episodes):        obs = env.reset()        done = False        while not done:            acts = {i: agents[i].act(obs[i]) for i in range(2)}            n_obs, reward, done = env.step(acts)            for i in range(2):                agents[i].update(obs[i], acts[i], reward, n_obs[i])            obs = n_obs        wins += 1 if done else 0        if ep % 500 == 0:            rate = 100.0 * wins / (ep + 1)            print("episode %d, win rate %.2f%%" % (ep, rate))    print("final win rate: %.2f%%" % (100.0 * wins / episodes))  if __name__ == "__main__":    main()
目的:在 5×5 网格上演示两个智能体通过独立 Q-learning 协作占据两个目标点,体会“共享团队奖励 + 各自决策”的多智能体最小闭环。
  1. agents = {0: Agent(), 1: Agent()}创建两个各自维护 Q 表的独立智能体,它们之间没有显式通信
  2. covered = {t for t in self.targets if t in self.agents}检查两个目标点是否被同时占据
  3. reward = 1.0 if len(covered) == 2 else 0.0只有团队目标达成才给奖励,体现稀疏团队奖励
  4. acts = {i: agents[i].act(obs[i]) for i in range(2)}每个智能体只根据自己观测独立决策,对应“分散执行”
  5. agents[i].update(obs[i], acts[i], reward, n_obs[i])用同一个团队奖励分别更新各自的 Q 表,体现“共享奖励下的独立学习”
  6. vals.index(max(vals))选择 Q 值最大的动作,即贪心策略,比赛时不再探索

常见误区

误区我觉得多智能体强化学习很简单,给每个智能体各跑一个单智能体算法,最后把结果合起来不就是多智能体了吗?代码上看着也是“for 每个 agent: 训练”。

正解最大的坑是环境非平稳。别人也在学,你的“环境”一直都在变。就像踢球时对手突然变阵,你按老套路练的射门就不灵了。单智能体算法的“世界稳定”假设在这里被打破,直接拼装会出现训练发散。MADDPG/MAPPO 都是专门设计来解决这个问题的,而不是简单拼装。

为何常见:代码结构上确实很像“多个单智能体并行训练”,初学者容易从形式误判本质,忽略了智能体之间通过环境产生的耦合。

误区我觉得奖励函数差不多就行了,反正强化学习就是让智能体自己试错,多跑几轮它总能学会合作的。

正解奖励是智能体唯一的学习信号。如果只给团队奖励,会出现“搭便车”现象——一个智能体拼命干活,另一个躺平拿分,因为偷懒和努力的回报一样。需要用混合奖励公式 R_i = βR_team + (1-β)R_personal 把团队目标和个人贡献按比例绑定,还要警惕稀疏奖励下学习太慢的问题。

为何常见:人对“奖励=目标”有直觉,但忽略了多智能体场景下奖励还承担着“分工信号”的功能,不是随便给给就行。

误区我觉得集中训练不就是把所有人的观测和动作都拼起来输入 Critic 吗?那当然是信息越多越全,Critic 打分越准,为什么不把所有能拿到的信息都放进去?

正解联合观测空间会随智能体数量指数爆炸,而且大量无关信息会让 Critic 难以聚焦真正重要的信号。就像教练分析比赛,不会把观众席每个表情都录下来看。实际工程中需要根据任务挑选“相关的全局信息”,比如只看其他智能体的位置和意图,而不是把所有原始传感器数据都堆进去。

为何常见:“集中训练的 Critic 能看到全局信息”这个说法,被理解成了“全局信息 = 所有信息 = 越多越好”,忽略了特征选择和计算成本的现实约束。

误区我觉得训练完画一张回报曲线,看看曲线是不是收敛了、数值够不够高,就能判断这个多智能体系统好不好了。

正解回报曲线只能反映“在训练时遇到的对手”下的表现。对手换了策略,你的智能体可能立刻水土不服。正确做法是像拉出去打友谊赛:准备一个包含弱队、强队、风格迥异队伍的“对手池”,外加多种初始状态和地图场景,用平均胜率、鲁棒性等多维度指标评估,才算真正验证了系统能力。

为何常见:单智能体 RL 里评估相对稳定,把这种习惯带到 MARL 就容易忽略“对手也在变”这一关键差异,误把过拟合当成了能力强。

面试题

Q1. MARL 与单智能体强化学习最本质的区别是什么?

单选题 · easy

  • A.需要更庞大的网络规模
  • B.多个智能体共同决策← 正确答案
  • C.只能使用图像类型的输入
  • D.完全不需要环境给奖励

答案:B。MARL 的本质是多个智能体在共享环境中同时决策、相互影响;网络大小、输入类型、奖励有无都不是本质区别。就像一个人练射门和 11 人打比赛,差别在于“场上还有别人”。

Q2. 多智能体环境中的“非平稳性”主要指什么?

单选题 · easy

  • A.环境的奖励函数随机变化
  • B.其他智能体的策略不断变化← 正确答案
  • C.环境地图尺寸时常改变
  • D.计算机算力出现波动

答案:B。非平稳性来自其他智能体在训练中不断更新策略。站在某个智能体的视角,别人的策略一变,自己感知到的世界规律就变了,就像对手突然变阵导致老战术失效。

Q3. 什么是多智能体中的“信用分配”难题?

单选题 · easy

  • A.每个智能体获得的奖励完全相同
  • B.团队成绩难以归功某个个体← 正确答案
  • C.智能体无法观测其他智能体
  • D.训练数据量太大难以分配

答案:B。信用分配指团队成功(或失败)后很难判断每个成员各自贡献了多少。一次进球是传球、跑位、射门共同的功劳,如何把团队奖励合理分解到每个智能体是 MARL 的核心难题之一。

Q4. MADDPG“集中训练分散执行”的含义是什么?

单选题 · mid

  • A.训练时只看各自的本地观测
  • B.训练用全局信息执行用本地观测← 正确答案
  • C.训练和执行全都用全局信息
  • D.训练用 CPU 执行用 GPU 加速

答案:B。这是 CTDE 框架的核心:训练时 Critic 能看到所有智能体的观测和动作(全局信息),而执行时 Actor 只用自己的局部观测做决策,就像“训练时教练看全场,比赛时球员自己判断”。

Q5. MADDPG 中集中式 Critic 的输入包含什么?

单选题 · mid

  • A.仅当前智能体的观测与动作
  • B.所有智能体的观测与动作← 正确答案
  • C.环境全部状态转移概率
  • D.所有智能体的历史奖励

答案:B。MADDPG 的 Critic 输入是 x = (o_1, ……, o_N, a_1, ……, a_N),即所有智能体的观测和动作的拼接,所以才能评估“联合动作”的好坏,帮助单个 Actor 找到提升方向。

Q6. 相对单智能体 PPO,MAPPO 的主要改进包括哪些?

多选题 · mid

  • A.多个智能体共享策略参数← 正确答案
  • B.引入集中式 Critic 网络← 正确答案
  • C.完全取消优势函数估计
  • D.多环境并行采样更加稳定← 正确答案

答案:ABD。MAPPO 让所有智能体共享一套策略网络参数并引入集中式 Critic 估计优势;同时论文强调用大量并行环境收集样本来缓解非平稳性。它并没有取消优势函数,PPO 的核心机制仍然保留。

Q7. 为什么标准 Q-learning 难以直接用于 MARL?

单选题 · hard

  • A.因为环境转移概率难以获取
  • B.贝尔曼更新假设环境稳定← 正确答案
  • C.因为 Q 表无法存储连续动作
  • D.因为不需要其他智能体信息

答案:B。Q-learning 的贝尔曼更新假定状态转移函数稳定不变,而 MARL 中其他智能体策略不断变化导致环境非平稳,Q 表等于在追逐移动靶子。转移概率难获取和连续动作问题并非 MARL 特有,也不是主要障碍。

Q8. 评估多智能体系统性能时,正确的做法是什么?

单选题 · mid

  • A.只用训练时的回报曲线
  • B.测试不同对手的鲁棒性← 正确答案
  • C.只看单局比赛的最优表现
  • D.对局长度越长结果越准

答案:B。多智能体评估必须换不同对手、换不同场景做鲁棒性测试,并多局平均消除随机性。训练回报曲线只反映对训练时对手的表现,单局最优或单纯加长对局都不能代表真实水平。

Q9. 无人机集群应用 MARL 时需重点考虑哪些因素?

多选题 · hard

  • A.智能体间保持安全距离← 正确答案
  • B.最大化整体覆盖范围← 正确答案
  • C.每个智能体需要单独训练
  • D.通信受限下的部分可观测← 正确答案

答案:ABD。无人机集群任务的目标通常包括覆盖率最大化和防碰撞约束,同时机载传感器只能提供局部观测,通信受限下必须靠局部信息决策。智能体不需要单独训练,MADDPG、MAPPO 都支持多智能体联合训练,故 C 错。

Q10. MADDPG 梯度公式中 ∇_{a_i}Q_i^μ 的作用是什么?

单选题 · hard

  • A.直接最大化环境的奖励
  • B.指示动作调整方向提升打分← 正确答案
  • C.同时更新所有智能体的策略
  • D.计算经验回放池的采样权重

答案:B。∇_{a_i}Q_i^μ 表示“动作微调后 Critic 打分的变化方向”,告诉智能体 i 的动作应朝哪个方向调能提高评分。它不直接作用于奖励、不更新别人的策略、也不负责采样,只是策略梯度链条中的一环。