摘要:我想做的就是使用
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 新手,所以如果我遗漏了一些明显的东西,请原谅我。
马里奥游戏的这个问题是由于gym和/或stable_baselines3之间的版本不兼容造成的。我遇到了同样的问题。我正在使用你用过的包装纸。如果我找到合适的版本,我会把它们写在这里。