具有OpenAI基准的SuperMarioBros-Nes,如何?

时间:2019-03-23 00:44:19

标签: python openai-gym

我正在尝试在OpenAI基准中运行SuperMarioBros环境。通常,这些复古环境与健身房图书馆支持的本地attari 2600不同。

为了使其能够与基准一起运行,需要安装retro随附的第三方库,并使用从此链接(https://www.videogames.ai/2019/01/29/Setup-OpenAI-baselines-retro.html)获得帮助的代码

python -m retro.import .
python -m baselines.run --alg=a2c --env=SuperMarioBros-Nes --gamestate=Level3-1.state --network=cnn --num_env=2 --num_timesteps=1e3

但不幸的是,即使在此之后,它仍然无法运行,并没有找到rom错误。

尽管在安装了外部Retro之后,应该可以,但是需要直接从游戏模拟器中获取Raw-rom文件。有没有可能找到转身的方法?还是我在这里想念东西

    Process SpawnProcess-2: Traceback (most recent call last): 
File "/usr/local/lib/python3.6/dist-packages/retro/__init__.py", line 49, in make     retro.data.get_romfile_path(game, inttype)   
File "/usr/local/lib/python3.6/dist-packages/retro/data/__init__.py", line 288, in get_romfile_path    
raise FileNotFoundError("No romfiles found for game: %s" % game) FileNotFoundError: 
No romfiles found for game: SuperMarioBros-Nes

2 个答案:

答案 0 :(得分:0)

默认情况下,Retro只安装1个游戏ROM。

您尝试过这个吗?它不使用复古环境(或者不确定使用内部)。但这对我有用:
https://pypi.org/project/gym-super-mario-bros/

Python 2.7.16 |Anaconda, Inc.| (default, Mar 14 2019, 21:00:58)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from nes_py.wrappers import BinarySpaceToDiscreteSpaceEnv
>>> import gym_super_mario_bros
>>> from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
>>> env = gym_super_mario_bros.make('SuperMarioBros-v0')
>>> env = BinarySpaceToDiscreteSpaceEnv(env, SIMPLE_MOVEMENT)
>>> done = True
>>> for step in range(5000):
...     if done:
...         state = env.reset()
...     state, reward, done, info = env.step(env.action_space.sample())
...     env.render()
...

注意:我正在linux机器上运行(Windows给了麻烦)

答案 1 :(得分:0)

我做了一次破解,能够以复古的方式(在Windows本身中)运行mario。以下是逐步的技巧:

  1. 重新安装并安装 我先前的https://pypi.org/project/gym-super-mario-bros/ 回答
  2. 从中复制.nes文件 lib / python3.7 / site-packages / gym_super_mario_bros / _roms(这是 在站点软件包中安装了Gym-super-mario-bros的位置)->到 库\ site-packages \ retro \ data \ stable \ SuperMarioBros-Nes(这是 在站点软件包中安装了retro的位置)。
  3. 重命名 super-mario-bros.nes到rom.nes
  4. 您完成了。您可以使用以下代码启动mario:
import retro
def main():
    env = retro.make(game='SuperMarioBros-Nes')
    obs = env.reset()
    while True:
        obs, rew, done, info = env.step(env.action_space.sample())
        env.render()
        if done:
            obs = env.reset()
    env.close()

if __name__ == "__main__":
    main()

一个额外的提示:如果您要在此之后手动玩mario,请运行以下命令。 (Z代表跳跃,x代表射击):python -m retro.examples.interactive --game SuperMarioBros-Nes [欣赏]