見出し画像

Gym Retro入門 / retro-movies

1. retro-movies

retro-moviesリポジトリでは、ソニック・ザ・ヘッジホッグのkb2形式の人間によるデモンストレーションのコレクションを提供しています。

GitHub - openai/retro-movies

現時点では、レトロコンテストで使用されるソニックの各レベルの1つのデモンストレーションのみで構成されています。これらの記録を使用して、エージェントを学習させることができます。

SonicTheHedgehog-Genesis
 ・SonicTheHedgehog-Genesis-GreenHillZone.Act1-0000.bk2
 ・SonicTheHedgehog-Genesis-GreenHillZone.Act2-0000.bk2
 ・SonicTheHedgehog-Genesis-GreenHillZone.Act3-0000.bk2
 ・SonicTheHedgehog-Genesis-LabyrinthZone.Act1-0000.bk2
 ・SonicTheHedgehog-Genesis-LabyrinthZone.Act2-0000.bk2
 ・SonicTheHedgehog-Genesis-LabyrinthZone.Act3-0000.bk2
 ・SonicTheHedgehog-Genesis-MarbleZone.Act1-0000.bk2
 ・SonicTheHedgehog-Genesis-MarbleZone.Act2-0000.bk2
 ・SonicTheHedgehog-Genesis-MarbleZone.Act3-0000.bk2
 ・SonicTheHedgehog-Genesis-ScrapBrainZone.Act1-0000.bk2
 ・SonicTheHedgehog-Genesis-ScrapBrainZone.Act2-0000.bk2
 ・SonicTheHedgehog-Genesis-SpringYardZone.Act1-0000.bk2
 ・SonicTheHedgehog-Genesis-SpringYardZone.Act2-0000.bk2
 ・SonicTheHedgehog-Genesis-StarLightZone.Act1-0000.bk2
 ・SonicTheHedgehog-Genesis-StarLightZone.Act2-0000.bk2
 ・SonicTheHedgehog-Genesis-StarLightZone.Act3-0000.bk2SonicTheHedgehog2-Genesis
  :
・SonicAndKnuckles3-Genesis
  :

2.  ムービーをビデオに変換

ムービー(*.bk2)をビデオ(*.mp4)に変換するコマンドは次の通りです。
出力先は、ムービーと同じフォルダになります。

$ python -m retro.scripts.playback_movie human/SonicTheHedgehog-Genesis/contest/SonicTheHedgehog-Genesis-GreenHillZone.Act1-0000.bk2

3. ムービーからの状態の取得

画像1

ムービーから状態を取得して、Gym環境で利用することができます。
コードは次の通りです。

import retro

# ムービーの取得
movie_path = 'human/SonicTheHedgehog-Genesis/contest/SonicTheHedgehog-Genesis-GreenHillZone.Act1-0000.bk2'
movie = retro.Movie(movie_path)
movie.step()

# 環境の生成
env = retro.make(game=movie.get_game(), state=retro.State.NONE, use_restricted_actions=retro.Actions.ALL)
env.initial_state = movie.get_state()
env.reset()

# ムービーの再生
print('ムービーの再生')
while movie.step():
   env.render()

   # 状態の取得
   keys = []
   for i in range(len(env.buttons)):
       keys.append(movie.get_key(i, 0))
   _obs, _rew, _done, _info = env.step(keys)
   saved_state = env.em.get_state()


# ムービーの最終状態で開始されたステッピング環境
print('ムービーの最終状態で開始されたステッピング環境')
env.initial_state = saved_state
env.reset()
while True:
   env.render()
   env.step(env.action_space.sample())

4. 自分のプレイをムービーに録画

「human-recorder.py」を使って、自分のプレイをムービーに録画ことができます。パラメータは、環境ID、シナリオファイル、ステートファイルになります。

$ pip install pyglet
$ python human-recorder.py --game SonicAndKnuckles3CustomKevin-Genesis --scenario contest --state MushroomHillZone.Custom

このコードはXboxコントローラに対応しています、
時間を少しだけ巻き戻す場合はRバンパー、エピソードをファイルに記録するには、ESCまたはコントローラーの中央のXboxボタンを押します。
他のコントローラを使う場合はコードを適宜書き換えて使います。


この記事が気に入ったらサポートをしてみませんか?