odenのメモ帳

いっつも解決したことを書き留めなくて,後々後悔するので,それを防ごうプロジェクト

OpenAI Gymで一定間隔のエピソードごとに動画を保存する方法

gym環境で動画を保存する際には以下のようにすれば,一応指定したフォルダに動画を保存することができる.
参考:
discuss.openai.com

import gym
from gym import wrappers
env = gym.make(‘CartPole-v0’)
env = wrappers.Monitor(env, ‘/path/to/movie_folder’)

このようにすれば,メソッドを呼ばなくても勝手にある間隔で動画が保存される.
f:id:oden-dengaku:20180204003922p:plain

しかし,エピソード数が0,1,8,27,64,125,216,343…となぜかn^3ごとに保存されている.

なぜn^3?

よく分からずGitHubのコードを眺めていると原因が判明した.
github.com

デフォルトで指定されているvideo_callableはcapped_cubic_video_scheduleという内部で用意されている関数が指定されている.これが上述のエピソードごとに動画を保存するよう決定していた.

そこで,引数でvideo_callableを自分が確認したいエピソードごとに指定するようにしてやればいい.
以下は100エピソードごと動画を保存するにしたパターン.

import gym
from gym import wrappers
env = gym.make(‘CartPole-v0’)
env = wrappers.Monitor(env, ‘/path/to/movie_folder’, video_callable=(lambda ep: ep % 100 == 0))

これにより保存間隔を変更することができた.