使用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
相关产品推荐
相关产品推荐

