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

出典: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.|観測情報|最小値|最大値| |---|---|---| |台車の位置 | -2.4 | 2.4 | |台車の速度 | -inf | inf | |棒の角度 | -41.8° |41.8° | |棒の先端の速度 | -inf | inf |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
参考文献
https://github.com/openai/gym/wiki/CartPole-v0
  
  
  
  
コメント