OpenAI Gymの仕様を掴む⑤(Box2D_CarRacing)|実装で理解する深層強化学習の研究トレンド #5

f:id:lib-arts:20190518142431p:plain

連載の経緯については#1に記しました。

これまでは問題設定を理解するにあたってOpenAI Gymから#2ではCartPole、#3と#4ではAtariのゲームについて取り扱いました。

#5ではBox2dからCarRacingを取り扱います。
以下、目次になります。

1. 進め方の再確認&Box2D・CarRacingについて
2. CarRacingゲームの実行と仕様の確認
3. まとめ

 

1. 進め方の再確認&Box2D・CarRacingについて
方針としては基本的な流れとして、(ⅰ)Observation SpaceとAction Spaceの把握、(ⅱ)サンプルコードの実行、(ⅲ)報酬とスコアの管理について把握、(ⅳ)コマンド実行の確認、という4つのSTEPを実行する形で行っていきます。
#4の際の方針と比較して(ⅲ)と(ⅳ)を入れ替えました。

またBox2DとCarRacingの概要について以下まとめていきます。

Box2D(Box2D)とは、質量・速度・摩擦といった、古典力学的な法則をシミュレーションするゲーム用の2D物理演算エンジンである。

Box2D - Wikipedia

まずBox2Dに関してですが、Wikipediaの記載から引っ張ってきました。ゲーム用に作られた古典力学的な法則をシミュレーションを行うためのライブラリと考えておくと良さそうです。したがってこちらをベースにして物理法則に基づく実装が行われていると考えておくと良さそうです。
CarRacingについては、Box2Dをベースにレースゲームが実装されていると考えると良さそうです。

上記で大体の大枠はつかめたので、2節ではCarRacingゲームの実行と仕様の確認を行っていきます。


2. CarRacingゲームの実行と仕様の確認
(ⅰ)Observation SpaceとAction Spaceの把握
これまでと同様に下記の一覧を元に把握を行います。

Table of environments · openai/gym Wiki · GitHu

f:id:lib-arts:20190518145131p:plain

上記のように、Observation SpaceがBox(96, 96, 3)、SpaceとAction SpaceがBox(3,)となっています。Observation Spaceについてはカラー画像を表しています。Action Spaceについては3つの値を持っているので、レースゲームであるということを考慮すると左右とアクセルではないかと推測できます。

(ⅱ)サンプルコードの実行
次にサンプルコードの実行に関してですが、下記を動かすことでアニメーションでゲーム画面を確認できます。

import gym
env = gym.make('CarRacing-v0')
observation = env.reset()
for t in range(1000):
    env.render()
    observation, reward, done, info = env.step(env.action_space.sample())
env.close()

上記を実行することで1000ステップのゲームの実行を行います。画像を出力したい際は下記のコードを実行することで出力することができます。

import matplotlib.pyplot as plt
plt.imshow(observation)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190518145452p:plain
サンプルコードの実行を通してゲームのイメージがつかめたので、次にコマンドを確認していきます。

(ⅲ)報酬とスコアの管理について把握

import gym
import matplotlib.pyplot as plt

env = gym.make('CarRacing-v0')
observation = env.reset()
for t in range(1000):
    #env.render()
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)
    print("STEP_"+str(t)+" Reward:"+str(reward))
env.close()

報酬に関しては上記のコードを実行して確認します。実行結果は下記のようになります。

f:id:lib-arts:20190518151306p:plain
基本的には-0.1ほどで、なんらかの良いこと(前進に関する何か)があった際に3.0152の報酬が発生していることが確認できます。

(ⅳ)コマンド実行の確認
(ⅲ)までの話で大体はつかめたものの、いまいち中身がわからないので、ライブラリ実装の方を確認していきます。

gym/car_racing.py at master · openai/gym · GitHub
上記のライブラリ実装においてenv.stepを確認することで、Action Spaceを確認することができます。

f:id:lib-arts:20190518151528p:plain
上記を確認するとAction Spaceを表す3つの値がsteer、gas、breakだとわかります(左右についてはsteerという一つの変数で表されており、その分breakが導入されているというところが当初の予想と異なりました)。


3. まとめ
(ⅰ)〜(ⅳ)のステップを踏むことで大体の概要をつかむことができました。
#1〜#5ではOpenAI Gymの仕様を見てきましたが、ここまでの内容で仕様を読み解く際のイメージは概ね掴めたかと思うので、#6以降では実際に簡易アルゴリズムの実験や深層強化学習アルゴリズムを用いた学習などを行なっていければと思います。