Gym_super_mario_bros 的 DummyVecEnv 构造函数出现问题

问题描述 投票:0回答:1

摘要:我想做的就是使用

DummyVecEnv
构造函数来包装我的健身房环境,即
env = DummyVecEnv([lambda: env])
但是我这样做时总是出错。目前使用 https://pypi.org/project/gym-super-mario-bros/ 作为超级马里奥的健身房包装。我有一种感觉,我误解了我应该提供构造函数的参数,但我是 python 新手,很难理解我缺少的内容。

我在从

DummyVecEnv
返回的环境中使用
gym_super_mario_bros.make()
构造函数时遇到困难。我不断收到错误“您尝试创建多个环境,但创建它们的函数返回相同的实例而不是创建不同的对象”。

我最初尝试将我的环境包装在 DummyVecEnv 中,就像我在许多论坛上看到的那样:

env = gym_super_mario_bros.make("SuperMarioBros-v0")     
env = JoypadSpace(env, SIMPLE_MOVEMENT)     
env = GrayScaleObservation(env, keep_dim=True) 
env = DummyVecEnv([lambda: env]) #This line errors

但是我收到了这个错误:

File c:\Users\truem\AppData\Local\Programs\Python\Python311\Lib\site-packages\stable_baselines3\common\vec_env\dummy_vec_env.py:30, in DummyVecEnv.init(self, env_fns)
     29 def init(self, env_fns: List[Callable[[], gym.Env]]):
---> 30     self.envs = [_patch_env(fn()) for fn in env_fns]
     31     if len(set([id(env.unwrapped) for env in self.envs])) != len(self.envs):
     32         raise ValueError(
     33             "You tried to create multiple environments, but the function to create them returned the same instance "
     34             "instead of creating different objects. "(...)
     39             "Please read https://github.com/DLR-RM/stable-baselines3/issues/1151 for more information."
     40         )

然后我尝试遵循 github 链接中列出的修复以及文档中提供的示例

https://stable-baselines.readthedocs.io/en/master/guide/examples.html

我继续创建了一个新的辅助函数

create_default_environment
,它应该创建新的环境实例并返回它们,但尽管如此,它仍然无法工作。

这就是我的代码现在的样子:

#wrap my env creation in a function
def create_default_environment():
     newEnv = gym_super_mario_bros.make("SuperMarioBros-v0")     
     newEnv = JoypadSpace(newEnv, SIMPLE_MOVEMENT)     
     return GrayScaleObservation(newEnv, keep_dim=True) 
#Create lambda in a list which calls helper function
env = DummyVecEnv([lambda: create_default_environment()]) #still failing

我继续将初始的 env 构造包装在一个辅助函数中

create_default_environment()
,我已经验证该函数每次调用都会返回一个新的 env 实例。然后我使用该包装器插入
DummyVecEnv
构造函数:
env = DummyVecEnv([lambda: create_default_environment()])
但编译器仍然抱怨我传入的函数列表没有返回新实例。 我一直在尝试模拟我在基线提供的示例代码中看到的内容:

from stable_baselines.common.vec_env import DummyVecEnv, VecNormalize
from stable_baselines import PPO2

env = DummyVecEnv(\[lambda: gym.make("HalfCheetahBulletEnv-v0")]) #why does this work but mine does not?

但我不确定我做错了什么。 python 新手,所以如果我遗漏了一些明显的东西,请原谅我。

python machine-learning openai-gym stable-baselines
1个回答
0
投票

马里奥游戏的这个问题是由于gym和/或stable_baselines3之间的版本不兼容造成的。我遇到了同样的问题。我正在使用你用过的包装纸。如果我找到合适的版本,我会把它们写在这里。

© www.soinside.com 2019 - 2024. All rights reserved.