SuperMarioBros-Nes с базовым уровнем OpenAI, как? - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь запустить среду SuperMarioBros в базовых версиях OpenAI. Обычно эти ретро-среды отличаются от родного 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, не найденную.

Хотя после установки внешнего ретро все должно быть в порядке, но для этого требуются файлы 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 голосов
/ 23 марта 2019

Я сделал хак и смог запустить Марио в ретро (в самих окнах). Ниже приведены пошаговые инструкции:

  1. установить ретро и установить https://pypi.org/project/gym-super-mario-bros/ дано в моем предыдущем ответ
  2. Копирование файлов .nes из lib / python3.7 / site-packages / gym_super_mario_bros / _roms (это где тренажерный зал-супер-марио-бро установлен в пакетах сайта) -> к Lib \ site-packages \ retro \ data \ stable \ SuperMarioBros-Nes (это где ретро установлено в пакетах сайта).
  3. Переименовать super-mario-bros.nes к rom.nes
  4. Вы сделали. Вы можете начать Марио, используя следующий код:
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()

Дополнительный совет: если вы хотите поиграть в марио вручную после этого, выполните следующую команду. (Z для прыжка и x для стрельбы): python -m retro.examples.interactive --game SuperMarioBros-Nes [Наслаждаться]

0 голосов
/ 23 марта 2019

По умолчанию только 1 игровое ПЗУ установлено ретро.

Вы пробовали это. Это не использование ретро env (или, возможно, использование внутри, не уверен). Но это работает для меня:
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)

...