概要
警告
初めての投稿なので読みにくい記事かもしれませんがご容赦ください。
本記事ではcolab上でgymnasiumを使って動画ファイルを出力する方法を簡単にまとめています。正直gymnasiumの公式ドキュメントを探せば見つかるのですが、不備もあったりするので、一応差別化は出来ているかなと思います。
英文読みたくない人もいるだろうし...
ある程度勉強している人を読者の対象として考えているので、基本的なことの解説は省略したいと思います(gymとは何かみたいな)。
環境
・google colab
・Python 3.10.12
本題
早速コードを見ていきましょう。まずはgymnasium
のインストール
!pip install gymnasium
次に今回LunarLander-v2
を環境として使うためgymnasium[box2d]
をインストールするのですが、それだけではエラーが出るので下記のサイトを参考にswig
を追加
!pip install -q swig
!pip install -q gymnasium[box2d]
本体
以下のサイトにあるものを少し変えたものです。
from gymnasium.wrappers import RecordVideo
は公式のドキュメントにはなかったのですが、必須です。
video_folder="./"
も公式のものとは少し変えています。どっちでもいいと思います。
import os
import gymnasium as gym
from gymnasium.wrappers import RecordVideo
env = gym.make("LunarLander-v2", render_mode="rgb_array")
trigger = lambda t: t % 10 == 0 #動画を保存をするエピソードの指定
env = gym.wrappers.RecordVideo(env, video_folder="./", episode_trigger=trigger, disable_logger=True)
for i in range(50):
termination, truncation = False, False
_ = env.reset(seed=123)
while not (termination or truncation):
obs, rew, termination, truncation, info = env.step(env.action_space.sample()) #policyはランダム
env.close()
こうすることで以下のように出力を得ます。本当はダウンロードせずに動画を見たかったのですが、関数が分かりませんでした。(追記(1/18):以下のgithubにディスプレイで表示させる方法が載ってました。今後また更新します)
gymとの変更点
いくつかあると思いますが、記事下部の参考文献のコードと、今回載せているコードを比較した上での変更点を一部紹介していきます。
- close()の必要化
公式のサンプルコードを見ているとenv.close()
が必ず入っています。
colab上で試したところ、なくても動きますが、たった1行ですし、入れるにこしたことはない気がします。
公式のドキュメントでは以下のように述べられています。
Closes the environment, important when external software is used, i.e. pygame for rendering, databases
- stepの返り値の数が増加
以前はobservation, reward, done, info
と4つでしたが、done
がtermination, truncation
に分けられています。今まではとりあえず終わったらdone
に返り値を渡していたが、終わり方によって返り値を渡すものを変えようといった取り組みでしょうか。
僕の解釈違いの可能性もあるので詳しくは公式を見てもらうのがいいと思います。
終わりに
私自身まだまだ公式のドキュメントの読み込みが足りないので、とても簡単な解説の記事になってしまいましたが、いかがだったでしょうか?今後も学習し、適宜改善しようとは思っていますが、記事の不備、補足、書き方の改善点など意見、アドバイスがあればコメントで教えていただけると幸いです。
参考文献