【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

【强化学习】(47)---《深入理解多智能体近端策略优化(MAPPO)算法与调参》

深入理解多智能体近端策略优化(MAPPO)算法与调参

目录

[0 前言](#0 前言)

[1 MAPPO核心特点](#1 MAPPO核心特点)

[2 On-Policy 和 Off-Policy](#2 On-Policy 和 Off-Policy)

[2.1. On-Policy 算法](#2.1. On-Policy 算法)

[2.2 Off-Policy 算法](#2.2 Off-Policy 算法)

对比总结

形象比喻

[On-Policy 的小孩](#On-Policy 的小孩)

[Off-Policy 的小孩](#Off-Policy 的小孩)

它们的关键区别:

[3 MAPPO 是 On-Policy,如何学习历史经验?](#3 MAPPO 是 On-Policy,如何学习历史经验?)

[4 MAPPO 算法的调参建议](#4 MAPPO 算法的调参建议)

超参数相关

网络结构相关

环境相关

更新频率

[[Python] On-Policy 和 Off-Policy 实现](#[Python] On-Policy 和 Off-Policy 实现)

[[Notice] 注意事项](#[Notice] 注意事项)

[5 总结](#5 总结)


0 前言

MAPPO 是一种多智能体强化学习 算法,基于单智能体的 PPO (Proximal Policy Optimization) 算法进行了扩展,专门设计用于解决多智能体协作和竞争环境中的决策问题。

如果对于MAPPO算法不了解,可以查看这篇文章(代码):

【MADRL】多智能体近端策略优化(MAPPO)算法


1 MAPPO核心特点

  1. 集中价值网络(Centralized Critic)

    • MAPPO 使用一个 centralized critic,将多个智能体的状态、动作信息整合在一起,用于计算价值函数。
    • 政策(policy)仍然是每个智能体独立的(decentralized),适合分布式执行。
  2. 分布式执行与集中式学习

    • 在训练时,所有智能体共享全局信息,进行集中式学习。
    • 在执行时,每个智能体仅依赖自己的局部观察,保持分布式决策的能力。
  3. 对 PPO 的优化

    • PPO 的核心是通过 clip range 限制策略更新的幅度,确保训练稳定。MAPPO 在多智能体环境中保留了这一优点。
    • 针对多智能体场景,对网络结构、数据处理等进行了调整,优化了 PPO 在该场景下的性能。

2 On-PolicyOff-Policy

要想更好的理解MAPPO算法的原理机制,得先从On-PolicyOff-Policy 两种算法类型出发。在强化学习中,on-policyoff-policy 算法根据策略更新时是否依赖当前策略的经验来区分。

以下是两类算法的定义和常见算法列表:


2.1. On-Policy 算法

定义

  • On-policy 算法依赖于当前策略生成的经验进行更新。
  • 每次策略更新需要使用最新的采样数据,不能直接利用历史经验。
  • 强调策略与数据分布的一致性。
常见的 On-Policy 算法
  1. Policy Gradient (PG)

    • 基本策略梯度方法。
  2. Trust Region Policy Optimization (TRPO)

    • 提高策略更新的稳定性,限制更新幅度。
  3. Proximal Policy Optimization (PPO)

    • TRPO 的改进版本,具有更简单的实现。
    • 两种变体:clip-PPO 和 adaptive KL-PPO。
  4. Actor-Critic 系列

    • A2C (Advantage Actor-Critic):同步更新的 Actor-Critic。
    • A3C (Asynchronous Advantage Actor-Critic):异步更新版本。
  5. MAPPO (Multi-Agent PPO)

    • 专为多智能体场景设计的 PPO 变种。
优点
  • 理论收敛性强。
  • 更新稳定,适合复杂策略。
缺点
  • 样本利用率低(每条数据通常只用一次)。
  • 对环境交互的需求较高。

2.2 Off-Policy 算法

定义

  • Off-policy 算法利用历史经验进行策略更新,数据采样可以来自不同策略。
  • 借助经验回放(replay buffer)提高样本利用率。
常见的 Off-Policy 算法
  1. Q-Learning 系列

    • DQN (Deep Q-Network):结合神经网络的 Q-learning。
    • Double DQN:解决 DQN 过估计问题。
    • Dueling DQN:分离状态价值和动作优势。
  2. Deterministic Policy Gradient (DPG)

    • 专为连续动作空间设计。
  3. Deep Deterministic Policy Gradient (DDPG)

    • DPG 的深度强化学习版本,结合 replay buffer 和目标网络。
  4. Twin Delayed Deep Deterministic Policy Gradient (TD3)

    • DDPG 的改进版,缓解过估计问题。
  5. Soft Actor-Critic (SAC)

    • 基于最大熵的策略,适用于连续动作空间。
  6. Q-Learning with Function Approximation

    • Fitted QNeural Fitted Q 等。
优点
  • 样本利用率高(数据可多次利用)。
  • 更适合数据采样成本高的任务(如真实机器人交互)。
缺点
  • 更新的稳定性较差(需要经验回放和目标网络)。
  • 训练复杂度较高。

对比总结

特性 On-Policy Off-Policy
样本利用率 低(一次性使用) 高(可重复利用)
缓冲区 无长期缓冲区 使用 replay buffer
策略一致性 必须与当前策略一致 可利用任意策略生成的数据
学习效率 依赖高频环境交互 适合数据采样成本高的场景
收敛性 理论收敛性强 收敛性依赖数据分布
应用场景 实时决策、多智能体 复杂连续动作、高成本环境

形象比喻

on-policy有点像个调皮的小孩子,被打了/奖励了,当场就长记性的那种。而off-policy这种小孩子,被打了/奖励了,它还得回味下,这是一次偶然的惩罚还是这样做就是不好的,他还会去调皮的捣蛋,直到被打怕了(学习到了)。

On-Policy 的小孩

  • "被打了/奖励了,当场就长记性"
    贴合 on-policy 的特点:
    • on-policy 是即时性学习,完全依赖于当前策略的反馈进行调整。
    • 它专注于当前的策略表现,而不会回头复盘过去的错误或奖励。
    • 优点:即时调整,学习过程直接且明确。
    • 缺点:缺乏对历史的反思和利用,样本效率低。

Off-Policy 的小孩

  • "回味一下,这是一场偶然的惩罚还是这样做就是不好的"

    • 描述了 off-policy 的核心机制:利用经验回放。off-policy 会保存大量的历史经验,在反复回顾和分析中找到优化策略的方法。
    • 这种行为类似一个喜欢"钻牛角尖"的小孩,经过无数次试验才明白真正的规律。
  • "调皮地捣蛋,直到被打怕了"

    • off-policy 算法在学习时确实会反复尝试甚至冒险探索(如 DQN 的 ϵϵ-greedy 策略),不断调整对环境的理解。
    • 它的学习过程可能显得缓慢,但通过深入分析历史数据,它最终会学得更全面和稳定。

它们的关键区别:

  • 即时性 vs 历史性:on-policy 专注于当前,而 off-policy 反思过去。
  • 效率 vs 深度:on-policy 快速适应环境,而 off-policy 更深刻地理解长期规律。

3 MAPPO 是 On-Policy,如何学习历史经验?

有了上面的基础,MAPPO 是 on-policy。它的缓冲区(buffer)在每次新的 episode 开始时会被清空,而不像 off-policy 算法那样长期保留数据。这主要体现在以下几点:

为什么会清空缓冲区?

On-Policy 的约束

On-policy 算法(如 PPO 和 MAPPO)的策略更新只能依赖最新策略采样的数据,历史数据与当前策略分布不一致,因此被舍弃。这确保了策略更新的稳定性。

如何应对这个问题?

尽管无法直接使用历史经验,仍然可以通过以下方法弥补:

  1. 加大采样量(buffer size)

    增加单次采样的 episode_lengthbatch_size,让模型在每次采样时接触更多样本。

  2. 使用 advantage 标准化

    通过标准化 GAE 或 Q 值来减小不同 episode 数据间的方差,从而稳定更新。

  3. 调整训练步数

    MAPPO 的一个优势是,它通常以 centralized critic 方式加速策略学习。通过适当增加训练步数,可以弥补无法利用历史经验的缺陷。

  4. 环境重置机制

    对于训练环境,确保多样性,例如引入 domain randomization 或多种初始化状态,间接增加训练数据的广度。


4 MAPPO 算法的调参建议

MAPPO 的核心参数调节分为以下几类:

超参数相关
  • 学习率(learning rate)

    适当调低学习率可以提高稳定性,尤其在多智能体环境中噪声较大的情况下。通常建议从 1e−4或 5e−4开始测试。

  • 折扣因子(gamma)

    γγ 控制长期回报的权重,推荐从 0.95 或 0.99开始,根据任务的时间跨度调整。

  • GAE λ(lambda for Generalized Advantage Estimation)

    通常设置为 0.95 左右,平衡偏差与方差的影响。

  • clip range(裁剪范围)

    PPO 的核心超参数,通常设置为 0.1 到 0.3 之间,越小代表对策略更新的限制越强。

网络结构相关
  • 隐藏层大小(hidden size)

    可以调试网络的层数和每层的单元数。典型设置为两层,每层 64 到 256 个单元,视环境复杂度而定。

  • 共享网络与独立网络

    MAPPO 支持共享网络(centralized critic)或独立网络(decentralized critic)。如果任务需要高效协作,建议使用共享网络。

环境相关
  • batch size

    批量大小对训练效率有很大影响,推荐设置为每次采样 2048 到 4096 个 time steps,或者按环境规模调整。

  • episode length

    对于 MAPPO,episode_length 确实非常关键,因为它决定了每次采样的数据量。可以根据环境复杂度和任务长度动态调整,通常从 200 到 1000 步之间。

更新频率
  • policy update iterations
    每次采样后,建议进行 4 到 10 次梯度更新(epochs),以保证策略能够充分利用每批数据。

[Python]On-PolicyOff-Policy实现

Proximal Policy Optimization (PPO) 为例:

🔥若是下面代码复现困难或者有问题,欢迎评论区留言 ;需要以整个项目形式的代码,请在评论区留下您的邮箱📌,以便于及时分享给您(私信难以及时回复)。

python 复制代码
"""《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) 为例:

python 复制代码
"""《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:
        θ' = θ

[Notice] 注意事项

on-policy 关键点:

  • 数据从环境实时采样,不存储历史数据。
  • 更新策略和价值网络时仅使用当前采样的数据。
  • 每次策略更新后,之前的数据会被丢弃。

off-policy 关键点:

  • 使用 replay buffer 保存历史数据,重复利用经验。
  • 策略与目标网络更新分离,数据可以来自不同的策略。
  • 数据利用率高,但需要经验回放和目标网络来稳定训练。

由于博文主要为了介绍相关算法的原理和应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳或者无法运行,一是算法不适配上述环境,二是算法未调参和优化,三是没有呈现完整的代码,四是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。


5 总结

MAPPO 是一个高效、稳定且适应性强的多智能体强化学习算法,通过结合 PPO 的稳定性和多智能体环境的需求,为协作与竞争场景提供了强有力的解决方案。


博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:**Rainbook_2,**联系作者。✨

相关推荐
菜鸟的人工智能之路10 分钟前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python11 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
C++忠实粉丝11 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
小白不太白95012 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式
WeeJot嵌入式16 分钟前
卷积神经网络:深度学习中的图像识别利器
人工智能
喜欢猪猪18 分钟前
Django:从入门到精通
后端·python·django
糖豆豆今天也要努力鸭23 分钟前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
脆皮泡泡25 分钟前
Ultiverse 和web3新玩法?AI和GameFi的结合是怎样
人工智能·web3
机器人虎哥28 分钟前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
码银36 分钟前
冲破AI 浪潮冲击下的 迷茫与焦虑
人工智能