Код: Выделить всё
env = DummyVecEnv([lambda: env])
Мне трудно использовать конструктор 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 )
https://stable- baselines.readthedocs.io/en/master/guide/examples.html
Я пошел дальше и создал новую вспомогательную функцию create_default_environment, которая должна создавать новые экземпляры env и возвращать их, но, несмотря на это, он по-прежнему не работает.
Вот как сейчас выглядит мой код:
Код: Выделить всё
#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 = 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?
Подробнее здесь: https://stackoverflow.com/questions/780 ... mario-bros