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

使用Stable Baselines3时,如何为Gymnasium环境重置设置随机种子?

在Stable Baselines3中为Gymnasium环境设置随机种子

在Stable Baselines3(SB3)中,单独调用np.random.seed()无法保证整个训练流程的可复现性——因为SB3会统一管理环境、模型、采样过程等多个环节的随机状态,需要通过SB3提供的专用接口来设置种子,以下是几种常用方法:

1. 创建向量环境时直接指定种子

如果你用make_vec_env创建并行环境,可以直接在函数中传入seed参数,SB3会自动为每个子环境设置对应种子,确保环境初始化的一致性:

import gymnasium as gym
from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env

# 创建并行环境时设置全局种子
vec_env = make_vec_env("CartPole-v1", n_envs=4, seed=42)

model = PPO("MlpPolicy", vec_env, verbose=1)
model.learn(total_timesteps=25000)

2. 为已创建的环境设置种子

如果已经创建了向量环境,可以调用vec_env.seed()方法批量设置所有子环境的种子:

vec_env = make_vec_env("CartPole-v1", n_envs=4)
# 批量设置种子
vec_env.seed(42)

对于非向量环境(单个Gymnasium环境),则直接调用env.reset(seed=xxx)即可,和你之前用的原生Gymnasium方法一致。

3. 初始化模型时统一设置种子

在初始化SB3模型(如PPO、DQN等)时,可以传入seed参数,这个参数会同时设置环境种子、模型网络初始化种子、采样过程种子等,是最便捷的全局复现方式:

vec_env = make_vec_env("CartPole-v1", n_envs=4)
# 模型初始化时设置全局种子,覆盖环境和模型的随机状态
model = PPO("MlpPolicy", vec_env, verbose=1, seed=42)
model.learn(total_timesteps=25000)

为什么np.random.seed()无效?

SB3内部会单独维护numpy、PyTorch以及环境的随机状态,单独设置numpy种子只能影响部分独立的numpy操作,无法覆盖SB3框架内的所有随机流程(比如环境重置、策略网络的权重初始化、经验采样等),因此必须通过上述SB3提供的接口来统一配置种子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:25:54