ML-Agentsを使うと、Unityで簡単にTensorFlowを使った強化学習が実行できます。
まずはサンプルを動かしてみます。
see https://qiita.com/decchi/items/e2300f8a9dacf6ac4ccd
see http://nn-hokuson.hatenablog.com/entry/2017/12/26/213456
ML-Agentsをセットアップ
pythonのバージョンを確認
バージョンを確認しておきます。
$ python --version
Python 3.6.3
minicondaをインストール
see https://qiita.com/FukuharaYohei/items/cf72049b2a97687037bb
ml-agentsをセットアップ
ml-agentsをダウンロードします。
by https://github.com/Unity-Technologies/ml-agents
anaconda promptを開いてセットアップします。
conda create --name mlagent python=3.6
conda activate mlagent
cd ml-agents-master/python
pip install -r ./requirements.txt
サンプルをセットアップ
Unityプロジェクトを開く
ml-agents-master/unity-environmentをUnityでOpenします。
以下のようなサンプルが入っています。
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Examples.md
TensorFlowSharpプラグインをインストール
by https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Using-TensorFlow-Sharp-in-Unity.md
使用するサンプル
BananaCollectorsを使います。
- 設定:エージェントがバナナを収集するために競争するマルチエージェント環境。
- 目標:青いバナナを避けながら、可能な限り多くの黄色のバナナに移動する方法を学ぶ必要があります。
- エージェント:環境には、単一の脳にリンクされた5つのエージェントが含まれています。
- エージェント報酬機能(独立):
- 黄色のバナナとの相互作用のための+1
- 青いバナナとの相互作用のため-1。
- 脳:以下の観察/行動空間を有する1つの脳。
- エージェントの順方向(49; 7つのレイキャスト角度(7つのレイキャスト角度))の周囲の物体の光線に基づく知覚に加えて、エージェントの速度に対応するベクトル観測空間:(連続的)それぞれの測定値)。
- ベクトルアクションスペース:(連続)サイズ3、前方移動、y軸回転、およびレーザーを使用して他のエージェントを無効にするかどうかに対応します。
- 視覚的観察(オプション):1人目のカメラごとのエージェント。VisualBananaシーンを使用します。
- リセットパラメータ:なし
- ベンチマーク平均報酬:10
- オプションの模倣学習シーン:BananaIL。
模倣学習する
自分で操作した結果をAIに学習させる方法です。
BananaILシーンを開きます。
Build SettingsでBuildし、ai1/ai1.exeに模倣学習用のプログラムをビルドします。
ビルドが終わったら、ml-agents-masterのpythonディレクトリで以下を実行し、模倣学習を開始します。
python learn.py ..\unity-environment\ai1\ai1.exe --train --slow
WASDキーで移動し、青いバナナに触れないようにして、黄色いバナナをとります。
プレイヤーの動きを生徒役のAIが学習します。
10000Stepまで学習が進むと、プログラムは自動的に終了します。
終了すると、学習モデルが以下に作成されます。
ml-agents-master\python\models\ppo\ai1_ppo.bytes
学習モデルをBananaCollectors/TFModelsにコピーします。
学習モデルを実行します。
Bananaシーンを開きます。
BananaBrainのBrain TypeをInternalにして、ai1_ppo.bytesを選択します。
実行すると、さきほど学習したモデルを使ってAIが動作します。
自動的に学習する
自分で操作せずに自動で学習する方法です。
Bananaシーンを開きます。
BananaBrainのBrain TypeをExternalにして、ai1/ai1.exeにビルドします。
ビルドが終わったら、ml-agents-masterのpythonディレクトリで以下を実行し、学習を開始します。
python learn.py ..\unity-environment\ai1\ai1.exe --run-id=test1 --train
終了すると、学習モデルが以下に作成されます。
ml-agents-master\python\models\test1\ai1_test1.bytes
学習モデルをBananaCollectors/TFModelsにコピーし、模倣学習と同様に実行します。
自分で操作する模倣学習のときより動きが緩慢に見えます。
Unity Editor上で学習を実行する
0.4からできるようになったようです。
by https://qiita.com/God_KonaBanana/items/8c7fa1b9da6d2e052ce2
Brain TypeをExternalにします。
pythonディレクトリで以下を実行します。
python learn.py --train
Unity Editorで実行ボタンを押します。
これでUnity Editorで実行をしながら学習が開始します。
おしまい。