Unityを強化学習の学習環境として使う方法
強化学習環境としてのUnity
Unity+ML-Agentsで強化学習環境の構築という記事で、ML-Agentsを使って強化学習をやってみたのですが、全く次に進めないのでML-Agentsを使わずUnityを強化学習の環境として使ってみたいと思います。
以下の3Stepで、UnityをOpenAI的な環境としてPythonで自由自在に扱えるようになります。
- UnityをPythonのAPIを用いて制御
- Unity上にオリジナルの学習環境を構築
- Unity環境で強化学習の学習
想定している環境は、Windows(WSL2)/Linux(Ubuntu 20.04)/Intel Macです。Apple Silicon Macは少し頑張れば動きそうな気はしますが、動作未確認です。
UnityをPythonのAPIを用いて制御
以下の記事と同様にセットアップして、「UnityでML-Agentsを使う」のところまでを実施します(今回はML-Agentsでの学習は行いません)。
Jupyter Labを以下コマンドでインストールします。
$ python3 -m pip install jupyterlab
Notebookをダウンロードします。
$ wget https://raw.githubusercontent.com/karaage0703/reinforcement-learning-sample/master/unity/01_ml_unity.ipynb
Jupyter Labを起動します。
$ jupyter lab
01_ml_unity.ipynb
を開いて、上から順に実行していきましょう。
途中のRun the Environment
のExecute Unity
と記載あるタイミングでUnityを再生しましょう(今回は、サンプルとして3D Ballsを使っています)。
PythonからUnityの情報を取得したり、行動したり、ステップを進めることができます。
Unity上にオリジナルの学習環境を構築
以下記事参考に独自の学習環境を構築します。
上記の記事では、新たにプロジェクトを作っていますが、私はUnity+ML-Agentsで強化学習環境の構築で使用したプロジェクトのExamplesに新たにフォルダとファイルを作成する形で始めました。
Unityの学習環境が完成したら、正しくPythonから制御できるかチェックします。先程使用したJupyter NotebookをJupyter Labで実行していきます。
エピソード数を100にしています。
すると、自分が作成したオリジナル学習環境で、エージェントがランダムに動き回ります。ターゲットに触れたら報酬が入ることが分かると思います。
これで、自分でUnityの学習環境も学習プログラムが作れました。
あとは好きにカスタマイズできそうですね。
Unity環境で強化学習の学習
ランダム戦略でなく、強化学習。特にディープラーニングで学習して、UnityでAIモデル(ニューラルネットワーク)を構築したいと思います。
ここから先は、これからです。
まとめ
Unity上にオリジナルの学習環境を構築して、強化学習をしています。
まだ道半ばですが、なんとかサンプルを乗り越えていきたいと思います。
参考リンク
Discussion