AI研究所 - AI(人工知能)に脅かされないために、AI(人工知能)を作る側の人間になる -

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

公開日:2019.09.09 [最終更新日]2019.10.02

強化学習用シミュレーションライブラリ「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 wget
Ubuntu 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-tools
Ubuntu 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 ffmpeg
Ubuntu 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.8 4.8
1 カートの速度 -Inf Inf
2 ポールの角度 -24° 24°
3 ポールの速度 -Inf Inf

行動

番号 行動
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.0
observation = [ 0.03283218 0.34874546
-
0.05072922
-
0.5930245 ]
reward = 1.0
observation = [ 0.03980709 0.54453946
-
0.06258971
-
0.90124568]
reward = 1.0
observation = [ 0.05069788 0.74045105
-
0.08061463
-
1.212927 ]
reward = 1.0
・
・
・

まとめ

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

タグ:


参考になったら「いいね!」と「シェア」をお願いします!!

このエントリーをはてなブックマークに追加
AI(人工知能)セミナー開催中
AI(人工知能)入門セミナー AI(人工知能)入門セミナー

AI入門ブログの中の人

AI研究所 研究スタッフ

【マサミ】

アメリカ・サンフランシスコにある情報メディアの専門学校を卒業。大手金融会社での事務経験を経て、2016年9月よりAI研究所に入所。見習い研究員として、AI技術を日々勉強中。


【三谷】

AIセミナー責任者、講師。AIについての幅広い知識を持ち、人に分かりやすく伝える技術を持つ。特にAIを事業や仕事に取り入れる方法について日々講義しています。

AI研究所Twitter

Facebookページ