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

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

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

問題の概要

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

f:id:ttt242242:20190430153950p:plain

出典:Leaderboard · openai/gym Wiki · GitHub

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

制御値(行動)

制御値は、台を左に押す(0)か 何もしない(1)、右に押す(2)の三択になります。

操作
0 左に押す
1 何もしない
2 右に押す

観測

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

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

報酬

ゴールに着いたら0.5、
それ以外の場合にはステップ毎に-1を与えます。

エピソードの終了判定

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

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

ちょっと動かしてみる

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

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

pip install gym

サンプルコード

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

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

is_finish = False

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

実行結果

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

[2019-04-30 14:14:34,916] Making new env: MountainCar-v0
obs:[-0.41771423 -0.00179361], reward:-1.0, is_finish:False
obs:[-0.42028869 -0.00257446], reward:-1.0, is_finish:False
obs:[-0.62147044  0.02563172], reward:-1.0, is_finish:False
<省略>
obs:[-0.59511518  0.02635526], reward:-1.0, is_finish:False
obs:[-0.56822766  0.02688753], reward:-1.0, is_finish:False
obs:[-0.54000641  0.02822124], reward:-1.0, is_finish:False
obs:[-0.51266216  0.02734425], reward:-1.0, is_finish:False
obs:[-0.48639992  0.02626224], reward:-1.0, is_finish:False
obs:[-0.46041609  0.02598383], reward:-1.0, is_finish:True

参考文献

github.com