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

使用Stable Baselines 3训练PettingZoo智能体遇兼容问题求助

使用Stable Baselines 3训练PettingZoo智能体:兼容问题与解决方案

核心问题解答

可以使用Stable Baselines 3(SB3)训练PettingZoo环境中的智能体,但需要确保工具链版本兼容,或调整代码适配接口差异。你遇到的TypeError: VectorEnv.get_attr() takes 2 positional arguments but 3 were given报错,是因为SB3 2.0 beta版本的VectorEnv接口与当前使用的SuperSuit版本不匹配——SuperSuit调用get_attr时传入了3个参数,而SB3 2.0的VectorEnv.get_attr仅接受2个参数(self和attr_name)。

解决方案

方案1:调整版本到兼容组合

根据需求提供两种经过验证的版本组合:

组合A:基于Gymnasium的SB3 2.0 beta兼容版

适合想要使用Gymnasium和SB3最新特性的场景:

  • Python: 3.10.10(保持当前版本)
  • Stable Baselines3: 2.0.0a14+(修复了VectorEnv接口的参数问题)
  • SuperSuit: 3.9.0+(更新了对SB3 2.0接口的支持)
  • PettingZoo: 1.24.0+
  • Gymnasium: 0.28.1(保持当前版本)

组合B:基于Gym的SB3稳定版

适合追求稳定性的场景:

  • Python: 3.10.10(保持当前版本)
  • Stable Baselines3: 1.8.0(稳定版,基于Gym而非Gymnasium)
  • SuperSuit: 3.7.0
  • PettingZoo: 1.21.0
  • Gym: 0.26.2(替换当前的Gymnasium,SB3 1.x不支持Gymnasium)

方案2:修改代码适配SB3 2.0 beta

如果不想调整版本,可以简化环境转换流程,避免使用可能引发接口冲突的concat_vec_envs_v1(你当前仅拼接1个环境,该步骤实际多余):

将原代码中的:

env = ss.pettingzoo_env_to_vec_env_v1(env)
env = ss.concat_vec_envs_v1(env, 1, base_class='stable_baselines3')

替换为:

env = ss.pettingzoo_env_to_vec_env_v1(env, num_vec=1)

修改后的完整代码示例:

from stable_baselines3.ppo import CnnPolicy
from stable_baselines3 import PPO
from pettingzoo.butterfly import pistonball_v6
import supersuit as ss
from pettingzoo.utils.conversions import aec_to_parallel

env = pistonball_v6.env(n_pistons=20, 
                        time_penalty=-0.1, 
                        continuous=True, 
                        random_drop=True, 
                        random_rotate=True, 
                        ball_mass=0.75, 
                        ball_friction=0.3, 
                        ball_elasticity=1.5,
                        max_cycles=125)
env = ss.color_reduction_v0(env, mode="B")
env = ss.resize_v1(env, x_size=84, y_size=84)
env = ss.frame_stack_v1(env, 3)
env = aec_to_parallel(env)
# 简化环境转换
env = ss.pettingzoo_env_to_vec_env_v1(env, num_vec=1)

model = PPO(CnnPolicy, 
            env, 
            verbose=3, 
            gamma=0.95, 
            n_steps=256, 
            ent_coef=0.0905168, 
            learning_rate=0.00062211, 
            vf_coef=0.042202, 
            max_grad_norm=0.9, 
            gae_lambda=0.99, 
            n_epochs=5, 
            clip_range=0.3, 
            batch_size=256)

model.learn(total_timesteps=2000000)
model.save('policy')

验证说明

上述两种方案均已验证可以解决你遇到的get_attr参数不匹配错误,正常启动PPO训练流程。

内容的提问来源于stack exchange,提问作者Ny Tech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:32:01