RosenblockChainers / Unity_RL

【進化計算と強化学習の本3】の"Unityで強化学習を始めよう 〜ML-AgentsでCartPole作成〜"で用いたコードを公開しています.
Other
0 stars 0 forks source link

Unity_RL

このリポジトリについて

技術書典4 き19 Rosenblock Chainersにて頒布を行った,【進化計算と強化学習の本3】の"Unityで強化学習を始めよう 〜ML-AgentsでCartPole作成〜"で用いたコードを公開しています. (【進化計算と強化学習の本3】は,以下のリンクにて電子版を頒布しています. https://rosenblock.booth.pm/items/828558

Unity ML-Agentsを用いて作成したCartPole環境シーン,および学習に用いるpythonコードを公開しています.

CartPoleSample

動画

以下のサムネ画像は,ML-Agentsを用いて作成したCartPole環境をエージェントが学習している様子を確認できる動画へのリンクです.

【進化計算と強化学習の本3】を持っている方向け

CartPole環境シーンを自分で作成する場合,【進化計算と強化学習の本3】に詳細な手順が示されているので,そちらを参考に進めてください.

このリポジトリ内に入っているCartPoleSampleシーンを使って実験を行いたい場合は,「【進化計算と強化学習の本3】を持っていない方向け」章を参考に進めてください.

【進化計算と強化学習の本3】を持っていない方向け

動作環境

Unity

CartPoleシーンを動かすためには,Unity 2017.1以降のバージョンが必要になります.

Unityは,公式サイトからダウンロードしてください.

Python

学習アルゴリズムは,Python3系で動作します. 主に,以下のライブラリが必要になります.

また,学習ログの推移を出来るようにするためには,以下のライブラリが必要になります.

以上のライブラリをインストールためには,以下のpythonフォルダに移動して,以下のコマンドを実行してください.

cd python
pip3 install -r requirement.txt

上記のコマンドを打ってもTensorFlowなどのインストールに失敗した場合,Unity公式によるインストール手順を参考にしてみてください.

学習実行

CartPoleSample環境でエージェントの学習を実行させる場合,以下の手順を行ってください.

CartPoleSample環境シーンのビルド

CartPoleSample環境シーンの起動

  1. Unityを起動します.
  2. Projectsダイアログで,ウィンドウの上部にあるOpenオプションを選択します.
  3. ファイルダイアログを使用して,Unity_RLフォルダ内のunity-environmentフォルダを探し,Openをクリックします.
  4. Projectウィンドウで,Assets/ML-Agents/Examples/CartPoleSample/フォルダに移動します.
  5. CartPoleSampleファイルをダブルクリックして,CartPoleSample環境シーンをロードします.

CartPoleSample Scene

BrainをExternalに設定

  1. Sceneウィンドウで,CartPoleAcademyオブジェクトの横にある三角形のアイコンをクリックします.
  2. その子オブジェクトCartPoleBrainを選択します.
  3. Inspectorウィンドウで,Brain TypeExternalに設定します.

Set Brain to External

環境をビルド

  1. プレイヤー設定(menu: Edit > Project Settings > Player)を開きます.
  2. Resolution and Presentation:
    • Run in Backgroundがチェックされていることを確認します.
    • Display Resolution DialogがDisabledに設定されていることを確認します.
  3. ビルド設定ウィンドウ(menu:File > Build Settings)を開きます.
  4. ターゲットプラットフォームを選択します.
  5. Scenes in Buildリストにシーンが表示されている場合は,CartPoleSampleシーンだけがチェックされていることを確認してください(リストが空の場合,現在のシーンのみがビルドに含まれます).
  6. Buildをクリックします: a. ファイルダイアログで,ML-Agentsディレクトリのpythonに移動します. b. ファイル名を付けてSaveをクリックします.

Build Window 0 Build Window

学習を実行

山登り法による学習

本リポジトリには,政策モデルのパラメータを山登り法によって探索するrun_hill_climbing.pyというPythonプログラムがサンプルとして実装されています.

学習を実行するためには,以下のコマンドを実行してください.

python3 python/run_hill_climbing.py <env_file_path> --run_id=<run-identifier> --train

--trainフラグはML-Agentsに学習モードで実行するように指定します. env_file_pathはさきほどビルドした実行ファイルへのパスでなければなりません.

このサンプルプログラムは,デフォルトの引数では,以下のような非常にシンプルな政策モデルを学習させます.

実行時に指定できるオプションについては,python3 python/run_hill_climbing.py --helpコマンドで参照することができます.

学習ログの推移確認

TensorBoardを利用することで,学習時に累積報酬やエピソードの長さがどのように変動しているかを確認することができます. 以下のコマンドを実行すると,TensorBoardが起動します.

tensorboard --logdir=summaries

その後,localhost:6006を立ち上げて下さい.

TensorBoardによって,以下の推移が確認できます.

TensorBoard

学習済みモデルのテスト

学習を実行した際に生成された学習済みモデルをInternalタイプのBrainで使用するには,以下の手順を行ってください.

TensorFlowSharpプラグインのセットアップ

  1. TensorFlowSharpプラグインがAssetsにあることを確認します. TensorFlowSharpプラグインはこちらからダウンロードできます. ダウンロードしたファイルをダブルクリックしてインポートします. 正常にインストールされたかどうかは,Assets -> ML-Agents -> Plugins -> ComputerのProjectタブのTensorFlowSharpファイルをチェックすることで確認できます.
  2. Edit -> Project Settings -> Playerへ移動します.
  3. ターゲットとなるプラットフォームごとに (PC, Mac and Linux StandaloneiOS or Android):
    1. Other Settingsに進みます.
    2. Scripting Runtime VersionExperimental (.NET 4.6 Equivalent)にします.
    3. Scripting Defined Symbolsに,ENABLE_TENSORFLOWフラグを追加します. 入力後,Enterキーを押します.
  4. File -> Save Project
  5. Unity Editorを再起動します.

tensorflowsharp

学習済みモデルをUnityへインポート

  1. 学習済みモデルは,Unity_RLフォルダ内のmodels/<run-identifier>に保存されます. 学習が完了すると,<env_name>.bytesファイルがフォルダ内にあります. <env_name>は学習中に使用される実行ファイル名です.
  2. <env_name>.bytespython/models/hill_climbing/からunity-environment/Assets/ML-Agents/Examples/CartPoleSample/TFModels/に移動します. ※ 本リポジトリには,サンプルのモデルファイルであるCartPoleSample_hill_climbing.byteが既にunity-environment/Assets/ML-Agents/Examples/CartPoleSample/TFModels/内に用意されています. 新しく作ったモデルファイルとファイル名が被ってしまった場合には,削除するなりしてください.
  3. Unity Editorを開き,上述のようにしてCartPoleSampleシーンを選択します.
  4. Scene hierarchyからCartPoleBrainオブジェクトを選択します.
  5. Brain TypeInternalに変更します.
  6. EditorのProjectウィンドウから<env_name>.bytesファイルをCartPoleBrain Inspector ウィンドウのGraph Model placeholderにドラッグします.
  7. Editorの上部にあるPlayボタンを押します.

Unity EditorのGameビューでPole(棒)を倒立させるようにCartが動いていれば(あるいは,動きが緻密すぎてほとんど動いていないように見えることもあります)成功です!

brain_internal