你所在的小区组建了一支足球队。过去你练强化学习,像请了一位私教专盯你一个人练射门——球门是死的,环境是静止的。但一支球队完全不同:后卫、中场、前锋 11 个人同时上场,你传球的时机、队友的跑位、对手的逼抢全在动态变化。这,就是多智能体强化学习(Multi-Agent Reinforcement Learning, MARL)要面对的世界。面对这支球队,不同教练有不同带法:懒教练让球员各自回家练球,互不搭话,上场就乱成一团——这是“独立 Q 学习”;聪明教练训练时站在看台上把全场尽收眼底,比赛哨响却不上场,让球员自己踢——这是“集中训练、分布执行”(MADDPG 的核心思路);还有一位精算师教练,设计一套“分钱规则”,把赢球奖池按每个人的贡献拆开,让前锋后卫都服气——这是“值分解”(QMIX)。本文就用这支球队的故事,带你认识 MARL 的主流算法与训练范式。

岗位关联

掌握 MARL 主流算法与训练范式,是多智能体系统落地选型的核心能力,能帮你在协作控制、博弈对战、群体智能等场景中快速定方案、少走弯路。

目录
  1. 可视化演示
  2. 多智能体基础
  3. 独立Q学习
  4. MADDPG算法
  5. QMIX值分解
  6. 训练范式选型
  7. 工程落地挑战
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示MARL主流算法与训练范式的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

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

MARL主流算法与训练范式:独立Q学 独立Q学习IQL的简单性与局限 MADDPG集中训练分散执行设 核心机制可视化 MARL主流算法与训练范式整体架构与关键组件

多智能体基础

一支球队从来不是十一个独立射门机器。你把球传出去,球能不能回来,取决于队友往哪跑;你防守时敢不敢留空档,取决于对手怎么进攻。每个球员既是决策者,又是别人眼中的“移动环境”。这种“人人为我、我为人人”的相互作用,正是多智能体强化学习与单智能体最本质的差异。

在单智能体 RL 里,环境是静止的足球门;在 MARL 里,每个智能体都在学习,于是队友和对手成了你环境里“会动的部分”。要描述这种局面,学术上用马尔可夫博弈(Markov Game):全局状态的变化不取决于某一个人的动作,而是所有人的联合动作共同决定。

围绕这条公式,诞生了 MARL 最著名的两个难题。第一是非平稳性:队友的策略在训练中不断变化,你眼中的“环境规律”就像流沙一样漂移,Q 学习赖以收敛的稳定假设被打破。第二是信用分配:球队 1:0 获胜,功劳该给进球的、助攻的还是整条防线?团队只有一个总奖励,怎么公平地归因到每个球员身上。先看懂这两个难题,后面的算法就有了坐标——就像教练先搞懂球员的位置关系,才能谈阵型与战术。

P(st+1∣st,at(1),at(2),…,at(N))P(s_{t+1} \mid s_t, a_t^{(1)}, a_t^{(2)}, \dots, a_t^{(N)})
这条式子说明:下一个状态的出现概率,由 N 个智能体此刻的动作组合一起决定——就像一次进攻是否得分,取决于传球、跑位、射门三个动作的配合。
  1. 全局状态 s_t所有智能体共同观察到的环境状态,相当于比赛中的“实时比分与全场站位”。
    sts_t
  2. 联合动作 a_t^{(1)} \dots a_t^{(N)}每个智能体各自选一个动作,合起来构成全队下一步的“行动组合”。
    at(1),at(2),…,at(N)a_t^{(1)}, a_t^{(2)}, \dots, a_t^{(N)}
  3. 转移概率 P(s_{t+1} \mid \cdot)环境在这个联合动作下跳到下一状态的概率,是所有智能体动作共同作用的结果。
    P(st+1∣st,at(1),…,at(N))P(s_{t+1} \mid s_t, a_t^{(1)}, \dots, a_t^{(N)})
  4. 非平稳性根源任何一个人的动作分布改变——比如队友换了一种战术——这条转移概率就会跟着变。
    at(i)∼πi(⋅)a_t^{(i)} \sim \pi_i(\cdot)

