训练单个 RL 智能体的过程非常简单,那么我们现在换一个场景,同时训练五个智能体,而且每个都有自己的目标、只能看到部分信息,还能互相帮忙。
这就是多智能体强化学习(Multi-Agent Reinforcement Learning,MARL),但是这样会很快变得混乱。

什么是多智能体强化学习
MARL 是多个决策者(智能体)在同一环境中交互的强化学习。
环境类型可以很不一样。竞争性的,比如国际象棋,一方赢一方输。合作性的,比如团队运动,大家共享目标。还有混合型的,更像现实生活——现在是队友,过会儿可能是对手,有时候两者同时存在。
但是这里有一个关键的问题:从任何一个智能体的视角看世界变成了非平稳的,因为其他智能体也在学习、在改变行为。也就是说在学规则的时候,规则本身也在变。
MARL 在现实中的位置
单智能体 RL 适合系统只有一个"大脑"的情况,而 MARL 则出现在世界有多个"大脑"的时候。
现实世界中有很多这样的案例,比如交通信号控制:每个路口是一个智能体,一个信号灯"贪婪"了,下游路口就会卡死;仓库机器人:每个机器人自己选路径,碰撞和拥堵天然是多智能体问题;广告竞价和市场:智能体用不断变化的策略争夺有限资源;网络安全:攻击者和防御者是相互适应的智能体对;在线游戏和模拟:协调、欺骗、配合、自我对弈——这些都是 MARL 的经典试验场。
核心概念
大多数真实场景中,智能体只能看到状态的一部分。所以 MARL 里的策略通常基于局部观测,而不是完整的全局状态。
单智能体 RL 里环境动态是稳定的,而 MARL 不一样,"环境"包括其他智能体。它们在学习,你的转移动态也就跟着变了。
这正是经典的 Q-Learning 在多智能体环境里容易震荡、甚至崩溃的原因。
合作任务中团队拿到奖励,但功劳该算谁的?团队成功了,是智能体 2 的动作起了作用,还是智能体 5 在 10 步之前的作用?这就是信用分配问题,这是 MARL 里最头疼的实际难题之一。
集中式与分布式
集中训练、分布式执行(CTDE)
这是目前最常见的模式。训练时智能体可以用额外信息,比如全局状态或其他智能体的动作。执行时每个智能体只根据自己的局部观测行动。
这样的好处是,既有集中学习的稳定性,又不需要在运行时获取不现实的全局信息。
完全分布式学习
智能体只从局部经验学习。这个听起来是对的,而且简单任务也能用。但实际中往往不够稳定,合作任务尤其如此。
算法总览
合作性基于价值的方法:Independent Q-Learning(IQL)是最简单的基线,容易实现但通常不稳定;VDN 和 QMIX 通过混合各智能体的价值来学全局团队价值,合作处理得更好。
策略梯度和 Actor-Critic 方法:MADDPG 用集中式 Critic 配分布式 Actor,概念上是很好的切入点;MAPPO 在很多合作任务里是靠谱的默认选择。
自我对弈(Self-play):和自己不同版本对打来建立泛化的策略。思路简单粗暴效果也很好。
用 Python 从零搭一个小 MARL 环境
来做个玩具游戏:两个智能体必须协调。经典设定——两者选同一个动作才有奖励。每个智能体选 0 或 1,动作一致拿 +1,不一致拿 0。
我们这里刻意设计得简单,这样方便我们聚焦在 MARL 机制本身。
import random
from collections import defaultdict
class CoordinationGame:
def step(self, a0, a1):
reward = 1 a0 == a1
done =
reward, done

