
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏: 【强化学习】(47)---《深入理解多智能体近端策略优化(MAPPO)算法与调参》
MAPPO 是一种多智能体强化学习算法,基于单智能体的 PPO (Proximal Policy Optimization) 算法进行了扩展,专门设计用于解决多智能体协作和竞争环境中的决策问题。
如果对于MAPPO算法不了解,可以查看这篇文章(代码): 【MADRL】多智能体近端策略优化(MAPPO)算法
要想更好的理解MAPPO算法的原理机制,得先从On-Policy 和 Off-Policy 两种算法类型出发。在强化学习中,on-policy 和 off-policy 算法根据策略更新时是否依赖当前策略的经验来区分。

以下是两类算法的定义和常见算法列表:
定义:
定义:
特性 | On-Policy | Off-Policy |
|---|---|---|
样本利用率 | 低(一次性使用) | 高(可重复利用) |
缓冲区 | 无长期缓冲区 | 使用 replay buffer |
策略一致性 | 必须与当前策略一致 | 可利用任意策略生成的数据 |
学习效率 | 依赖高频环境交互 | 适合数据采样成本高的场景 |
收敛性 | 理论收敛性强 | 收敛性依赖数据分布 |
应用场景 | 实时决策、多智能体 | 复杂连续动作、高成本环境 |
on-policy有点像个调皮的小孩子,被打了/奖励了,当场就长记性的那种。而off-policy这种小孩子,被打了/奖励了,它还得回味下,这是一次偶然的惩罚还是这样做就是不好的,他还会去调皮的捣蛋,直到被打怕了(学习到了)。
有了上面的基础,MAPPO 是 on-policy。它的缓冲区(buffer)在每次新的 episode 开始时会被清空,而不像 off-policy 算法那样长期保留数据。这主要体现在以下几点:
On-Policy 的约束 On-policy 算法(如 PPO 和 MAPPO)的策略更新只能依赖最新策略采样的数据,历史数据与当前策略分布不一致,因此被舍弃。这确保了策略更新的稳定性。
尽管无法直接使用历史经验,仍然可以通过以下方法弥补:
episode_length 或 batch_size,让模型在每次采样时接触更多样本。
MAPPO 的核心参数调节分为以下几类:
episode_length 确实非常关键,因为它决定了每次采样的数据量。可以根据环境复杂度和任务长度动态调整,通常从 200 到 1000 步之间。
以 Proximal Policy Optimization (PPO) 为例:
🔥若是下面代码复现困难或者有问题,欢迎评论区留言;需要以整个项目形式的代码,请在评论区留下您的邮箱📌,以便于及时分享给您(私信难以及时回复)。
"""《on-Policy》
时间:2024.11
作者:不去幼儿园
"""
Initialize policy network πθ with parameters θ
Initialize value network Vϕ with parameters ϕ
for iteration = 1, 2, ..., N do
# Collect trajectories (states, actions, rewards) using current policy πθ
trajectories = []
for episode = 1, ..., M do
state = environment.reset()
episode_trajectory = []
for t = 1, ..., T do
action = πθ(state) # Sample action from current policy
next_state, reward, done = environment.step(action)
episode_trajectory.append((state, action, reward))
if done:
break
state = next_state
trajectories.append(episode_trajectory)
# Compute advantages using GAE or Monte Carlo returns
advantages, returns = compute_advantages(trajectories, Vϕ)
# Update policy πθ using clipped surrogate objective
for _ in range(policy_update_epochs):
policy_loss = compute_policy_loss(πθ, advantages)
θ = θ - α_policy * ∇(policy_loss)
# Update value network Vϕ
for _ in range(value_update_epochs):
value_loss = compute_value_loss(Vϕ, returns)
ϕ = ϕ - α_value * ∇(value_loss)以 Deep Q-Learning (DQN) 为例:
"""《off-Policy》
时间:2024.11
作者:不去幼儿园
"""
Initialize Q-network Qθ with parameters θ
Initialize target network Qθ' with parameters θ' = θ
Initialize replay buffer D
for iteration = 1, 2, ..., N do
state = environment.reset()
for t = 1, ..., T do
# ε-greedy policy for exploration
if random() < ε:
action = random_action()
else:
action = argmax(Qθ(state))
next_state, reward, done = environment.step(action)
# Store transition in replay buffer
D.append((state, action, reward, next_state, done))
# Sample minibatch from replay buffer
minibatch = random_sample(D, batch_size)
# Compute target values
target_values = []
for (s, a, r, s_, done) in minibatch:
if done:
target = r
else:
target = r + γ * max(Qθ'(s'))
target_values.append(target)
# Update Q-network Qθ
loss = compute_loss(Qθ, minibatch, target_values)
θ = θ - α * ∇(loss)
# Update state
if done:
break
state = next_state
# Periodically update target network
if iteration % target_update_freq == 0:
θ' = θon-policy 关键点:
off-policy 关键点:
由于博文主要为了介绍相关算法的原理和应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳或者无法运行,一是算法不适配上述环境,二是算法未调参和优化,三是没有呈现完整的代码,四是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。
MAPPO 是一个高效、稳定且适应性强的多智能体强化学习算法,通过结合 PPO 的稳定性和多智能体环境的需求,为协作与竞争场景提供了强有力的解决方案。
博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者