JoypadSpace.reset() 修改以解决“意外的关键字参数‘seed’”导致错误:“太多值无法解压(预期为 2)”

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

我遇到了与此处描述的相同的错误:TypeError:JoypadSpace.reset()获得了意外的关键字参数“seed”,当我运行以下代码时,我应该如何解决此问题? .

在上面提到的链接中,针对这个问题提出了一个解决方案,即使用以下代码修改 JoySpace.reset:

JoypadSpace.reset = lambda self, **kwargs: self.env.reset(**kwargs)

我用下面的代码尝试了这个解决方案:

from nes_py.wrappers import JoypadSpace
JoypadSpace.reset = lambda self, **kwargs: self.env.reset(**kwargs)

from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
env = JoypadSpace(env, SIMPLE_MOVEMENT)

from gym.wrappers import GrayScaleObservation
env = GrayScaleObservation(env, keep_dim=True)

from stable_baselines3.common.vec_env import DummyVecEnv    
env = DummyVecEnv([lambda: env])

gameState = env.reset()
obs, _, _, _, _ = env.step(1)
env.close()

但是这次我得到了错误:


值错误

  Traceback (most recent call last) 

  <ipython-input-3-7521e0795c59> in <cell line: 37>()

  35 

  36 # Size of frame output

  ---> 37 gameState = env.reset()

  38 obs, _, _, _, _ = env.step(1)

  39 env.close()

  /usr/local/lib/python3.10/dist-packages/stable_baselines3/common/vec_env/dummy_vec_env.py in reset(self)

  74 def reset(self) -> VecEnvObs:

  75 for env_idx in range(self.num_envs):

  ---> 76 obs, self.reset_infos[env_idx] = self.envs[env_idx].reset(seed=self._seeds[env_idx])

  77 self._save_obs(env_idx, obs)

  78 # Seeds are only used once

  ValueError: too many values to unpack (expected 2)

这个问题如何解决?

deep-learning openai-gym joypad
1个回答
0
投票

nes-py 8.2.1(及更早版本)和gym 0.26.0(及更高版本)之间不兼容。

NESEnv
未正确覆盖
reset()
Env
方法。

解决方法:

from nes_py import NESEnv
_reset = NESEnv.reset

def reset(**kwargs):
    obs_info = _reset(**kwargs)
    obs, info = obs_info if type(obs_info) == tuple else (obs_info, {})
    return obs, info

NESEnv.reset = reset
© www.soinside.com 2019 - 2024. All rights reserved.