【Open AI gym、強化学習】MoutainCar(連続値)の紹介

前回の記事でMoutainCar問題を紹介しました。
https://www.tcom242242.net/entry/2019/04/30/194755

今回はMoutainCarの制御値が連続値のバージョンを紹介します。

問題の概要

MoutainCarは、 台車を山の上にあるゴール地点にたどり着けるように
適切にコントロールする問題になります。

f:id:ttt242242:20190430153950p:plain

出典:Leaderboard · openai/gym Wiki · GitHub

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

制御値(行動)

前回と異なるのは主に制御値になります。
前回は、台を左に押す(0)か何もしない(1)、右に押す(2)の三択でしたが、

今回は連続値になります。
負の値であれば、台車を左方向に押し、
正の値であれば、右方向に押します。

観測情報 最小値 最大値
台を押す量 -1.0 1.0

以下のコードで確認できます。

print(env.action_space.high)  # 最大値
# => [1.]
print(env.action_space.low) # 最小値
# => [-1.]

観測

観測値は、台車の位置と速度の2つになります。

観測情報 最小値 最大値
台車の位置 -1.2 0.6
台車の速度 -0.07 0.07

報酬

ゴールに着いたら100、
それ以外の場合、制御値の大きさに応じて負の値が与えるようです。
つまり、大きく動かせば動かすほど報酬が大きくなります。
(コードを参照)

エピソードの終了判定

最低限、以下の2つの終了判定が存在します。

  • 台車がゴールにたどり着いた
  • 999回制御を行った

ただ、実は終了判定がまだ完璧に理解できていません。
私の今後の課題です。

ちょっと動かしてみる

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

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

pip install gym

サンプルコード

ひたすらランダムで行動選択を行ってみます。
以下、サンプルコードになります。

import gym 
env = gym.make("MountainCarContinuous-v0")  # 環境の読み込み
env.reset()

is_finish = False

nb_step = 0
while(1):
    env.render()
    random_action = env.action_space.sample()   # ランダムで行動を選択。0, 1, 2のどれか
    obs, reward, is_finish, _ = env.step(action=random_action) # ひたすら台車を左方向に押す
    print("nb_step:{}, action:{}, obs:{}, reward:{}, is_finish:{}".format(nb_step, random_action, obs, reward, is_finish))
    nb_step += 1
    if is_finish == True:   # 終了したら、whileを抜ける
        break

実行結果

終了するまで実行します。

<省略>
nb_step:995, action:[-0.80464727], obs:[-0.50252417 -0.0090894 ], reward:-0.06474572212402348, is_finish:False
nb_step:996, action:[0.0298444], obs:[-0.51172676 -0.00920259], reward:-8.906884425667795e-05, is_finish:False
nb_step:997, action:[0.87682404], obs:[-0.51970314 -0.00797638], reward:-0.0768820403064634, is_finish:False
nb_step:998, action:[-0.5427069], obs:[-0.5285228  -0.00881965], reward:-0.02945307771738048, is_finish:True

参考文献

https://github.com/openai/gym/blob/master/gym/envs/classic_control/continuous_mountain_car.py

コメント

タイトルとURLをコピーしました