我想为我的体育馆环境播种。从 官方文档 来看,我的做法是-
import gymnasium as gym
env = gym.make("LunarLander-v2", render_mode="human")
observation, info = env.reset(seed=42)
但是,stable_baselines3似乎不需要从用户端重置,如下面的程序所示-
import gymnasium as gym
from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env
# Parallel environments
vec_env = make_vec_env("CartPole-v1", n_envs=4)
model = PPO("MlpPolicy", vec_env, verbose=1)
model.learn(total_timesteps=25000)
model.save("ppo_cartpole")
del model # remove to demonstrate saving and loading
model = PPO.load("ppo_cartpole")
我该如何做用
stable_baselines3
放置种子?我尝试放置
np.random.seed(24)
但这没有用。
可以使用
seed
参数在
make_vec_env
中设定种子,以设定
stable_baselines3
中的 Gymnasium 环境种子。此参数会将种子传播至环境及向量化包装器。
以下是如何使用
stable_baselines3
设定种子的更正方法:
import gymnasium as gym
import numpy as np
from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env
#设定随机种子以求可复现性
seed = 42
np.random.seed(seed)
# 建立具有种子值的平行环境
env = make_vec_env("CartPole-v1", n_envs=4, seed=seed)
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=25000)
在此代码中:
-
我们设定了全域随机种子
np.random.seed(seed)
。 -
我们将
seed
参数传递至make_vec_env
。这可以确保每个环境都会使用相同的种子(或在平行环境情况下使用衍生种子)进行初始化,让的训练可复现。
透过这些变更,的训练程序现在应该从执行到执行都是确定性的,因为环境会在相同初始状态下初始化且动作取样也会基于设定好的种子。
标签:python,reinforcement-learning,stable-baselines,gymnasium From: 78733192