修士2年の横山です。
我々の研究室では強化学習を用いたロボットの自律走行に関する研究が結構行われております。強化学習とは、ある行動に対してその行動がどのくらいよかったのかを報酬として与え、その報酬が多くもらえるように行動を学習していくというものです。
そんな強化学習ですが、かなりの試行回数・時間をかけて学習を行う必要があるので、シミュレータ環境が必須といえます。我々の研究室では偉大なる大先輩が開発したFabot2dというシミュレータを活用しています。一般的に強化学習を試したり勉強する時はOpenAI Gymというシミュレータ環境を使うことが多いと思います。 また、強化学習のフレームワークとしてkeras-rlやstable-baselinesなどがあります。これらのフレームワークはOpenAI Gym形式のシミュレータ環境であれば自作のシミュレータ環境でも動かすことができ、効率的に様々なアルゴリズムを試すことができます。
そこで今回は我々の活用しているFabot2dをOpenAI Gym形式に少しだけ直してみました。その時に培ったOpenAI Gym形式のシミュレータ環境作成についてのメモを書いておきます。
OpenAI Gym形式のシミュレータ環境では以下の3つのメソッドを加えたクラスの作成が必要となってきます。
そして以下の2つの変数の用意も必要となります。
以上の3つのメソッドと2つの変数を用いれば、無事にOpenAI Gym形式のシミュレータ完成です。以下にメモ程度のサンプルコードを書いておきます。
import gym
class Simulator(gym.Env):
def __init__(self):
# アクションの数の設定
# (ex)ACTION_NUM=3
self.action_space = gym.spaces.Discrete(ACTION_NUM)
# 状態空間の設定
# (ex)状態が3つの時で、それぞれの状態が正規化されている場合、LOW=[0,0,0]、HIGH=[1,1,1]
self.observation_space = gym.spaces.Box(low=LOW, high=HIGH)
def reset(self):
# シミュレータの初期化処理
return observation
def step(self):
# ステップを進める処理
return observation, reward, done, {} #infoの部分は使わなかったので{}を返却
def render(self):
# シミュレータ環境の描画処理
今回はOpenAI Gym形式のシミュレータ環境作成について書きました。とてもざっくりしているので詳細はgithubや以下の参考文献からご確認ください。それでは。ブッコロな