Gym Retro入門 / retro-movies
1. retro-movies
retro-moviesリポジトリでは、ソニック・ザ・ヘッジホッグのkb2形式の人間によるデモンストレーションのコレクションを提供しています。
現時点では、レトロコンテストで使用されるソニックの各レベルの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.bk2
・SonicTheHedgehog2-Genesis
:
・SonicAndKnuckles3-Genesis
:
2. ムービーをビデオに変換
ムービー(*.bk2)をビデオ(*.mp4)に変換するコマンドは次の通りです。
出力先は、ムービーと同じフォルダになります。
$ python -m retro.scripts.playback_movie human/SonicTheHedgehog-Genesis/contest/SonicTheHedgehog-Genesis-GreenHillZone.Act1-0000.bk2
3. ムービーからの状態の取得
ムービーから状態を取得して、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ボタンを押します。
他のコントローラを使う場合はコードを適宜書き換えて使います。
この記事が気に入ったらサポートをしてみませんか?