機械学習(特に強化学習)が好きな人のノート

機械学習関連のことをまとめていきます。強化学習関連が多いかもしれません

【Open AI gym、強化学習】CartPoleの紹介

問題の概要

CartPoleは、 棒が設置してある台車があり、
台車を棒が倒れないように
うまくコントロールする問題になります。

f:id:ttt242242:20190428190208p:plain

出典:Leaderboard · openai/gym Wiki · GitHub

制御値、観測、報酬等について

制御値(行動)

制御値は、台を左に押す(0)か 右に押す(1)の二択になります。

操作
0 左に押す
1 右に押す

観測

観測値は、台車の位置、台車の速度、棒の角度、棒の先端の速度の4つになります。

観測情報 最小値 最大値
台車の位置 -2.4 2.4
台車の速度 -inf inf
棒の角度 -41.8° 41.8°
棒の先端の速度 -inf inf

報酬

報酬としては1を与え続けます。

エピソードの終了判定

以下のどれかの条件を満たした場合に、
エピソードが終了したと判定されます。

  • ポールのアングルが±12°以内
  • 台車の位置が±2.4以内
  • エピソードの長さが200以上

ちょっと動かしてみる

実際に動かしてみます。
stepメソッドを使って1ステップづつ台車を操作していきます。
stepメソッドの戻り値は操作した結果 (観測情報, 報酬, エピソードの終了判定) が返却されます。

サンプルコードを実行するために
gymをインストールする必要があります。

pip install gym

サンプルコード

import gym 
env = gym.make("CartPole-v0")
env.reset()

is_finish = False

while(1):
    obs, reward, is_finish, _ = env.step(action=0) # 台車をひたすら左方向に押す
    print("obs:{}, reward:{}, is_finish:{}".format(obs, reward, is_finish))
    if is_finish == True:   # 終了したらwhileを抜ける
        break

実行結果

棒が倒れるまで実行します。

[2019-04-28 15:24:34,184] Making new env: CartPole-v0
obs:[-0.02943776 -0.20708198 -0.03967363  0.28092593], reward:1.0, is_finish:False
obs:[-0.0335794  -0.40161621 -0.03405511  0.56083667], reward:1.0, is_finish:False
obs:[-0.04161172 -0.59624408 -0.02283838  0.84259893], reward:1.0, is_finish:False
obs:[-0.0535366  -0.79104699 -0.0059864   1.1280132 ], reward:1.0, is_finish:False
obs:[-0.06935754 -0.98609001  0.01657386  1.41881249], reward:1.0, is_finish:False
obs:[-0.08907934 -1.18141314  0.04495011  1.71662944], reward:1.0, is_finish:False
obs:[-0.1127076  -1.37702078  0.0792827   2.02295542], reward:1.0, is_finish:False
obs:[-0.14024802 -1.57286891  0.11974181  2.33908951], reward:1.0, is_finish:False
obs:[-0.1717054  -1.7688495   0.1665236   2.66607544], reward:1.0, is_finish:False
obs:[-0.20708239 -1.96477242  0.21984511  3.00462649], reward:1.0, is_finish:True

参考文献

gym.openai.com

github.com