You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PettingZoo与SuperSuit的异构观测空间多智能体强化学习问题

多智能体强化学习异构观测空间的帧堆叠解决方案

问题描述

我正尝试构建一个包含两类智能体的多智能体强化学习系统,两类智能体分别拥有不同的观测空间(尺寸各异的图像)与动作空间。我使用PettingZoo和SuperSuit封装自定义Gym环境,以实现向量化与帧跳变逻辑,并基于stable_baseline3实现了自定义PPO算法作为两类智能体的学习算法。环境创建代码如下:

import supersuit as ss
from stable_baselines3.common.vec_env.vec_monitor import VecMonitor
from pettingzoo.utils.env import ParallelEnv

num_envs = 4
num_cpus = 4
env = ParallelEnv()  # this line is just to show the dataType of variable env.
env = ss.frame_stack_v1(env, 4)
env = ss.pettingzoo_env_to_vec_env_v1(env)
env = ss.concat_vec_envs_v1(env, num_vec_envs=num_envs, num_cpus=num_cpus, base_class="stable_baselines3")
env = VecMonitor(env)

当前核心问题:环境需支持两种不同的动作与观测空间,但PettingZoo和SuperSuit暂不支持该特性。动作空间已通过gym的MultiDiscrete类解决,但观测空间处理受阻——需要对两类观测都应用帧跳变逻辑,尝试用gym.spaces.Dict存储两类智能体的观测空间时,SuperSuit的frame_stack_v1不支持Dict类型空间,导致运行报错。

可行解决思路

  • 自定义环境内部帧堆叠逻辑:放弃依赖SuperSuit的frame_stack_v1,在自定义ParallelEnv的step和reset方法中,为两类智能体分别维护独立的帧缓存缓冲区。每次获取观测时,将当前帧加入对应缓冲区,返回堆叠后的组合帧;重置环境时清空对应缓冲区并填充初始帧,确保每类智能体的帧堆叠逻辑独立运行。
  • 扩展SuperSuit支持Dict空间:自定义一个兼容Dict观测空间的帧堆叠Wrapper。继承SuperSuit的基础Wrapper类,重写observation_space属性,针对Dict内每个子空间单独计算堆叠后的空间维度;在observation方法中,遍历Dict的键值对,对每个子观测单独执行帧堆叠操作,最后返回包含堆叠后子观测的Dict结果。
  • 拆分训练流程解耦智能体:将两类智能体的训练流程拆分,为每类智能体单独创建适配其观测空间的子环境,各自应用SuperSuit的帧堆叠与向量化处理。在训练循环中,分别收集两类智能体的经验数据,输入到各自的PPO模型中更新参数;主环境负责同步两类智能体的状态交互,保证全局环境状态的一致性。

内容的提问来源于stack exchange,提问作者assaf caftory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:20:31