我遇到了与此处描述的相同的错误: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)
这个问题如何解决?
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