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

使用DummyVecEnv包装gym_super_mario_bros环境时遇实例重复错误

解决DummyVecEnv包装Super Mario Bros环境的实例重复报错问题

问题重现

尝试用DummyVecEnv包装gym_super_mario_bros环境时,两种写法均触发相同错误:

"You tried to create multiple environments, but the function to create them returned the same instance instead of creating different objects"

初始代码:

env = gym_super_mario_bros.make("SuperMarioBros-v0")     
env = JoypadSpace(env, SIMPLE_MOVEMENT)     
env = GrayScaleObservation(env, keep_dim=True) 
env = DummyVecEnv([lambda: env]) # 此处报错

封装环境创建逻辑后的代码:

# 封装环境创建逻辑到函数中
def create_default_environment():
     newEnv = gym_super_mario_bros.make("SuperMarioBros-v0")     
     newEnv = JoypadSpace(newEnv, SIMPLE_MOVEMENT)     
     return GrayScaleObservation(newEnv, keep_dim=True) 
# 创建调用辅助函数的lambda列表
env = DummyVecEnv([lambda: create_default_environment()]) # 仍报错

解决方法

  1. 避免lambda延迟绑定问题
    直接在lambda内部完成完整的环境创建与包装流程,彻底消除外部变量或函数可能带来的实例复用风险:
from stable_baselines3.common.env_util import DummyVecEnv
from gym_super_mario_bros import make
from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
from nes_py.wrappers import JoypadSpace
from stable_baselines3.common.atari_wrappers import GrayScaleObservation

env = DummyVecEnv([
    lambda: GrayScaleObservation(
        JoypadSpace(
            make("SuperMarioBros-v0"),
            SIMPLE_MOVEMENT
        ),
        keep_dim=True
    )
])
  1. 验证环境实例的独立性
    在创建DummyVecEnv前,先手动检查环境创建函数是否真的返回不同实例:
env1 = create_default_environment()
env2 = create_default_environment()
print(env1 is env2)  # 输出False才表示实例完全独立

如果输出True,说明gym_super_mario_bros.make默认返回单例,可通过指定随机seed强制生成新实例:

import random

def create_default_environment():
     newEnv = gym_super_mario_bros.make("SuperMarioBros-v0", seed=random.randint(0, 10000))     
     newEnv = JoypadSpace(newEnv, SIMPLE_MOVEMENT)     
     return GrayScaleObservation(newEnv, keep_dim=True) 
  1. 检查依赖版本兼容性
    确保stable_baselines3、gym_super_mario_bros和nes-py为最新稳定版,旧版本可能存在逻辑bug:
pip install --upgrade stable-baselines3 gym-super-mario-bros nes-py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:42:14