UnityでML-Agentsの環境構築！！

初めました強化学習です。
今回は開発環境の構築をします。
##開発環境
 下記のスペックで行います。
　- OS : Windows 10 Pro
　- CPU : Core(TM) i5-8400 @2.80GHz
　- GPU : NVIDIA GeForce RTX 2060 (6Gのやつ)
　- メインメモリ : 8G

### 開発環境構築
構築手順を記載します。順番違ったらごめんなさい。
#### CUDA 9.0インストール
 tensorflowが9.0に依存するのでこのバージョンをインストールします。
 サイトからCUDAのインストーラーを[ダウンロード](https://developer.nvidia.com/cuda-90-download-archive)してきます。
　![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/2faf533c-f742-93e6-060b-c5f0b78da12b.png)
 
NVIDIA のGPUを計算用に使用する為のソフトウェアをインストールします。
ドライバーはCUDAインストーラーからインストールしない事をお勧めします。
画像はバージョン違うけど気にしないでね。
![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/f8aa56ca-84dc-ab49-c5c0-902caf0c2e60.png)

#### cuDNNをインストール
　今回はTensorflowのGPU版も一緒にインストールするのでこの作業を行います。
サイトは[ここ](https://developer.nvidia.com/rdp/cudnn-download)にあります。
ログインしてからダウンロードして解凍したCUDAフォルダをインストールしたCUDAフォルダに入れてください。

#### Visual Studio インストール
サイトから[ダウンロード](https://visualstudio.microsoft.com/ja/downloads/)。
めんどくさいので省略。
　　
#### Anaconda インストール
これもサイトから[ダウンロード](https://www.anaconda.com/distribution/)。
うまくいかない時はおそらくSSH認証がうまくできない人だと思います。
めんどくさいので[アーカイブ](https://repo.continuum.io/archive/)から古いバージョンをダウンロードします。  
仮想環境の構築はお好みで、
Numpyを再インストール

```
pip unsinstall numpy
pip install numpy==1.14.5
```
Tensorflowのインストール

```
pip install tensorflow==1.7
```

mlagentsのインストール

```
pip install mlagents
```

後、僕の環境ではこれも必要そうだったので入れました。
docoptのインストール

```
pip install docopt
```

#### Unity インストール
サイトから[ダウンロード](https://store.unity.com/ja)しインストール。特になし。

#### TensorFlowSharp プラグイン
調べると色々なGithub上でリンクがありますが、
[こちら](https://s3.amazonaws.com/unity-ml-agents/0.5/TFSharpPlugin.unitypackage)から拾ってきます。

#### Unity ML-Agent
Githubからプロジェクトを[ダウンロード](https://github.com/Unity-Technologies/ml-agents)してください。
適当な場所に解凍してください。

## Unityのセットアップ
プロジェクトの作成とアセットの追加とプラグインとインポートを行います。
##### プロジェクトの作成
プロジェクト名：適当（自分はML Projectとしました。)
プロジェクト作成場所：適当
##### アセットの追加
(Unityプロジェクト/Assets)にML-Agentのフォルダを一式格納します。
![6.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/73bcc244-dec0-8bec-0b54-deae78281a54.png)
ML-Agentsのフォルダにはサンプルが入っています。
不要な場合はExsamplesフォルダを削除してください。
##### プラグインのインポート
Unityのメニューから「Assets」→「Import Package」→「Custom Package」選択。
![7.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/8893df56-e0a6-edef-1d53-21faa233fb45.png)
「TensorFlowSharp プラグイン」を選択。
![8.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/75285769-78f5-a914-7d7f-e7ed6850317a.png)
「Import」をクリックしプラグインをインポートします。
![9.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/5bc6ddee-f157-6d5d-d189-f7b33277ffcc.png)
でここまでやっていくと、下になんか出てます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/243161/34429215-f48b-3c0e-8c89-e481d9cf233a.png)
とりあえず探した結果、[これっぽい](https://github.com/Unity-Technologies/ml-agents/pull/1869/files/3f8ddeffd146b8910fafb2d77f83e4a06ddcaf3a)のでファイルを修正します。
Unityの「Console」のエラー項目をダブルクリックしてエラーの出ているファイルを開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/243161/1e6999c7-1354-1b01-658c-efd394f77f72.png)
「using System.Runtime.Remoting.Messaging;」の行を削除し保存します。
するとエラーが消えますね。

## ビルド設定
ラストスパートです。
Unityのメニュー「File」→「Build Settings」を選択。
「Player Settings」をクリックし、Inspectorウィンドウで設定を行います。
![12.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/f3897bce-6a17-e43f-90ce-4dbca501d61b.png)

「Resolution and Presentation」の以下の設定に変更します。

| 設定 | 値 | 説明 |
|:------------:|:------------:|:------------:|
| Run in Background  | チェック  | バックグラウンド実行の有効化  |
| Display Resolution Dialog  | Disabled  | Resolutionダイアログを非表示  |

![13.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/eaddc2b1-ec9f-32a2-44e8-d7ee9e8245c4.png)



続いて「Other Settings」の設定項目を以下の設定にします。

| 設定 | 値 | 説明 |
|:------------:|:------------:|:------------:|
| Scripting Runtime Version  | Experimental (.NET 4.x Equivalent)  | Scripting Runtimeのバージョン設定  |
| Scripting Defined Symbols | ENABLE_TENSORFLOW  | Tensorflowを利用することを指定  |
| Api Compatibility Level* | .net 4.x  |  .NET 4 API へのアクセスを指定  |
![14.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/1183f197-eaca-0a5f-879d-5fb181c56ef6.png)



以上でUnityのセットアップを完了しました。

## 動作確認

一応、mlagentsのコマンドが動くか確認します。
コンソール画面を開き以下のコマンドを入力します。

```
activate <anaconda仮想環境名>
```
仮想環境がアクティベートされたコンソール画面で
ML-Agentsのフォルダ階層まで移動します。(ml-agents-master\ml-agents)

```
cd ./ml-agents-master\ml-agents
```
最後におまじないをドーン。

```
mlagents-learn
```
そうすると以下のようなかっこいいロゴがコンソール上に現れます。
なんか警告出てますが、疲れたので無視します。

![15.PNG](https://qiita-image-store.s3.amazonaws.com/0/243161/fe29990b-bd5c-6c15-422c-c7b8012d4fdd.png)

長かったですが、これで準備が整いました。