問題の概要
MoutainCarは、 台車を山の上にあるゴール地点にたどり着けるように
適切にコントロールする問題になります。
出典: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
参考文献
https://github.com/openai/gym/wiki/MountainCar-v0
コメント