独立Q学习

最省事的带队方式,是让每个球员各自回家练球:后卫只琢磨防守,前锋只琢磨进攻,谁也不看谁、谁也不等谁。这就是独立 Q 学习(Independent Q-Learning, IQL)——把单智能体 Q 学习复制 N 份,每个智能体用自己的观测、自己的奖励、自己的 Q 表独立更新,把其他智能体统统当作“环境的噪声”。

它的更新公式和单智能体几乎一模一样,只是把下标 i 加在每个符号上:

IQL 的优点和缺点同样直白。优点是简单、可并行、在弱交互任务里够用——比如两队各守各的半场、互不干扰时,它甚至能逼近单智能体的表现。缺点是它把队友当成固定噪声,可队友明明在学、在变:后卫练了一辈子盯人,球队突然改打区域联防,他之前的经验一夜作废。非平稳性直接击穿贝尔曼方程对“环境稳定”的假设,因此在需要配合的任务里,IQL 的 Q 值估计会持续失真。

Qi(si,ai)←Qi(si,ai)+α(ri+γmax⁡a′Qi(si′,a′)−Qi(si,ai))Q_i(s_i, a_i) \leftarrow Q_i(s_i, a_i) + \alpha\Bigl(r_i + \gamma \max_{a'} Q_i(s_i', a') - Q_i(s_i, a_i)\Bigr)
每个球员都以为自己在对着静止的球门练射门,却不知道球门后面的守门员也在学习移动。
  1. 个体状态与动作 s_i, a_i第 i 个智能体自己观察到的状态和自己选的动作,相当于“我看到的场上局部画面和我做的动作”。
    si,ais_i, a_i
  2. 即时奖励 r_i环境在全体动作发生后返还给这个智能体的奖励,它可能受别人动作影响,但 IQL 不管这些。
    rir_i
  3. 目标值当前的奖励加上折现后的“下一步最优价值”,是 Q 表要追赶的方向。
    ri+γmax⁡a′Qi(si′,a′)r_i + \gamma \max_{a'} Q_i(s_i', a')
  4. 软更新幅度 α学习率决定了新信息取代旧经验的速度,太小学得慢,太大会震荡。
    α(ri+γmax⁡a′Qi(si′,a′)−Qi(si,ai))\alpha\Bigl(r_i + \gamma \max_{a'} Q_i(s_i', a') - Q_i(s_i, a_i)\Bigr)

MADDPG算法

靠谱教练的做法是:训练时站在看台上,手握全场视野,谁跑位、谁接应、谁漏人看得一清二楚;但比赛哨声一响,教练不能上场,球员必须靠自己的经验和判断临场决策。这就是 MARL 最经典的训练范式——集中训练、分布执行(Centralized Training with Decentralized Execution, CTDE),MADDPG 是它的杰出代表。

MADDPG 是单智能体 DDPG 的多智能体扩展,每个智能体都拥有自己的演员(Actor)和评论家(Critic)。关键在于评论家的“视野”:训练时,评论家能看到所有智能体的状态和动作,像教练俯瞰全场;执行时,评论家退场,演员只用自己的局部观测做决策,像球员自己在场上判断。更妙的是,评论家连“对手的动作”也一并收入眼底,相当于把“对手会怎么变招”也学进了价值函数里,从而有力缓解非平稳性。

MADDPG 支持连续动作,协作、竞争、混合任务通吃,是目前产业落地最常被提及的算法之一。它的灵魂就是那张“训练看全局、比赛靠自己”的牌——训练时信息越全越好,执行时通信越少越好,用信息不对称换来了实用性与可扩展性的平衡。

∇θiJ(μi)=Ex,a∼D[∇θiμi(ai∣oi) ∇aiQiμ(x,a1,…,aN)]\nabla_{\theta_i} J(\mu_i) = \mathbb{E}_{x, a \sim \mathcal{D}}\Bigl[\nabla_{\theta_i} \mu_i(a_i \mid o_i) \, \nabla_{a_i} Q_i^{\mu}\bigl(x, a_1, \dots, a_N\bigr)\Bigr]
演员更新自己动作的方向,要看评论家的“脸色”;而评论家的脸色取决于全场信息——这就是教练通过全局反馈指导每个球员提升。
  1. 演员参数 θ_i第 i 个智能体决策网络的参数,相当于这个球员的“肌肉记忆”。
    θi\theta_i
  2. 全局观测拼接 x所有智能体观测拼在一起,只有训练时教练(评论家)才看得见。
    x=(o1,o2,…,oN)x = (o_1, o_2, \dots, o_N)
  3. 集中式评论家 Q_i^\mu输入所有智能体的状态与动作,输出对第 i 个智能体动作的评价。
    Qiμ(x,a1,…,aN)Q_i^{\mu}(x, a_1, \dots, a_N)
  4. 策略梯度链式法则先看评论家对动作的梯度,再反推演员网络该怎么调参,两个梯度相乘。
    ∇θiμi(ai∣oi) ∇aiQiμ(x,a1,…,aN)\nabla_{\theta_i} \mu_i(a_i \mid o_i) \, \nabla_{a_i} Q_i^{\mu}(x, a_1, \dots, a_N)

QMIX值分解

精算师教练的思路完全不同:她不管跑位和防守细节,只设计一件事——赢球奖池怎么分。她的方案是写进合同的一条“分钱规则”:把团队总奖金拆成每个球员的个人奖金,规则的核心原则只有一条:多劳一定多得。贡献越大,分到的钱只增不减。这个朴素的公平原则,就是 QMIX 的思想内核。

QMIX 面向完全协作的任务。每个智能体维护一个个人价值函数 Q_i(个人奖金),一个中心混合网络 f_ψ 把所有人的 Q_i 和全局状态 s_t 揉在一起,得到团队总价值 Q_tot(赢球奖池)。训练时直接优化 Q_tot,让奖池总额最大化;执行时每个球员只按自己的 Q_i 选动作,不需要知道别人的决定。

与 MADDPG 相比:MADDPG 的评论家像看台上给建议的教练,通用但训练开销大;QMIX 的混合网络像写进合同的分钱条款,牺牲了一定的通用性,却在协作任务上更稳、更高效——尤其适合几十上百个智能体的大规模协作场景,信用分配问题被这条“公平规则”天然化解。

Qtot(τ,u)=fψ(st,Q1(τ1,u1),…,QN(τN,uN)),∂Qtot∂Qi≥0Q_{\mathrm{tot}}(\tau, u) = f_{\psi}\Bigl(s_t, Q_1(\tau_1, u_1), \dots, Q_N(\tau_N, u_N)\Bigr), \qquad \frac{\partial Q_{\mathrm{tot}}}{\partial Q_i} \ge 0
“分钱规则”必须满足单调性:谁的贡献涨了,团队总奖金只许涨、不许跌。这条约束看似朴素,却是分布式执行不亏全局的数学保障。
  1. 个人价值 Q_i(\tau_i, u_i)第 i 个智能体基于自己的历史观测序列 τ_i 评估动作 u_i 的优劣,相当于“个人的工作量”。
    Qi(τi,ui)Q_i(\tau_i, u_i)
  2. 混合网络 f_ψ把个人价值混合成团队总价值的神经网络,其参数 ψ 由全局状态 s_t 动态生成。
    fψ(st,Q1,…,QN)f_{\psi}\bigl(s_t, Q_1, \dots, Q_N\bigr)
  3. 团队总价值 Q_tot整个队伍在联合动作下的期望总收益,训练时优化的唯一目标。
    Qtot(τ,u)Q_{\mathrm{tot}}(\tau, u)
  4. 单调性约束∂Q_tot / ∂Q_i 恒为非负,保证“多劳必多得”,这是实现个体-全局最优一致的前提。
    ∂Qtot∂Qi≥0\frac{\partial Q_{\mathrm{tot}}}{\partial Q_i} \ge 0

训练范式选型

没有最好的阵型,只有最合适的阵型。对手全是单打独斗,你摆最简单的 4-4-2 就够用(独立学习);需要整体传控,就得有教练全局调度(CTDE);如果全队要靠小范围默契配合取胜,不如先定好分钱规则(值分解)。MARL 工程选型,本质就是回答三个问题。

问题一:任务是合作、竞争还是混合? 完全协作且奖励共享,优先 QMIX 家族;竞争或混合,MADDPG 这类 CTDE 方法更通用。问题二:动作是连续还是离散? 连续控制(机器人、无人机)选 MADDPG;离散决策(游戏、交通信号)选 QMIX 系更成熟。问题三:智能体数量和通信能力如何? 数量少、可通信,CTDE 优势明显;数量大、通信受限,值分解的轻量执行端更实际。为什么要坚持“训练集中、执行分散”?下面这个等式给出了数学底气:

赛前看对手排兵布阵,MARL 选型也是看任务三要素。记住这张决策地图:弱交互、重简单 → IQL;协作 + 离散 + 大规模 → QMIX 家族;连续控制或竞争对抗 → MADDPG;需要复杂通信协商 → 考虑带通信的 CTDE 变体。范式本身没有高下之分,只有合不合身。

arg⁡max⁡uQtot(τ,u)=(arg⁡max⁡u1Q1(τ1,u1),…,arg⁡max⁡uNQN(τN,uN))\arg\max_{u} Q_{\mathrm{tot}}(\tau, u) = \Bigl(\arg\max_{u_1} Q_1(\tau_1, u_1), \ldots, \arg\max_{u_N} Q_N(\tau_N, u_N)\Bigr)
这句话的意思是:全队的最优配合方案,恰好等于每个球员各自最优选择拼起来的样子——于是比赛时不必交流,每个人“做好自己”就是全局最优。
  1. 全局最优联合动作让团队总价值最大的那个动作组合,是教练心目中的“完美战术”。
    arg⁡max⁡uQtot(τ,u)\arg\max_{u} Q_{\mathrm{tot}}(\tau, u)
  2. 个体最优动作每个智能体只看自己的 Q_i 选出的最优动作,是球员的“本能发挥”。
    arg⁡max⁡uiQi(τi,ui)\arg\max_{u_i} Q_i(\tau_i, u_i)
  3. 等式两端相等这就是个体-全局最优一致(IGM)原则,意味着“做好自己”的分布执行方式不会损失全局收益。
    (arg⁡max⁡u1Q1(τ1,u1),…,arg⁡max⁡uNQN(τN,uN))\Bigl(\arg\max_{u_1} Q_1(\tau_1, u_1), \ldots, \arg\max_{u_N} Q_N(\tau_N, u_N)\Bigr)

工程落地挑战

从训练场到职业联赛,麻烦才刚开始。场地条件、球员伤病、球队规模,每一项都考验教练的工程能力。MARL 落地同样如此:论文里的漂亮曲线,到了真实环境往往水土不服。最典型的挑战集中在三个方面。

第一,环境与奖励设计。 奖励函数怎么写,直接决定信用分配的难度。如果奖励设计成“谁抢到球就给谁加分”,球员就会疯狂抢球而不管会不会传给队友——这就是奖励塑形带来的“刷分”漏洞。设计者需要把团队目标拆解成可学习的中间信号,同时避免智能体钻空子。

第二,收敛稳定性。 多个学习主体同时更新,训练曲线像过山车:赢一局就飘,输一局就崩。常见对策包括软更新(目标网络缓慢跟随)、经验回放(打破样本相关性)、课程学习(从易到难逐步加戏)。这些手段能“止痛”,但不能根治——非平稳性始终存在,监控训练过程和回滚机制是工程上的必备保险。

第三,扩展性。 联合动作空间随智能体数量指数爆炸,这是数学上躲不开的坎:

职业教练都知道,带好一支队最难的不是战术板上的几笔划线,而是场下千百次训练中的磨合。MARL 落地同理:算法选型只是起点,环境设计、稳定性调优、扩展性架构,才是决定系统能否真正跑起来的胜负手。

∏i=1N∣Ai∣=∣A1∣×∣A2∣×⋯×∣AN∣\prod_{i=1}^{N} \lvert \mathcal{A}_i \rvert = \lvert \mathcal{A}_1 \rvert \times \lvert \mathcal{A}_2 \rvert \times \cdots \times \lvert \mathcal{A}_N \rvert
假设 10 个智能体各 10 个动作,联合动作就有 100 亿种组合——全量枚举根本不现实,所以算法必须学会“分解”和“抽象”。
  1. 单智能体动作数每个智能体可选动作的数量,比如 10 种。
    ∣Ai∣\lvert \mathcal{A}_i \rvert
  2. 连乘符号把所有智能体的动作数乘起来,得到联合动作空间的总大小。
    ∏i=1N∣Ai∣\prod_{i=1}^{N} \lvert \mathcal{A}_i \rvert
  3. 指数爆炸的含义智能体数量每加一,联合空间就乘以一份动作数,呈指数增长。
    ∣A∣N\lvert \mathcal{A} \rvert^N

AI 应用场景

无人机编队协作控制

阶段:模型训练与部署(CTDE 范式)

解决的问题:多无人机协同避障、编队保持需要实时响应动态环境,传统人工规划难以应对队友和障碍物同时移动的复杂局面;MADDPG 的集中评论家在训练时统筹全局,执行时各无人机仅凭自身传感器决策,兼顾了协作质量与通信开销。

具体案例:物流园区内 5 架无人机协同完成包裹转运,训练时中央评论家同时观察所有无人机的位置、速度和动作,学习编队与避障策略;部署后每架无人机只依赖本地传感器实时调整航线,即使通信中断也能维持队形。

手游 5v5 对战 AI

阶段:奖励设计与价值学习(值分解 + 信用分配)

解决的问题:MOBA 类游戏团队胜负是唯一的全局奖励,传统强化学习把“不送人头”作为个人目标,导致 AI 各自为战、毫无配合;QMIX 把团队胜率分解到每个英雄的贡献值,让辅助愿意牺牲、坦克敢于开团。

具体案例:某头部手游用 QMIX 系算法训练 5v5 AI,每个英雄学习自己的 Q 函数,混合网络按全局战况把团队胜率分解成个人价值,最终 AI 在高端局中表现出成熟的团战配合,胜率稳定超过人工规则 AI。

多路口交通信号协同控制

阶段:决策控制与评估(协作任务 + CTDE)

解决的问题:单路口红绿灯优化只考虑本地车流,容易把拥堵“踢皮球”到相邻路口;多智能体方案把每个路口当作一个智能体,用集中训练共享全网车流信息,执行时各路口的控制器根据本地车流独立调整信号相位。

具体案例:某城市 12 个连续路口部署 MARL 信控系统,训练阶段中央模型汇总所有路口的排队长度与车流速度,执行阶段各路口控制器独立决策,平均通行延误降低约 18%,证明“集中训练、分布执行”在真实交通中的价值。

Python 演示

python77 行
# -*- coding: utf-8 -*-"""MARL小实验: 对比独立Q学习与集中式联合Q学习两个智能体从不同起点出发, 必须同时到达各自目标才算成功。"""import randomrandom.seed(42) N = 4STARTS = [(0, 0), (3, 0)]TARGETS = [(3, 3), (0, 3)]ACT = [(0, 1), (0, -1), (1, 0), (-1, 0)]EP, STEPS, ALPHA, GAMMA, EPS = 300, 60, 0.2, 0.95, 0.15  def move(p, a):    x, y = p    dx, dy = ACT[a]    return max(0, min(N - 1, x + dx)), max(0, min(N - 1, y + dy))  def run(mode):    q = [{}, {}] if mode == 'ind' else {}    p = [STARTS[0], STARTS[1]]    ret = 0.0    for _ in range(STEPS):        act = [0, 0]        if mode == 'ind':            for i in range(2):                if random.random() < EPS:                    act[i] = random.randrange(4)                else:                    vs = [q[i].get((p[i], a), 0.0) for a in range(4)]                    act[i] = vs.index(max(vs))        else:            for i in range(2):                if random.random() < EPS:                    act[i] = random.randrange(4)                else:                    cand = [max([q.get((p[0], p[1],                                       a if i == 0 else b,                                       b if i == 0 else a), 0.0)                                 for b in range(4)]) for a in range(4)]                    act[i] = cand.index(max(cand))        nxt = [move(p[0], act[0]), move(p[1], act[1])]        done = nxt[0] == TARGETS[0] and nxt[1] == TARGETS[1]        r = 1.0 if done else -0.01        ret += r        if mode == 'ind':            for i in range(2):                old = q[i].get((p[i], act[i]), 0.0)                nv = max([q[i].get((nxt[i], a), 0.0) for a in range(4)])                q[i][(p[i], act[i])] = old + ALPHA * (r + GAMMA * nv - old)        else:            key = (p[0], p[1], act[0], act[1])            old = q.get(key, 0.0)            nv = max([q.get((nxt[0], nxt[1], a, b), 0.0)                      for a in range(4) for b in range(4)])            q[key] = old + ALPHA * (r + GAMMA * nv - old)        p = nxt        if done:            break    return ret  def train(mode):    total = 0.0    for ep in range(EP):        total += run(mode)        if (ep + 1) % 100 == 0:            print('%s epoch %d avg %.4f' % (mode, ep + 1, total / (ep + 1)))    return total / EP  if __name__ == '__main__':    for m in ('ind', 'ctde'):        avg = train(m)        print('final %s avg %.4f' % (m, avg))
目的:在 4×4 网格中用两个算法训练两个智能体协作到达目标,直观对比“独立 Q 学习”和“集中式联合 Q 学习”的最终平均奖励差异。
  1. q = [{}, {}] if mode == 'ind' else {}独立模式每人一张 Q 表;集中模式所有人共用一张联合 Q 表,对应“集中训练”。
  2. cand = [max([q.get((p[0], p[1], a if i == 0 else b, b if i == 0 else a), 0.0) for b in range(4)]) for a in range(4)]执行时每个智能体只按自己的动作维挑最优,体现了“分布执行 + 全局最优可分解”的 IGM 思想。
  3. done = nxt[0] == TARGETS[0] and nxt[1] == TARGETS[1]只有两人同时到达才给 1 分,人为制造“信用分配”难题。
  4. q[key] = old + ALPHA * (r + GAMMA * nv - old)联合 Q 表用贝尔曼公式更新,等价于一个看到全局状态的集中式评论家。
  5. random.seed(42)固定随机种子,让两套算法在公平条件下对比,结果可复现。

常见误区

误区多智能体强化学习没什么新鲜的,给每个智能体各跑一份 Q-learning 或者 DQN,加起来不就是 MARL 了吗?训练时并行开几个进程就好了。

正解这只是最朴素的独立 Q 学习(IQL),是一个基线而非完整的 MARL 方案。真正的 MARL 要考虑智能体之间的交互、环境非平稳性和信用分配。让 11 个球员各自回家练射门,不等于训练出一支球队。只有弱交互任务里 IQL 才够用,一旦需要配合,它就会因为忽视队友的存在而失效。

为何常见:初学者最先接触的单智能体工具太顺手,容易把“多智能体”简单理解成“多个单智能体并行”,忽略了协同带来的新问题。

误区CTDE 不就是所有智能体训练时共用一个大脑吗?大家都是同一个网络,执行时自然能配合。干脆把参数完全共享算了。

正解CTDE 的关键是“信息”的不对称,不是“参数”的共享。训练时评论家能看到全局信息,这没错;但执行时每个智能体通常拥有自己独立的演员网络,只输入自己的局部观测。一个教练在看台上看全场,不等于每个球员脑子里的战术本相同。共享参数只是工程上的可选优化,不是 CTDE 的定义。

为何常见:把“集中”误读成“参数统一”,是因为没分清“集中训练”与“集中决策”两个概念,忽略了执行阶段去中心化的本质。

误区QMIX 有单调性约束又满足 IGM,看起来最厉害,以后所有多智能体任务都用 QMIX 不就行了?

正解QMIX 只适用于完全协作的任务,竞争与混合任务中“多劳多得”的分钱规则根本不成立——对手的贡献越高,你的收益反而越低。而且单调性约束本身也是一种限制:某些协作任务里,“一个人的贡献上升导致团队总价值下降”虽然反直觉,却真实存在,QMIX 的表达力学不了这种模式。

为何常见:看到论文里 QMIX 在协作基准上成绩亮眼,就容易把它神化,忽略了它适用的前提条件。

误区MARL 里的非平稳性,就是环境一直在变化,比如天气变了、场地换了,所以模型老是训不稳定。

正解非平稳性的真正来源是“其他智能体在学习”。同一个状态、同一个动作,因为队友策略变了,你收到的奖励和下一状态的分布就漂移了。球场没变,变的是对手的战术和队友的跑位。这也是为什么 MADDPG 让评论家看到对手动作,就能缓解非平稳性——它对“别人的变化”建模了。

为何常见:单智能体里环境是固定的,初学者习惯把训练不稳定归因于环境噪声,忽略了智能体之间互为动态环境的特殊性。

误区智能体数量一多,联合动作空间爆炸,解决办法就是让智能体之间随时通信,互相通报动作。

正解通信会引入延迟、带宽和隐私问题,而且“完全通信”在训练和执行阶段都很难做到。主流思路恰恰相反:训练时集中共享信息(不要通信,让评论家代劳),执行时尽量去中心化(每人的策略只依赖自身观测)。QMIX 用值分解把全局最优拆成个体最优,正是为了“不通信也能配合”。

为何常见:直觉上觉得配合就必须交流,忽略了“集中训练、分布执行”这一范式在信息利用与通信成本之间的巧妙平衡。

面试题

Q1. 关于多智能体强化学习(MARL),下列说法最准确的是?

单选题 · easy

  • A.它是单智能体RL的简单叠加复制
  • B.它强调多个学习主体的交互协作← 正确答案
  • C.它不需要设计任何奖励函数
  • D.它只能用于完全竞争类任务

答案:B。MARL 的核心在于多个学习主体共享环境、相互影响,B 准确。它不能简单复制单智能体 RL,因为存在非平稳性与信用分配问题;奖励函数依然必须精心设计;协作、竞争、混合任务都能用,A、C、D 都不成立。

Q2. 独立 Q 学习(IQL)在协作任务中效果常不理想,根本原因是?

单选题 · mid

  • A.学习率通常设置得过高
  • B.忽略了环境的非平稳性← 正确答案
  • C.无法使用神经网络拟合
  • D.缺少经验回放机制

答案:B。IQL 把队友当作固定噪声,而队友在同步学习导致环境非平稳,Q 学习的收敛假设被破坏,B 正确。学习率、神经网络、经验回放都只是工程细节,不是它失效的根本原因。

Q3. MADDPG 的“集中训练分布执行”是指?

单选题 · mid

  • A.训练时集中使用全部算力资源
  • B.评论家看全局,执行时只看自身观测← 正确答案
  • C.所有智能体共享一套网络参数
  • D.执行时必须集中收集所有观测

答案:B。CTDE 的核心是信息不对称:训练时评论家输入所有智能体的状态与动作,执行时演员只用自身观测做决策,B 正确。算力分配、参数共享、集中决策都与 CTDE 的定义无关。

Q4. QMIX 通过单调性约束获得的直接好处是?

单选题 · mid

  • A.联合动作空间不再爆炸
  • B.个体最优组合等于全局最优← 正确答案
  • C.无需训练即可完成协作
  • D.评论家可读取真实状态

答案:B。单调性约束 ∂Q_tot/∂Q_i ≥ 0 保证了 IGM 原则——每个智能体按自己的 Q_i 取最优,拼起来就是全局最优联合动作,B 正确。它并不减少动作空间,也不免除训练,跟读取真实状态无关。

Q5. 当每个智能体独立选取自身最优动作,恰好构成全局最优联合动作时,体现的原则是?

单选题 · hard

  • A.集中训练分布执行原则
  • B.个体全局最优(IGM)原则← 正确答案
  • C.经验回放优先原则
  • D.最大熵探索原则

答案:B。IGM(Individual-Global-Max)原则描述的就是“全局最优由个体最优拼成”,是值分解方法分布执行不损失全局收益的理论保证。CTDE 是训练范式,与“个体最优组合成全局最优”不是同一概念。

Q6. 在一个三智能体任务中,每个智能体有 10 个离散动作,联合动作空间共有多少种?

单选题 · easy

  • A.30 种
  • B.100 种
  • C.1000 种← 正确答案
  • D.3000 种

答案:C。联合动作空间大小是各智能体动作数的乘积,10 × 10 × 10 = 1000 种。这就是 MARL 扩展性挑战的数学根源:智能体数量每加一个,动作空间就乘一次。

Q7. 信用分配问题指的是?

单选题 · easy

  • A.把团队总奖励合理归因到每个智能体← 正确答案
  • B.把训练任务分配到多台服务器
  • C.把决策权下放给每个智能体
  • D.把奖励函数拆成多个子函数

答案:A。信用分配解决的是“团队赢球,功劳怎么分”的归因难题——团队只有一个总奖励,却要指导每个智能体改进策略,A 正确。它与计算资源分配、决策权下放均无关。

Q8. 下列哪些是 MARL 相比单智能体 RL 的典型挑战?

多选题 · mid

  • A.环境非平稳性← 正确答案
  • B.信用分配困难← 正确答案
  • C.联合动作空间爆炸← 正确答案
  • D.奖励函数必须为常数

答案:ABC。队友同步学习导致环境非平稳(A);团队总奖励难以归因到个体(B);动作空间随智能体数量指数增长(C)。D 说法错误,奖励函数仍需精心设计,且通常不能是常数。

Q9. 关于 MADDPG 算法,下列说法正确的有?

多选题 · hard

  • A.每个智能体拥有独立的演员网络← 正确答案
  • B.评论家训练时输入所有智能体的动作← 正确答案
  • C.支持连续动作空间← 正确答案
  • D.执行时必须依赖集中评论家

答案:ABC。MADDPG 中每个智能体有自己的 Actor 与 Critic,评论家训练时看全局(A、B 正确);它脱胎于 DDPG,天然支持连续动作(C 正确)。执行阶段评论家退场,演员只凭自身观测决策,D 错误。

Q10. 以下哪些场景适合优先考虑 QMIX 或值分解思路?

多选题 · hard

  • A.多机器人协作搬运任务← 正确答案
  • B.需要解决信用分配的任务← 正确答案
  • C.双方零和博弈对抗任务
  • D.智能体之间完全无交互

答案:AB。QMIX 面向完全协作任务,能通过值分解把团队总奖励合理归因到个体,A、B 正确。零和对抗中“多劳多得的单调规则”不成立,不适合 QMIX;完全无交互的任务直接用单智能体 RL 即可,无需多智能体方法。