摘要:
在多智能体强化学习(MARL)中,完全合作(Fully Cooperative)是最常见也是应用最广的场景:王者荣耀/Dota2 的团战、仓储机器人的协作搬运、交通信号灯的联合控制。在这种设定下,所有 Agent 共享同一个全局奖励
R
t
e
a
m
R_{team}
Rteam。这听起来很美好,但却引发了经典的“三个和尚没水喝”难题——即信誉分配(Credit Assignment)。本文将深入剖析完全合作型 MARL 的核心痛点,并详解 VDN、QMIX 等“价值分解”流派的算法是如何破解这一难题的。
目录 (Table of Contents)
- 什么是完全合作型 MARL?
- 定义与应用场景
- 核心矛盾:全局目标 vs 局部执行
- 核心痛点:信誉分配 (Credit Assignment)
- “吃大锅饭”的弊端
- Lazy Agent 问题
- 方法论一:独立学习 (IQL) —— 各自为战
- 方法论二:中心化训练,去中心化执行 (CTDE)
- 为什么上帝视角只能在训练时用?
- 方法论三:价值分解 (Value Decomposition) —— 破局之道
- VDN:简单的加法原理
- QMIX:单调性的魔法 (含代码实现解析)
- QTRAN/QPLEX:打破束缚(简述)
- 总结
1. 什么是完全合作型 MARL?
1.1 定义
在数学上,完全合作博弈(Fully Cooperative Games)是指所有智能体
i
∈
{
1
,
…
,
N
}
i \in \{1, \dots, N\}
i∈{1,…,N} 共享同一个奖励函数:
R
1
(
s
,
u
)
=
R
2
(
s
,
u
)
=
⋯
=
R
N
(
s
,
u
)
=
R
t
o
t
a
l
(
s
,
u
)
R^1(s, \mathbf{u}) = R^2(s, \mathbf{u}) = \dots = R^N(s, \mathbf{u}) = R_{total}(s, \mathbf{u})
R1(s,u)=R2(s,u)=⋯=RN(s,u)=Rtotal(s,u)
无论谁做出了贡献,大家得到的反馈是一样的;反之,一人犯错,全队受罚。
1.2 核心矛盾
- 训练目标:最大化团队的总回报 J = E [ R t o t a l ] J = \mathbb{E}[R_{total}] J=E[Rtotal]。
- 执行限制:每个 Agent 只能根据自己的局部观测 (Local Observation) o i o^i oi 选择动作 a i a^i ai。我们不能让一个中央大脑控制所有人的动作(通信延迟和算力瓶颈不允许)。
2. 核心痛点:信誉分配 (Credit Assignment)
既然大家目标一致,直接优化不就好了吗?这就引出了多智能体信誉分配问题 (Multi-Agent Credit Assignment Problem)。
2.1 “吃大锅饭”的弊端
想象一场足球赛,你的球队 1:0 赢了。
- 前锋 A 进球了,他觉得:“我进球了,奖励是 +1,我的策略是对的。”
- 后卫 B 全场梦游甚至在睡觉,他也收到了奖励 +1。如果不加区分,后卫 B 的神经网络会认为:“原来在场上睡觉能赢球,下次我还睡。”
这就是 Lazy Agent (偷懒智能体) 的由来。由于全局奖励掩盖了个体的贡献,神经网络充满了噪声,难以收敛到精细的配合策略。
3. 方法论一:独立学习 (IQL) —— 各自为战
Independent Q-Learning (IQL) 是最简单的思路。
每个智能体
i
i
i 都有一个自己的 Q 网络
Q
i
(
o
i
,
a
i
)
Q_i(o^i, a^i)
Qi(oi,ai),完全不理会其他人,就把其他人当成环境的一部分(甚至噪声)。
- 优点:简单,随着 Agent 数量增加,计算量线性增加。
- 缺点:严重受制于非平稳性 (Non-Stationarity)。因为大家都在变,环境极其不稳定。在完全合作任务中,IQL 往往难以学会复杂的协作(比如需要同时按开关)。
4. 方法论二:CTDE 架构
为了解决 IQL 视野狭窄的问题,学术界提出了 CTDE (Centralized Training, Decentralized Execution) 范式。这是目前 MARL 的绝对主流。
- 训练时 (Training):我们在模拟器里,拥有上帝视角。我们可以知道所有人的状态 s s s 和动作 u \mathbf{u} u。我们可以训练一个超级大脑(Critic)。
- 执行时 (Execution):模型部署后,Agent 只能看局部,依靠训练好的 Actor 网络行动。
但在完全合作任务中,我们通常不需要显式的 Actor-Critic,而是采用价值分解 (Value Decomposition) 的方法。
5. 方法论三:价值分解 (Value Decomposition)
这类算法的核心思想是:不仅要训练个体的 Q i Q_i Qi,还要训练一个总的 Q t o t Q_{tot} Qtot 来拟合团队奖励。关键在于, Q t o t Q_{tot} Qtot 和 Q i Q_i Qi 之间要满足什么关系?
5.1 VDN (Value-Decomposition Networks)
VDN 提出了最直观的假设:团队总价值等于每个人个体价值之和。
Q t o t ( s , u ) = ∑ i = 1 N Q i ( o i , a i ; θ i ) Q_{tot}(s, \mathbf{u}) = \sum_{i=1}^N Q_i(o^i, a^i; \theta_i) Qtot(s,u)=i=1∑NQi(oi,ai;θi)
- 训练:最小化 ( Q t o t − y ) 2 (Q_{tot} - y)^2 (Qtot−y)2。
- 执行:每个 Agent 只要选出让自己 Q i Q_i Qi 最大的动作,那么 ∑ Q i \sum Q_i ∑Qi 自然也是最大的。这就实现了去中心化执行。
- 局限:它假设所有人对团队的贡献是线性的、独立的。这处理不了复杂的非线性配合(比如异或问题)。
5.2 QMIX:单调性的魔法 (The Star 🌟)
QMIX 是目前 MARL 的基石算法。它放宽了 VDN 的假设。
它认为,
Q
t
o
t
Q_{tot}
Qtot 不一定非要是
Q
i
Q_i
Qi 的和,只要满足单调性约束 (Monotonicity Constraint) 即可:
∂ Q t o t ∂ Q i ≥ 0 , ∀ i \frac{\partial Q_{tot}}{\partial Q_i} \ge 0, \quad \forall i ∂Qi∂Qtot≥0,∀i
物理含义:如果某个智能体 i i i 采取了更好的动作让自己的 Q i Q_i Qi 增加了,那么团队总价值 Q t o t Q_{tot} Qtot 一定不能减少。
为了实现这个约束,QMIX 引入了一个 Mixing Network:
- 输入:所有 Agent 的 Q i Q_i Qi。
- 输出: Q t o t Q_{tot} Qtot。
- 权重 (Weights):Mixing Network 的权重是由全局状态 s s s 生成的(使用 Hypernetwork),且绝对值取正(保证单调性)。
PyTorch 代码片段 (Mixing Network)
import torch
import torch.nn as nn
import torch.nn.functional as F
class QMixer(nn.Module):
def __init__(self, n_agents, state_dim, mixing_embed_dim):
super(QMixer, self).__init__()
self.n_agents = n_agents
self.state_dim = state_dim
self.embed_dim = mixing_embed_dim
# Hypernetwork 1: 生成第一层权重 (State -> Weights)
# 输出维度是 n_agents * embed_dim
self.hyper_w_1 = nn.Linear(state_dim, n_agents * mixing_embed_dim)
# Hypernetwork 1: 生成第一层偏置
self.hyper_b_1 = nn.Linear(state_dim, mixing_embed_dim)
# Hypernetwork 2: 生成第二层权重
self.hyper_w_2 = nn.Linear(state_dim, mixing_embed_dim * 1)
# Hypernetwork 2: 生成第二层偏置 (输出最终的 Q_tot)
self.hyper_b_2 = nn.Sequential(nn.Linear(state_dim, mixing_embed_dim),
nn.ReLU(),
nn.Linear(mixing_embed_dim, 1))
def forward(self, agent_qs, states):
# agent_qs: [batch, n_agents]
# states: [batch, state_dim]
bs = agent_qs.size(0)
# 1. 生成权重,并取绝对值以保证单调性 (Monotonicity)
w1 = torch.abs(self.hyper_w_1(states)).view(bs, self.n_agents, self.embed_dim)
b1 = self.hyper_b_1(states).view(bs, 1, self.embed_dim)
w2 = torch.abs(self.hyper_w_2(states)).view(bs, self.embed_dim, 1)
b2 = self.hyper_b_2(states).view(bs, 1, 1)
# 2. 前向传播计算 Q_tot
# 第一层: (Q_i * W1) + b1
hidden = F.elu(torch.bmm(agent_qs.unsqueeze(1), w1) + b1)
# 第二层: (Hidden * W2) + b2
q_tot = torch.bmm(hidden, w2) + b2
return q_tot.view(bs, -1)
QMIX 的伟大之处:它巧妙地结合了全局状态
s
s
s(通过 Hypernetwork)和局部动作价值
Q
i
Q_i
Qi,既保证了训练时的全局视野,又保证了执行时只要 argmax Q_i 就能找到全局最优解(IGM 原则)。
6. 总结
完全合作型 MARL 的演进路线其实就是**“如何更好地区分个人贡献”**的过程:
- IQL:不管贡献,大家都只顾自己。 → \to → 无法协作。
- VDN:大家的贡献直接相加等于总量。 → \to → 只能处理简单协作。
- QMIX:大家的贡献通过非线性(但单调)的方式组合。 → \to → 目前最流行的 Baseline,能处理星际争霸 (SMAC) 等复杂场景。
- QTRAN / QPLEX(进阶):试图解决 QMIX 无法覆盖的非单调场景,理论更强,但实战较难调优。
如果你正在做 MARL 的项目,QMIX 通常是你的首选算法,它是连接理论与实战的最佳平衡点。
Next Step Suggestion: 如果你已经理解了完全合作,下一步可以挑战更复杂的“混合博弈”(如足球比赛,队内合作、队外竞争)。






