強化学習用ライブラリOpenAI Gymの使い方!例題を画像付きで徹底解説

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

OpenAI Gymとは?

OpenAI Gymとは?

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

「OpenAI Gym」の機能

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

OpenAI Gymのインストール方法

OpenAI Gymは、プログラミング言語Pythonの環境下で動作させることができます。
そのためPythonのインストールと、それに付随するPycharmなどの統合開発環境のインストールが必要になってきます。

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

まずPycharmをインストールして、Pycharmを起動します。
そして[File] – [Settings]で設定画面を開きます。

OpenAI Gymのインストール方法

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

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

  • Chainer
  • ChainerRL

OpenAI Gymのインストール方法2

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

OpenAI Gymのインストール方法3

さらに[OK]を押せばダイアログを閉じるのが完全に完了します。

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

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

pip install gym

まずは、この最低限の機能で色々なことを試すのをおすすめします。
その後、より複雑なことを試したいと思ったら以下の手順ですべての機能をインストールすることができます
すべての環境をインストールするには、いくつかのシステムパッケージをインストールする必要があります。
OpenAI Gymのスペックについては下記になります。

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のイメージ

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

Acrobot

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

Mountain Car

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

Breakout

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

Ant

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

OpenAI Gymで強化学習を行なっている活用事例

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

まずはOpenAI gymの公式サイトより、CartPole問題の詳細を確認します。

CartPole問題の詳細

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

CartPole問題の詳細

強化学習の状態設定

状態の設定はこのようになっています。

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

 

強化学習の行動設定

行動設定は下記のようになっています。

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

 

強化学習の報酬設定

この問題では「ポールが倒れなければ、1タイムステップごとに1の報酬が得られる」と言う行動を報酬として設定しています。

エピソードの終了条件

今回はこの3つの終了条件が設定されています。

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

こちらのどれかを達成するとエピソードが終了となります。

CartPole問題を自分で実装する手順

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

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

最初に[File]-[New]で新しくファイルを作成

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

ダイアログボックスから「Python File」を選ぶ

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

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

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

import gym

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

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

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

#実行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」を選択し、先ほど書いたソースコードを実行します。

「cartpole_practice.py」を選択し、先ほど書いたソースコードを実行

そうすると以下のようなアニメーションが表示され、指定した行動を起こしてくれます。

AIが行動するイメージ

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

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

これで実際にAIを強化学習で行動させることに成功しました。

強化学習の初心者におすすめのセミナー

自分でAIのことを学ぼうにも「AIの作り方が全く分からない!」「AIの仕組みやプログラミングの基礎も知らないからどこから手をつけたらいいかわからない!」なんて時もあると思います。
独学があまり好きじゃない、上手くいかないと言う人は手っ取り早くAIの講座を受けてしまうのもおすすめです!
AIは一見初心者向けの講座なんてなさそうですが、全くAIが分からない人でも受けれる講座があるんです!
私のイチオシのAI講座は

こちらの3つが主におすすめのAI講座になっています!

まず、先述でご紹介したように、AIエンジニア向けセミナーは、AIプログラミングを3ヶ月で習得できる、AIエンジニア育成セミナーです。
いつでもどこでも学習できるパソコン、スマホ、タブレット対応のEラーニング学習となっており、学習期間の目安は3ヶ月、全12回の講座を動画で視聴しながら自分のペースでしっかり学習できます。
プログラミング手法、基礎AIの実装から応用AIの実装までを学び、ライブラリの使い方も学べるのでAIモデルが使えるようになります。
最終的には、高度なデータ処理をも学ぶことでAIプログラミングマスターを目指すカリキュラムです。

次の強化学習プログラミングセミナーは、強化学習に特化してAIプログラミングを学ぶことができるセミナーです。
AIを自動化したり制御させる手法を学びたい方はこの強化学習プログラミングセミナーを受けてみてください。

またJDLA認定のE資格対策講座を受けたい場合、AI研究所が開催しているE資格対策短期集中講座は、最短でE資格の合格を目指すセミナーです。
E資格試験の受験資格を得るためには、日本ディープラーニング協会(JDLA)が認定したプログラムの受講修了が必須となります。
日本ディープラーニング協会にて規定されている出題範囲をすべてカバーしているセミナーなので、常に最新のE資格に完全対応しており、試験対策を中心に、E資格に合格するためのポイントを絞って学習できます。
本講座を修了することで、E資格の受験資格を短期間で確実に取得することができます。

どのセミナーも初心者向けで、AIが全く分からなくても受けられる講座なので安心です。
しかも最後には資格が取れるほどの経験までさせてくれるので、初心者から成りあがるにはセミナーが一番手っ取り早いです。
この機会にAIのセミナーを受講してみてはいかがでしょうか。

OpenAI Gymについてまとめ

今回はOpenAI Gymでの強化学習方法について解説しましたがいかがだったでしょうか。
OpenAIはインストールするだけで様々なシミュレーション環境を用意でき、楽しく強化学習を学ぶことができることが分かっていただけたかと思います。
是非さまざまな環境でも試してみてください。

最新情報をチェックしよう!