gym_super_mario_bros (7.3.0) - ValueError: 没有足够的值来解压(预期 5 个,得到 4)

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

我正在运行Python3(3.8.10)并尝试使用gym_super_mario_bros(7.3.0)和nes_py库进行教程。我遵循各种教程代码并在多台计算机上尝试但出现错误。我尝试调整一些参数,例如将“截断”变量添加到要返回的值列表中。由于这是一个教程级别的示例,我很好奇出了什么问题。它看起来像 env.step() 的东西。下面是代码:

from nes_py.wrappers import JoypadSpace
from gym_super_mario_bros.actions import SIMPLE_MOVEMENT

env = gym_super_mario_bros.make('SuperMarioBros-v0')
env = JoypadSpace(env, SIMPLE_MOVEMENT)

done = True
for step in range(1000):
        if done:
                env.reset()
        state, reward, done, info = env.step(env.action_space.sample())
        env.render()
env.close()

我得到的错误如下:

/home/d/.local/lib/python3.8/site-packages/gym/envs/registration.py:555: UserWarning: WARN: The environment SuperMarioBros-v0 is out of date. You should consider upgrading to version `v3`.
  logger.warn(
/home/d/.local/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:195: UserWarning: WARN: The result returned by `env.reset()` was not a tuple of the form `(obs, info)`, where `obs` is a observation and `info` is a dictionary containing additional information. Actual type: `<class 'numpy.ndarray'>`
  logger.warn(
/home/d/.local/lib/python3.8/site-packages/gym/utils/passive_env_checker.py:219: DeprecationWarning: WARN: Core environment is written in old step API which returns one bool instead of two. It is recommended to rewrite the environment with new step API.
  logger.deprecation(
Traceback (most recent call last):
  File "mario.py", line 12, in <module>
    state, reward, done, info = env.step(env.action_space.sample())
  File "/home/d/.local/lib/python3.8/site-packages/nes_py/wrappers/joypad_space.py", line 74, in step
    return self.env.step(self._action_map[action])
  File "/home/d/.local/lib/python3.8/site-packages/gym/wrappers/time_limit.py", line 50, in step
    observation, reward, terminated, truncated, info = self.env.step(action)
ValueError: not enough values to unpack (expected 5, got 4)

感谢任何指导,谢谢!

python openai-gym
3个回答
4
投票

移至“...../python3.8/site-packages/gym/wrappers/time_limit.py”。并删除所有“截断”


1
投票

打开你的 venv,然后运行

pip uninstall gym
接下来是
pip install gym==0.23.1

他们显然在健身房库的一些更新中更改了 API。现在,它返回第五个值,称为

truncate
,顺序为(状态、奖励、完成、截断、信息)。尽管修改库文件可能会按预期工作,就像此处另一个答案中所建议的那样,但最好永远不要更改库的源代码,以防止破坏内部更深层的其他内容。


0
投票

pip installgym==0.25.0,对我有用。

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