技術書典4 き19 Rosenblock Chainersにて頒布を行った,【進化計算と強化学習の本3】の"Unityで強化学習を始めよう 〜ML-AgentsでCartPole作成〜"で用いたコードを公開しています. (【進化計算と強化学習の本3】は,以下のリンクにて電子版を頒布しています. https://rosenblock.booth.pm/items/828558 )
Unity ML-Agentsを用いて作成したCartPole環境シーン,および学習に用いるpythonコードを公開しています.
以下のサムネ画像は,ML-Agentsを用いて作成したCartPole環境をエージェントが学習している様子を確認できる動画へのリンクです.
CartPole環境シーンを自分で作成する場合,【進化計算と強化学習の本3】に詳細な手順が示されているので,そちらを参考に進めてください.
このリポジトリ内に入っているCartPoleSampleシーンを使って実験を行いたい場合は,「【進化計算と強化学習の本3】を持っていない方向け」章を参考に進めてください.
CartPoleシーンを動かすためには,Unity 2017.1以降のバージョンが必要になります.
Unityは,公式サイトからダウンロードしてください.
学習アルゴリズムは,Python3系で動作します. 主に,以下のライブラリが必要になります.
また,学習ログの推移を出来るようにするためには,以下のライブラリが必要になります.
以上のライブラリをインストールためには,以下のpython
フォルダに移動して,以下のコマンドを実行してください.
cd python
pip3 install -r requirement.txt
上記のコマンドを打ってもTensorFlow
などのインストールに失敗した場合,Unity公式によるインストール手順を参考にしてみてください.
CartPoleSample環境でエージェントの学習を実行させる場合,以下の手順を行ってください.
unity-environment
フォルダを探し,Openをクリックします.Project
ウィンドウで,Assets/ML-Agents/Examples/CartPoleSample/
フォルダに移動します.CartPoleSample
ファイルをダブルクリックして,CartPoleSample環境シーンをロードします.CartPoleBrain
を選択します.External
に設定します.python
に移動します.
b. ファイル名を付けてSaveをクリックします.
本リポジトリには,政策モデルのパラメータを山登り法によって探索する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によって,以下の推移が確認できます.
学習を実行した際に生成された学習済みモデルをInternalタイプのBrainで使用するには,以下の手順を行ってください.
Assets
にあることを確認します.
TensorFlowSharpプラグインはこちらからダウンロードできます.
ダウンロードしたファイルをダブルクリックしてインポートします.
正常にインストールされたかどうかは,Assets
-> ML-Agents
-> Plugins
-> Computer
のProjectタブのTensorFlowSharpファイルをチェックすることで確認できます.Edit
-> Project Settings
-> Player
へ移動します.PC, Mac and Linux Standalone
,iOS
or Android
):
Other Settings
に進みます.Scripting Runtime Version
をExperimental (.NET 4.6 Equivalent)
にします.Scripting Defined Symbols
に,ENABLE_TENSORFLOW
フラグを追加します.
入力後,Enterキーを押します.File
-> Save Project
.Unity_RL
フォルダ内のmodels/<run-identifier>
に保存されます.
学習が完了すると,<env_name>.bytes
ファイルがフォルダ内にあります.
<env_name>
は学習中に使用される実行ファイル名です.<env_name>.bytes
をpython/models/hill_climbing/
からunity-environment/Assets/ML-Agents/Examples/CartPoleSample/TFModels/
に移動します.
※ 本リポジトリには,サンプルのモデルファイルであるCartPoleSample_hill_climbing.byte
が既にunity-environment/Assets/ML-Agents/Examples/CartPoleSample/TFModels/
内に用意されています.
新しく作ったモデルファイルとファイル名が被ってしまった場合には,削除するなりしてください.CartPoleSample
シーンを選択します.CartPoleBrain
オブジェクトを選択します.Brain Type
をInternal
に変更します.<env_name>.bytes
ファイルをCartPoleBrain
Inspector ウィンドウのGraph Model
placeholderにドラッグします.Unity EditorのGameビューでPole(棒)を倒立させるようにCartが動いていれば(あるいは,動きが緻密すぎてほとんど動いていないように見えることもあります)成功です!