Gymnasiumとは、強化学習の「練習環境」をPythonの共通インターフェースで扱えるオープンソースライブラリです。pip installだけで、ロボットを歩かせる前の基礎——「状態を見る→行動する→報酬をもらう」の1ループを、今すぐ手元のPCで体験できます。
この記事で分かること
- GymnasiumはFarama Foundationが開発する、強化学習環境を共通インターフェースで扱えるPythonライブラリ
- env.reset()とenv.step(action)の2つの関数だけで、強化学習の基本ループが完成する
- 定番の練習問題CartPole-v1で、ランダムな行動と自分で書いた方策の差を数字で確認できる
- ここで体験した「状態・行動・報酬」の考え方は、Isaac Labなど本格的なロボット強化学習にそのままつながる
対象読者:フィジカルAIの学習ロードマップでシミュレータの次に強化学習へ進みたい学生・初学者
執筆:ゆるふわフィジカルAI編集部 最終更新日:2026年10月12日
Gymnasiumでできること
強化学習の1ループ
env.reset()
環境を初期状態に戻す
状態を見る
observation(観測)
env.step(action)
行動して1ステップ進める
報酬・終了判定
reward / terminated
強化学習でロボットを歩かせる記事で説明した「状態を見る→行動する→報酬をもらう」のループは、どの強化学習でも共通の構造です。Gymnasiumは、この構造をどの環境でも同じ書き方で呼び出せるようにしたライブラリで、もともとOpenAIが公開していたGymを、Farama Foundationという非営利団体が引き継いで開発を続けているものです。
インストール
CartPoleなど基本的な環境だけなら、追加の依存関係は少なめです。
pip install "gymnasium[classic-control]"① まずはランダムに動かしてみる
CartPoleは、台車の上に立てた棒が倒れないように台車を左右に動かす、強化学習の定番の練習問題です。何も考えずにランダムな行動を続けると、どれくらいで倒れてしまうか見てみましょう。
import gymnasium as gym
env = gym.make("CartPole-v1")
total_steps = 0
n_episodes = 100
for ep in range(n_episodes):
obs, info = env.reset(seed=ep)
steps = 0
terminated = truncated = False
while not (terminated or truncated):
action = env.action_space.sample() # ランダムな行動(0=左、1=右)
obs, reward, terminated, truncated, info = env.step(action)
steps += 1
total_steps += steps
env.close()
print("ランダム行動の平均ステップ数:", total_steps / n_episodes)実際にこのコードを100エピソード実行すると、平均で約24ステップほどで棒が倒れて終了します(最大は500ステップ)。ランダムに台車を動かすだけでは、すぐに倒れてしまうわけです。
terminatedとtruncatedの違い
CartPole-v1では、台車の位置が中心から±2.4を超えるか、棒の傾きが±12°を超えるとterminated=True(失敗して終了)になります。一方、500ステップ生き残るとtruncated=True(時間切れで終了)になります。意味が違う2つのフラグを分けて返すのが、Gymnasiumの現在のAPIの特徴です。
② 観測と行動の中身を知る
obsには何が入っているのでしょうか。env.observation_spaceとenv.action_spaceを見ると分かります。
import gymnasium as gym
env = gym.make("CartPole-v1")
print("observation_space:", env.observation_space)
print("action_space:", env.action_space)
obs, info = env.reset(seed=0)
print("最初のobs:", obs)action_spaceはDiscrete(2)——つまり行動は「0: 左に押す」「1: 右に押す」の2択だけです。obsは4つの数値(台車の位置・速度、棒の角度・角速度)の配列で、このうち棒の角度と角速度が、棒を立て続けるための一番重要な情報になります。
③ 自分で考えた方策を書いてみる
強化学習の本領は「報酬を最大化する行動を自動で学習する」ことですが、その前に人間が頭で考えた方策を試してみると、何を学習させたいのかがはっきりします。「棒が右に傾きかけたら台車を右に押す」という単純なルールをコードにしてみましょう。
import gymnasium as gym
env = gym.make("CartPole-v1")
def heuristic_policy(obs):
_, _, pole_angle, pole_velocity = obs
# 棒が右に傾いている(+傾く勢いがある)なら右(1)、そうでなければ左(0)
return 1 if pole_angle + 0.1 * pole_velocity > 0 else 0
total_steps = 0
n_episodes = 100
for ep in range(n_episodes):
obs, info = env.reset(seed=ep)
steps = 0
terminated = truncated = False
while not (terminated or truncated):
action = heuristic_policy(obs)
obs, reward, terminated, truncated, info = env.step(action)
steps += 1
total_steps += steps
env.close()
print("自分で考えた方策の平均ステップ数:", total_steps / n_episodes)このコードを実行すると、100エピソードすべてで上限の500ステップに到達します。棒の傾きだけを見て押す方向を決める、たった1行のルールで、ランダム行動の約20倍も長く立たせられるわけです。
約24
ランダム行動の平均ステップ数
500
自分で考えた方策の平均ステップ数(上限)
ここが強化学習の出発点
「棒の傾きを見て反対側に押す」という発想は、人間なら数秒で思いつきます。しかし、ロボットの関節が増えたり、棒ではなく人型ロボットの全身になったりすると、人間が手でルールを書くのはすぐに限界が来ます。強化学習は、この「ルールを書く」部分を、試行錯誤から自動で見つけさせる手法です。
自分のルール vs 強化学習、何が違うのか
自分で考えた方策
- 人間がif文でルールを書く
- 単純な問題ならすぐ作れる
- 関節が増えると設計が困難に
強化学習(自動で学習)
- 報酬だけ決めれば、方策は試行錯誤で自動発見
- 最初はランダムより弱いことも多い
- 複雑な全身動作にも拡張しやすい
CartPoleのように変数が4つしかない問題なら、人間の直感でも十分な方策が書けます。しかし、ヒューマノイドロボットのように関節が数十個ある問題では、人間が手でif文を書くのは現実的ではありません。そこで使うのが、強化学習でロボットを歩かせる記事で紹介したIsaac Labのような、GPUで何千もの環境を並列実行して方策を自動で学習させる手法です。
まとめ
- Gymnasiumは、強化学習の環境を
reset()とstep()という共通インターフェースで扱えるPythonライブラリ pip install "gymnasium[classic-control]"だけで、CartPoleのような練習問題がすぐ試せる- ランダム行動では平均約24ステップで倒れるが、1行のルールを書くだけで上限の500ステップまで立たせられる
- 「報酬を決めて、方策は自動で学習させる」のが強化学習の本質で、次のステップはIsaac Labなどでの実践
よくある質問
Q. GymnasiumとOpenAI Gymは何が違うの?
A. Gymは元々OpenAIが公開していた強化学習環境ライブラリですが、OpenAIによる積極的な開発は止まりました。Gymnasiumは非営利団体Farama FoundationがGymを引き継いで開発を続けているライブラリで、環境名の末尾に付くバージョン番号(-v1など)の命名規則もGymから引き継いでいます。
Q. CartPoleで上限の500ステップに到達できたら、実際のロボットもすぐ動かせる?
A. いいえ、CartPoleはシミュレーション上の単純な練習問題で、実機のセンサー誤差やモーターの遅れは含まれていません。実際のロボットに近づけるには、シミュレーションと実機のズレを扱う技術(Sim-to-Real)や、Isaac Labのような本格的なロボット向け強化学習環境での練習が必要です。
Q. CartPole以外にどんな環境で遊べるの?
A. classic-controlという追加パッケージで入るCartPole以外にも、Box2DやAtariのゲーム環境など、追加パッケージ(extras)を指定してインストールする環境がいくつも用意されています。物理シミュレーションをより本格的に試したい場合は、MuJoCo入門の記事も参考になります。
もう少し詳しく(背景)
CartPole問題の原型は、Barto・Sutton・Andersonが1983年に発表した論文にさかのぼります1。棒を落とさないように台車を動かす、という課題そのものは40年以上前から強化学習の基本的な検証問題として使われ続けていることになります。Gymnasium自体は、OpenAIが2016年に公開したGymの設計を引き継ぎつつ、2022年頃にAPIを整理した際、環境が終了する理由を「失敗による終了(terminated)」と「時間切れによる終了(truncated)」の2種類に明確に分けるようにしました2。この区別は、学習アルゴリズムが「失敗したから終わった」のか「単に時間が来ただけ」なのかを正しく扱うために重要です。
次の一歩 🌸
シミュレータの基礎から振り返りたい人はMuJoCo入門、学習全体の順番を確認したい人はフィジカルAIの学習ロードマップへ。模倣学習との違いが気になる人はLeRobot入門も参考にしてください。
参考資料・出典
- Cart Pole - Gymnasium DocumentationCartPole-v1の観測・行動・終了条件(位置±2.4、角度±12°、500ステップで時間切れ)を定義する公式ドキュメント
- Farama-Foundation/GymnasiumGymnasiumのGitHub公式リポジトリ。OpenAI Gymを引き継いだ経緯や対応Pythonバージョンを記載
- gymnasium · PyPIPyPI上の公式パッケージページ
ゆるふわポータルでは、一次情報・公的資料にもとづき、専門用語をできるだけやさしく翻訳することを心がけています。内容に誤りや古い情報がある場合は、お問い合わせからご連絡ください。
執筆:ゆるふわフィジカルAI編集部 最終更新日:2026年10月12日
Footnotes
-
Barto, A. G., Sutton, R. S., & Anderson, C. W. (1983). "Neuronlike adaptive elements that can solve difficult learning control problems." IEEE Transactions on Systems, Man, and Cybernetics, 13, 834-846. 台車と棒のバランス制御を強化学習で解く、CartPole問題の原型となった研究。 ↩
-
terminatedとtruncatedを分けるAPIは、Gymnasiumの公式ドキュメントのCartPole環境ページで、失敗条件(位置・角度の超過)と時間切れ条件(最大ステップ数)が別の項目として定義されていることからも確認できる。 ↩
ゆるふわフィジカルAI