問題の概要
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
コメント