強化学習用シミュレーションライブラリ「OpenAI Gym」の使い方

こんにちは三谷です。
今回は、強化学習用シミュレーションライブラリ「OpenAI Gym」の使い方について徹底解説します!

OpenAI Gymとは?


OpenAI Gymとは、イーロン・マスクらが率いる、人工知能(AI)を研究する非営利団体「OpenAI」が提供するプラットフォームです。CartPole問題やブロック崩しなど、いくつかの環境(ゲーム)が用意されており、強化学習を学ぶことができます。シミュレーション環境と強化学習アルゴリズム間のインタフェースを確立されているため、初心者でも強化学習を学びやすくなっています。

「OpenAI Gym」の機能

OpenGLを利用した描画ができ、一部3Dでの描画も可能です。
物理演算エンジンは含まれていないため複雑な物理シミュレーションをする場合には、自分で物理計算のコードを書く必要があります。
より高度なシミュレーションを行うには、ゲームエンジンであるUnityや、物理演算エンジンのOpen Dynamics Engineを使用することもあります。

OpenAI Gymのインストール方法

OpenAI Gymは、無料のプログラミング言語Pythonの環境下で動作させることができます。そのためPythonのインストールと、それに付随するPycharmなどの統合開発環境のインストールが必要になってきます。PythonやPycharmのインストール方法はこちら(Pythonを使って強化学習をする方法を徹底解説.docx)を御覧ください。

OpenAI Gymは、単独でインストールすることもできますが、強化学習ライブラリChainerRLにも一部が含まれています。強化学習をPythonで行なうためにはChainerRLのような強化学習ライブラリを使用することが前提となることが多いため、以下の手順でライブラリをインストールすることで実行できます。
※後ほど説明するOpenAI gymの実行環境としては、公式にはPython 2.7または3.5のLinuxとOSXとなっています。Windowsでも今回ご紹介する範囲は対応可能ですので、Pythonのバージョンは3.5に設定してインストールをしてみてください。

※以下の手順はPycharmを使用したものです。
[File] – [Settings]で設定画面を開きます。

「Project :xxx
– 「Project Interpreter」で、「+」マークを選択します。

検索ウィンドウで以下のライブラリを検索し、表示されたライブラリを選択しを選択します。
Chainer
ChainerRL

「Package ‘numpy’ installed successfully」が表示されたらインストールが完了です。
右上の「×」ボタンでダイアログを閉じます。

[OK]でダイアログを閉じます。

