Gymnasium のプログラムを試してみる
【概要】
Gymnasium の公式ドキュメントに記載の手順をなぞる. OpenAI Gym は開発が終了しており,現在は後継の Gymnasium(Farama Foundation が開発)が保守されている.
【目次】
【関連する外部ページ】
https://github.com/Farama-Foundation/Gymnasium のサンプルプログラムを参考にしている.
前準備
Gymnasium のインストールは,別ページ »で説明。
Gymnasium を使ってみる
ランダム動作のプログラム
まず、ランダムな動作を試す。前準備がうまくいったかの確認も兼ねる。
Python プログラムを動かす。
import gymnasium as gym
env = gym.make('CartPole-v1', render_mode="human") # 環境(environment)を作る
for i_episode in range(20):
observation, info = env.reset()
for t in range(100):
action = env.action_space.sample() # ランダムな行動.ここを自分のアルゴリズムに置き換える
observation, reward, terminated, truncated, info = env.step(action) # 報酬と次の状態を得る
if terminated or truncated:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
次のような画面が出る。
Environment の確認
Python プログラムを動かす。
import gymnasium as gym
env = gym.make('CartPole-v1', render_mode="human")
for i_episode in range(20):
observation, info = env.reset()
for t in range(100):
print(observation)
action = env.action_space.sample() # ランダムな行動.ここを自分のアルゴリズムに置き換える
observation, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
結果を確認する。
ここに出ているのは、各繰り返し (timestep) での Environment の値(変数名は observation)である。 繰り返しが進むと、Environment の値が変化していることがわかる。
空間 (space)
Python プログラムを動かす。
import gymnasium as gym
env = gym.make('CartPole-v1')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)
結果を確認する。
- env.action_space: Agent がとりえるアクション.「2」と表示されるのは「アクションは,2個の正または0の数である」という意味
このプログラムでは
- 1つめ: 左への力
- 2つめ: 右への力
- env.observation_space: 環境から観測される値.「4」と表示されるのは「環境から観測される値は,4個の数である」という意味
動画を記録するプログラム
【関連する外部ページ】https://gymnasium.farama.org/introduction/record_agent/ のプログラムを参考にしている。
- FFmpeg のインストール
- Python プログラムの実行
【その他情報】
Python プログラムの実行
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である。
Python のまとめ: 別ページ »にまとめ
pythonimport os import gymnasium as gym from gymnasium.wrappers import RecordVideo, RecordEpisodeStatistics class RandomAgent(object): """最も単純なエージェント""" def __init__(self, action_space): self.action_space = action_space def act(self, observation, reward, terminated, truncated): return self.action_space.sample() if __name__ == '__main__': env_id = 'CartPole-v1' outdir = 'random-agent-results' env = gym.make(env_id, render_mode="rgb_array") env = RecordVideo(env, video_folder=outdir, episode_trigger=lambda x: True) env = RecordEpisodeStatistics(env) env.action_space.seed(0) agent = RandomAgent(env.action_space) episode_count = 100 reward = 0 terminated = False truncated = False for i in range(episode_count): ob, info = env.reset() while True: action = agent.act(ob, reward, terminated, truncated) ob, reward, terminated, truncated, info = env.step(action) if terminated or truncated: break # 環境を閉じ、記録結果をディスクに書き込む env.close()結果を確認する。
これは、動画とログを記録したというメッセージである。記録先ディレクトリ名を確認する。
記録先ディレクトリを開いてみる。
Gymnasium の公式チュートリアルで強化学習のサンプルプログラムを動かしてみる
Gymnasium 公式ドキュメントの Training an Agent に、Blackjack環境を題材にした強化学習(Q学習)のサンプルプログラムが掲載されている。 このページの手順に沿って、エージェントの学習を実際に試すことができる。
- 上記ページに掲載されている Python プログラムをコピーする
【その他情報】
Python プログラムの実行
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である。
Python のまとめ: 別ページ »にまとめ
- Python プログラムの実行
pythonこれは、状態や行動の組ごとに期待報酬を記録する表(Qテーブル)を作りながら学習を進める、強化学習の基本的なプログラムである。 学習の進み具合は、報酬の推移などのグラフで確認できる。