概要
この記事では、Gymnasium(旧Open AI Gym)の環境構築方法を記載しています。
1. 初めに
私は最近、「ゼロから作るDeep Learning 4 強化学習編」を勉強し始め、強化学習の基礎を学んでいます。この本の中で触れられているOpenAI Gymを使った強化学習の実装に挑戦しようとしたところ、現在ではGymがGymnasiumに移管されており、そのままではコードが動かないことが判明しました。
そこで、Gymnasiumの使い方を調べていく中で得た知見を、記録として残すことにしました。この記録が、同じように「ゼロから作るDeep Learning」を学ぶ方や、Gymnasiumの利用を考えている方の参考になれば幸いです。
2. Gymnasiumとは
Gymnasiumは、強化学習(Reinforcement Learning, RL)に特化したツールキットで、もともとはOpenAIによって開発されたOpenAI Gymから移管されたプロジェクトです。また強化学習に関する論文では、ベンチマークとしてOpenAI Gymがよく使われます。
Gymnasiumは、基本的にはOpenAI Gymと同様の動作やAPIを提供しているため、Gymで慣れ親しんだユーザーはそのまま移行が容易です。また、従来のコードもほとんど修正せずに利用可能で、これまで培った学習や実験を継続することができます。
以下が公式ドキュメントになります。インストール方法から利用方法まで解説されています。
3. Gymnasiumを動かしてみる
今回まずは、入門編としてよく使われる「Cart Pole」を動かしてみたいと思います。まず始めに、以下のコマンドを実行します:
pip install gymnasium[classic-control]
gymnasiumのインストールが完了したら、以下を実行します。
import gymnasium as gym
# 環境を初期化
env = gym.make("CartPole-v1", render_mode="human")
# 環境をリセットして最初の観測値を生成
observation, info = env.reset()
for _ in range(1000):
# ここにアクションを挿入する。アクションがランダムに生成される。
action = env.action_space.sample()
# アクションを入力し、次のステップに移行
# 次の観測値、報酬、エピソードが終了したか中断されたかを受け取る
observation, reward, terminated, truncated, info = env.step(action)
# エピソードが終了した場合、新しいエピソードを開始するためリセット可能
if terminated or truncated:
observation, info = env.reset()
# 環境を終了
env.close()
旧OpenAI Gymとの違い
「ゼロから作るDeep Learning 強化学習編」で記述されているOpenAI Gymとの違いですが、
- CartPole-v0ではなくCartPole-v1が使われる。
CartPole-v0は現在ではサポートされておらず、CartPole-v1を使うことになります。 - step()の出力の違い
step()
で出力されてくるものが、「observation, reward, terminated, truncated, info
」となっています。従来はdone
でゲームを終了したかの判定をしていたのですが、terminated, truncated
と2つになりました。これは終了した理由を明確にするためです。
4. 基本的な使い方
- 環境を作成する
gym.make("CartPole-v1")
このコードでCartPole-v1という環境が作成され、エージェントが操作する舞台が設定されます。 - 環境をリセットする
reset()
reset()
メソッドを使用して、環境を初期状態に戻し、最初の観測値observation
を取得します。※observation
とinfo
の値が返ってきます。 - 環境でアクションを実行する
observation, reward, terminated, truncated, info = env.step(action)
step(action)
メソッドを使って、環境内でアクションを実行します。
・action
: エージェントが実行する操作(例:左に移動、右に移動など)。
・observation
:環境の状態を示す。
・reward
: このアクションによって得られる報酬。
・terminated
: エピソードが終了した(成功または失敗)場合にTrue
。
・truncated
:制約(タイムリミットなど)でエピソードが中断された場合にTrue
。
・info
: 環境に関する追加情報。 - 環境を閉じる
close()
作業が終了したら、close()
メソッドを使用して環境を閉じます。
5. おわりに
今回はGymnasiumの環境構築方法や簡単な使い方など記載しました。Cart-Poleを例に出しましたが、PendulumやAtari、Car-racingなどの環境も実行できます。詳しくは公式ドキュメントを参考にしてください。
これで強化学習のアルゴリズムのテストを実行できるようになりましたので、様々なアルゴリズムを試してみたいと思います。