理解多智能体深度确定性策略梯度(MADDPG):完整指南
多智能体深度确定性策略梯度(MADDPG)是 DDPG 的扩展版本,旨在解决多智能体环境中的非平稳性问题。它采用“集中式训练、分散式执行”的范式。构建一个简单的 2 智能体协作导航任务:状态:两名智能体位置、各自目标位置每个智能体观测:自己的位置、另一智能体位置、自己的目标位置(归一化)动作:离散(上/下/左/右)奖励:共享;每步小惩罚;两者同时到达各自目标给大正奖励;加入距离 shaping 与
翻译自:all-rl-algorithms/14_maddpg.ipynb 在 master ·FareedKhan-dev/all-rl-algorithms
目录
引言:多智能体强化学习(MARL)
多智能体强化学习(MARL)将强化学习扩展到多个智能体在同一环境中交互的场景。智能体之间可能协作、对抗,或者呈现混合目标。MARL 带来单智能体环境中不存在的独特挑战。
MARL 中的非平稳性挑战
主要困难在于多个智能体同时学习。对任一单个智能体而言,环境看起来是非平稳的,因为其他智能体的策略在学习过程中持续变化。某个动作在其他智能体采取某种行为时表现良好,其他智能体一旦调整策略,这个动作就可能变差。这破坏了许多单智能体强化学习算法(例如标准 Q-learning 或 DDPG)所依赖的平稳性假设,使训练变得不稳定。
什么是 MADDPG?
多智能体深度确定性策略梯度(MADDPG)是 DDPG 的扩展版本,旨在解决多智能体环境中的非平稳性问题。它采用“集中式训练、分散式执行”的范式。
核心思想:集中式训练,分散式执行
分散式执行
在执行阶段(与环境交互时),每个智能体 (i) 只根据自己的局部观测 (o_i),通过自己的 actor 网络 (\mu_i) 选择动作 (a_i)。这对实际部署至关重要,因为智能体往往无法获取全局信息。
集中式训练
在训练阶段(更新网络参数时),MADDPG 为每个智能体 (i) 使用一个集中式 critic (Q_i)。该 critic 以所有智能体的联合观测(或状态)(\mathbf{o}) 与联合动作 (\mathbf{a}) 为输入,估计动作价值 (Q_i(\mathbf{o}, \mathbf{a}))。
由于 critic 在训练时“知道其他智能体实际采取了什么动作”,即使其他智能体策略不断变化,对每个智能体的学习目标也更接近平稳,从而显著提高训练稳定性。
为什么选择 MADDPG:优势
-
缓解非平稳性:集中式 critic 直接针对多智能体学习的核心难点。
-
执行时仅需局部信息:策略可在部分可观测、信息受限的场景中部署。
-
不要求环境结构特殊:不强依赖特定通信协议或奖励分解形式。
-
适用于协作、对抗与混合任务:框架通用。
MADDPG 的应用场景与使用方式
MADDPG 已被用于多种多智能体任务,例如:
-
协作导航:多个智能体到达目标并避免碰撞
-
捕食者-猎物:追逐或逃逸策略学习
-
交通信号控制:多个路口信号协同优化
-
多机器人协作:任务分配、路径规划等
特别适合以下条件:
-
动作空间为连续或离散(原始提出针对连续,离散需适配)
-
训练阶段可获得联合信息
-
执行阶段必须分散决策
-
从单智能体视角看环境高度非平稳
MADDPG 的数学基础
MADDPG 将 DDPG 扩展到 (N) 个智能体。令每个智能体的策略为 (\mu_i),参数为 (\theta_i),每个智能体的集中式动作价值函数为 (Q_i),参数为 (\phi_i)。
集中式动作价值函数(Critic)
每个智能体 (i) 学习自己的 critic:
[
Q_i(\mathbf{o}, \mathbf{a})
]
其中 (\mathbf{o}) 是联合观测(或全局状态),(\mathbf{a}) 是联合动作。该函数估计在联合上下文与联合动作条件下,智能体 (i) 的期望回报。
Critic 更新
使用共享回放缓冲区 (\mathcal{D}) 采样数据,通过最小化均方误差更新 critic:
[
\mathcal{L}(\phi_i)=\mathbb{E}_{(\mathbf{o},\mathbf{a},\mathbf{r},\mathbf{o}')\sim \mathcal{D}}\Big[(Q_i(\mathbf{o},\mathbf{a})-y_i)^2\Big]
]
目标值 (y_i) 由目标网络计算:
[
y_i = r_i + \gamma, Q_i'(\mathbf{o}', \mathbf{a}')
]
其中 (\mathbf{a}' = (a_1',...,a_N')),且
[
a_j' = \mu_j'(o_j')
]
Actor 更新(策略梯度)
对确定性策略,MADDPG 使用确定性策略梯度思想,结合集中式 critic:
[
\nabla_{\theta_i} J(\theta_i) = \mathbb{E}{\mathbf{o}\sim\mathcal{D}}\left[\nabla{\theta_i}\mu_i(o_i),\nabla_{a_i} Q_i(\mathbf{o}, a_1,...,a_N)\Big|_{a_i=\mu_i(o_i)}\right]
]
在实现中常等价为最小化:
[
\mathcal{L}(\theta_i)=-\mathbb{E}\left[Q_i(\mathbf{o}, \mu_1(o_1),...,\mu_N(o_N))\right]
]
离散动作适配
若动作为离散,actor 通常输出 logits 并形成概率分布(如 Categorical 或 Gumbel-Softmax)。更新可用策略梯度形式,利用集中式 critic 的输出作为“好坏信号”。简单做法是直接用 (Q_i) 作为优势近似信号来提升高 (Q) 动作的概率,也可加入 baseline 降方差。
目标网络与软更新
与 DDPG 类似,所有 actor 与 critic 都配有目标网络,使用软更新:
[
\theta' \leftarrow \tau\theta + (1-\tau)\theta',\quad
\phi' \leftarrow \tau\phi + (1-\tau)\phi'
]
探索
连续动作常用在 actor 输出上加噪声(OU 噪声或高斯噪声)。离散动作可通过从策略分布采样,或用 (\epsilon)-greedy 进行探索。
MADDPG 的逐步流程
-
初始化:对每个智能体 (i):
-
actor (\mu_i)、critic (Q_i)
-
目标网络 (\mu_i')、(Q_i'),并复制参数
-
探索过程(噪声或采样策略)
-
-
初始化共享回放缓冲区 (\mathcal{D})
-
每个 episode:
-
重置环境得到联合观测 (\mathbf{o})
-
每个时间步:
-
每个智能体根据本地观测选动作 (a_i)
-
执行联合动作 (\mathbf{a}),得到奖励 (\mathbf{r})、下一观测 (\mathbf{o}')、终止标记
-
存储 ((\mathbf{o},\mathbf{a},\mathbf{r},\mathbf{o}',\mathbf{d})) 到 (\mathcal{D})
-
若缓冲区足够大,采样 mini-batch,对每个智能体更新 critic 与 actor
-
软更新目标网络
-
若终止则结束
-
-
MADDPG 的关键组件
-
每个智能体的 Actor 网络:(o_i \mapsto a_i),执行时只用局部观测
-
每个智能体的集中式 Critic 网络:输入联合观测与联合动作,输出该智能体的 (Q_i)
-
目标网络:稳定训练目标
-
共享回放缓冲区:存联合经验,支持 off-policy
-
动作选择与探索:训练时加入噪声或采样
-
集中式训练逻辑:更新 critic/actor 需要联合信息与所有智能体网络
-
超参数:buffer、batch、学习率、(\gamma)、(\tau)、探索参数等
实战示例:自定义多智能体网格世界
环境设计动机
构建一个简单的 2 智能体协作导航任务:
-
状态:两名智能体位置、各自目标位置
-
每个智能体观测:自己的位置、另一智能体位置、自己的目标位置(归一化)
-
动作:离散(上/下/左/右)
-
奖励:共享;每步小惩罚;两者同时到达各自目标给大正奖励;加入距离 shaping 与撞墙惩罚
-
目标:两名智能体同时到达各自目标
该环境能清楚展示:critic 基于联合信息评估联合动作,actor 仅依赖局部观测执行。
环境搭建与测试
你给出的 MultiAgentGridEnv:
-
固定起点与终点
-
碰墙惩罚、碰撞回退惩罚
-
成功奖励 10
-
未成功时按曼哈顿距离给负 shaping,并加每步惩罚
测试输出表明环境与观测构造正确,reward 在未完成时为负值。
实现 MADDPG(离散动作适配版)
Actor 网络(离散)
你定义的 ActorDiscrete 输出 Categorical(logits=...):
-
训练时可以 sample 做探索
-
测试或目标网络动作可用 argmax
集中式 Critic
你的 CentralizedCritic 接收:
-
拼接后的 joint_obs
-
拼接后的 joint_actions(你选择 one-hot 形式)
输出每个智能体一个标量 Q 值。
回放缓冲区(共享)
MultiAgentReplayBuffer 保存联合 transition,并在 sample 时返回:
-
obs_batch: (B, N, obs_dim) -
act_batch: (B, N)(动作索引) -
rew_batch: (B, N) -
next_obs_batch: (B, N, obs_dim) -
dones_batch: (B, N)
这非常适合集中式 critic 的输入构造。
更新逻辑(你代码里的核心)
-
Critic update:用目标 actor 产生下一步联合动作 one-hot,目标 critic 计算 (y),主 critic 最小化 MSE。
-
Actor update(离散版):你采用类似 REINFORCE 的形式:
-
从当前 actor 分布采样动作
-
用集中式 critic 评估联合动作的 Q
-
最大化 (\log \pi_i(a_i|o_i)\cdot Q_i)(实现上是最小化负号)
-
你对 Q 做了 detach 用于降低梯度耦合
-
训练循环
你使用 (\epsilon)-greedy 控制离散探索:
-
以概率 (\epsilon) 随机动作
-
否则用 actor 输出的 argmax
并按步数线性衰减 (\epsilon)
学习曲线与测试结果解读(对应你的输出)
-
Reward:波动很大,移动平均略有改善但仍长期为负,说明协作策略没有稳定学到“同时到达”的协调行为。
-
Critic loss:快速下降并接近 0,说明 critic 在“拟合数据分布上的回报”这件事上做得很好。
-
Actor loss:持续变得更负,表示 actor 正在按 critic 的信号更新,但这未能转化为稳定高回报。
测试阶段平均 reward 仍明显为负,且多数 episode 达到步数上限,说明训练出来的策略大多无法完成任务或完成不稳定。
MADDPG 的常见挑战与扩展
挑战:集中式 critic 的可扩展性
智能体数增加时,critic 输入维度(联合观测 + 联合动作)增长,计算与样本复杂度上升。常见改进:
-
参数共享
-
注意力机制选择性关注其他智能体信息
-
近似方法(如 mean-field)
挑战:协作任务中的信用分配
共享奖励下很难判断单个智能体贡献。常见方法:
-
COMA:反事实 baseline
-
VDN/QMIX:价值分解
挑战:对超参数敏感
学习率、(\tau)、(\gamma)、探索策略、buffer/batch 等都可能显著影响稳定性。
扩展
-
MATD3:引入 TD3 思想缓解过估计与不稳定
-
MAPPO:多智能体 PPO 变体,常配集中式价值函数
-
VDN/QMIX:更适用于纯协作共享奖励
结论
MADDPG 通过“集中式训练(集中式 critic)+ 分散式执行(局部 actor)”来缓解 MARL 的非平稳性,是多智能体 actor-critic 方法的重要基石。它适用于协作、对抗与混合任务,也能扩展到离散动作空间,但在协作场景仍可能遇到信用分配、稳定协同与可扩展性等挑战。许多后续方法(MATD3、MAPPO、QMIX 等)都在这些方面对 MADDPG 思路做了进一步强化。
完结
更多推荐


所有评论(0)