また、上記手順でうまく動作しない場合などのため、公式(https://github.com/openai/gym#installation)で紹介されているインストール手順も確認しておきましょう。フル機能を使用するためには、OSXやUbuntuの環境が必要です。

Gym機能の最低限をインストールするには、以下のコードを実行します。
pip install gym

まずは、この最低限の機能で試すことをおすすめします。その後、より複雑なことを試す場合に、以下の手順ですべての機能をインストールすることができます。
すべての環境をインストールするには、いくつかのシステムパッケージをインストールする必要があります。
OSX:

brew install cmake boost boost-python sdl2 swig wgetUbuntu 14.04 (non-mujoco only):apt-get install libjpeg-dev cmake swig python-pyglet python3-opengl libboost-all-dev \  libsdl2-2.0.0 libsdl2-dev libglu1-mesa libglu1-mesa-dev libgles2-mesa-dev \  freeglut3 xvfb libav-toolsUbuntu 16.04:apt-get install -y python-pyglet python3-opengl zlib1g-dev libjpeg-dev patchelf \  cmake swig libboost-all-dev libsdl2-dev libosmesa6-dev xvfb ffmpegUbuntu 18.04:apt install -y python3-dev zlib1g-dev libjpeg-dev cmake swig python-pyglet python3-opengl libboost-all-dev libsdl2-dev \ libosmesa6-dev patchelf ffmpeg xvfb

OpenAI Gymのシミュレーション環境まとめ

OpenAI Gymでは、様々な環境が用意されています。この中でも一般的なものをいくつかご紹介しましょう。それぞれの環境の詳細説明は、リンクにあるgihubのコードなどに含まれていますので、是非覗いてみてください。
CartPole(https://gym.openai.com/envs/CartPole-v1/)

左右に動くカートの上に乗った棒を落とさないように、バランスを取るシミュレーション環境です。カートを左右にうまく動かすことで、棒を倒さないようにすると報酬が得られます。

Acrobot(https://gym.openai.com/envs/Acrobot-v1/)

2つのリンク機構により動作する単純なロボットアームです。真ん中のリンク部分が左右の回転することにより、振り子の原理でアームを上のバーまで振り上げることができたら報酬が得られます。

Mountain Car(https://gym.openai.com/envs/MountainCar-v0/)

2つの山の間にいる車が、前後に勢いをつけ、坂を登ろうとします。車が右の山の頂上にあるゴールまで到達できたら報酬が得られます。

Breakout(https://gym.openai.com/envs/Breakout-v0/)

ブロック崩しのゲームです。下のバーが左右に動き、上にある得点が上がることが報酬となります。状態の定義には画像を使って強化学習を行なう問題として扱われます。

Ant(https://gym.openai.com/envs/Ant-v2/)

4つの足を持ったアリの3Dモデルが、いかに早く前に進むことができるかをシミュレーションできる環境です。3D環境はMuJoCoと呼ばれる物理演算エンジンを使用しているため、フルインストールが必要なのと、有償での提供となります。

OpenAI Gymの代表的なシミュレーション~CartPole問題

それでは実際にOpenAI Gymを使って、強化学習のプログラムを試してみましょう。今回使用するのは、CartPole問題という、強化学習を行う上で一番始めによく試される問題です。

OpenAI gymのサイト(https://gym.openai.com/envs/CartPole-v1/)より、CartPole問題の詳細を確認します。

摩擦のないトラックに沿って動くカートにポールが取り付けられており、カートは横向きに+1または-1の力が加えられるようになっていて制御できます。振り子が倒れないように左右の力を与え、維持できるようにすることが目的です。ポールが直立したままで維持できたタイムステップごとに+1の報酬が与えられます。エピソードは、ポールが垂直から15度を超えるときに終了するか、またはカートが中心から2.4ユニット以上移動すると終了します。

状態

番号状態最小値最大値
0カートの位置-4.84.8
1カートの速度-InfInf
2ポールの角度-24°24°
3ポールの速度-InfInf

行動

番号行動
0左にカートを押す
1右にカートを押す

報酬

ポールが倒れなければ、1タイムステップごとに1の報酬が得られる

エピソードの終了条件

ポール角が±12°以上になること
カートの位置が±2.4を超える(カートの中央がディスプレイの端に達する)
エピソードの長さが200以上になった場合

CartPole問題を実装してみよう

ここでは、CartPole問題を実際にPythonのプログラムを書くことで実装してみます。まずは学習は全くせず、常にカートを右に移動(行動)させるというプログラムを書いてみます。

[File]-[New]で新しくファイルを作成します。

ダイアログボックスから「Python File」を選びます。

「Name」に「cartpole_practice.py」と入力し[OK]をクリックします。

ライブラリをインポートします。

import gym

CartPoleのインスタンスを作成し、状態を初期化します。

#CarPoleの読み取りセットenv = gym.make("CarPole-v0")observation = env.reset()

行動を起こし、行動が行われた後の状態を確認します。今回は、ずっと右に動かし続ける動作をさせてみます。

#実行for i in range(50):action = 1 #右に押すobservation, reward, done, info = env.step(action) #情報を取得print("observation = " + str(observation))print("reward = " + str(reward))

ビジュアライズします。

env.render() #ビジュアライズ

ビジュアライズを終了します。

#終了env.close()

[Run]-[Run]で「cartpole_practice.py」を選択し先ほど書いたソースコードを実行します。

以下のようなアニメーションが表示されます。

以下のような結果が表示されます。

observation = [ 0.02977195 0.15301161-0.04499931-0.2864956 ]reward =1.0observation = [ 0.03283218 0.34874546-0.05072922-0.5930245 ]reward = 1.0observation = [ 0.03980709 0.54453946-0.06258971-0.90124568]reward = 1.0observation = [ 0.05069788 0.74045105-0.08061463-1.212927 ]reward = 1.0・・・

まとめ

いかがだったでしょうか。OpenAIはインストールするだけで様々なシミュレーション環境を用意でき、楽しく強化学習を学ぶことができることがおわかりいただけたでしょうか。
是非他の環境も試してみてください!

最新情報をチェックしよう!
企業向けAI人材育成サービス

企業向けAI人材育成サービス

AI事業発足やAI導入に必要な人材育成のステップとAI研究所が提供するサービス。AI研究所の人材育成サービスでは、3つのステップを軸に御社の業務内でAIを活用できる人材育成やAIプロジェクトの支援を行います。

CTR IMG