如何复现运行Python Gymnasium Taxi-v3环境?现有配置未达预期
Gymnasium Taxi-v3 复现失败的误区与解决步骤
问题描述
使用Gymnasium开展强化学习研究,尝试复现Taxi-v3环境的运行结果,已设置全局Python、NumPy种子,并在env.reset时传入种子,但仍无法实现复现。使用代码如下:
import gymnasium as gym import numpy as np import random seed = 42 random.seed(seed) np.random.seed(seed) env = gym.make("Taxi-v3") state, info = env.reset(seed=seed)
认知误区
- 混淆全局种子与环境独立RNG:Gymnasium的每个环境都维护独立的随机数生成器(RNG),全局
random和numpy种子不会直接控制环境内部的随机行为(如动作采样、状态转移逻辑),仅设置全局种子无法保证环境行为的可复现性。 - 仅依赖
reset的种子参数:env.reset(seed=seed)仅负责初始化环境的起始状态,无法覆盖环境其他随机过程的RNG配置。
缺失的配置步骤
要实现完全可复现,需补充以下种子绑定操作:
- 绑定动作空间种子:动作空间的随机采样(如
env.action_space.sample())依赖独立RNG,需单独设置:env.action_space.seed(seed) - 绑定环境底层RNG:直接设置环境内部的核心RNG,覆盖所有状态转移等随机逻辑:
env.unwrapped.seed(seed)
完整可复现代码
import gymnasium as gym import numpy as np import random seed = 42 # 全局种子设置(可选但建议统一) random.seed(seed) np.random.seed(seed) env = gym.make("Taxi-v3") # 绑定动作空间种子 env.action_space.seed(seed) # 绑定环境底层RNG env.unwrapped.seed(seed) # 初始化环境并传入种子 state, info = env.reset(seed=seed)
内容的提问来源于stack exchange,提问作者Anselmo Blanco Dominguez
相关产品推荐
相关产品推荐

