ml-agents 0.8.0 で自分のプロジェクトで機械学習させる (Mac)(導入編)

# 環境設定

1. ml-agents 0.8.0
https://github.com/Unity-Technologies/ml-agents/tags/0.8.0
をダウンロードして、適当なところに配置

2. anaconda をインストール
ターミナルで「conda」と打って反応があれば既にインストール済み

3. 仮想環境を作る
`conda info -e`
で[ml-agents]があれば良い。なければ↓でつくる。
`conda create -n ml-agents python=3.6`
で仮想環境を作る（なんか聞かれたら「y」と入力）
`conda activate ml-agents`
で仮想環境切り替え
`pip install tensorflow==1.7.1`
で tensorflow を仮想環境にインストール
**★★★　注意　★★★**
このまま進めると、「kiwisolver」がビルドできなくて詰むので、別途独自に↓でインストールしておく。
`conda install kiwisolver`
これがなければ 次で kiwisolover をビルドしようとしてビルドできなくて詰む。

4. ML-Agents が使うライブラリをインストール
`cd [ml-agentsのあるフォルダ]`
`pip install mlagents`

# とりあえずサンプルを動かしてみる
1. 仮想環境に入る
既に↑で入っていればやらなくてもよし。入っていなければ↓を実行
`cd [ml-agentsのあるフォルダ]`
`conda activate ml-agents`

2. Unityサンプルシーンを用意
 1. Unityを立ち上げて、[ml-agents]/UnitySDK を開く。
 1. [ml-agents]/UnitySDK/Assets/ML-Agents/Examples/[開きたいサンプル]/Scenes/[やりたいシーン]をUnityで開く

3. Unityサンプルシーンを外部から機械学習できるようにする
 1. なんちゃらAcademy というGameObject のインスペクターをみる（ex:Ball3DAcademy）
 2. Brains の「Control」という項目をチェックを入れる
  <img width="1065" alt="Item-0_と_AppleClockExtra_と_Item-0_と_Item-0_と_Item-0_と_Item-0_と_Item-0_と_Item-0_と_Item-0_と_AppleTimeMachineExtra_と_AppleBluetoothExtra_と_AirPortExtra_と_AppleVolumeExtra_と_BatteryExtra_と_AppleTextInputExtra.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72960/f73d23a8-6162-6293-a083-a1fab6511360.png">


3. 仮想環境で実行
 ターミナルに戻って、以下を実行
 `mlagents-learn config/trainer_config.yaml --run-id=firstRun --train`
 すると、Unityのスタートボタン待ちになる
<img width="809" alt="ml-agents-0_8_0_—_python_◂_mlagents-learn_config_trainer_config_yaml_--run-id_firstRun_--train_—_112×44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72960/746adbaa-e1bf-5b79-ec81-4eb77857ac79.png">


4. Unityでプレイ
 1. Unity でプレイボタンで始める。Unityで動くと、ターミナルでもなんか動いてる感じになる。
<a href="https://gyazo.com/c96d14b0717527fdeb298398ef34ecec"><img src="https://i.gyazo.com/c96d14b0717527fdeb298398ef34ecec.gif" alt="Image from Gyazo" width="856"/></a>
 2. しばらくほっておくとなんかいい具合になってる
[![Image from Gyazo](https://i.gyazo.com/2cc21f112ab8fd1750ff88bbb71d305b.gif)](https://gyazo.com/2cc21f112ab8fd1750ff88bbb71d305b)

5. 学習済みデータの取得
 1. いい頃合いでUnityプレイボタンを再度押して終了させて、学習を終わらせる
 2. [ml-agents]/models/firstRun-0/[なんちゃら]Learning.nn ファイルをUnityプロジェクトにインポート（ドラッグ&ドロップ）。場所は適当。
 3. Assets/ML-Agents/Examples/[サンプル]/Brains/[なんちゃら]Learning.asset を選択
 4. 「Model」のところをさっきインポートした学習済みNNファイルをドラッグ&ドロップ
 <img width="614" alt="Unity_2018_3_0f2_-_3DBall_unity_-_UnitySDK_-_PC__Mac___Linux_Standalone__Metal__と_「ml-agents_0_8_0_で自分のプロジェクトで機械学習させる__Mac_」を編集_-_Qiita.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72960/4edbecb6-f40d-1870-4b43-c7ae5d7a673a.png">

3. 先ほどのUnityサンプルを学習済みデータを使うようにする
 なんちゃらAcademy というGameObject のインスペクターの Brains の「Control」という項目をチェックをはずす
<img width="819" alt="Unity_2018_3_0f2_-_3DBall_unity_-_UnitySDK_-_PC__Mac___Linux_Standalone__Metal__と_firstRun-0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72960/89621753-4c01-3c7c-c7f9-34454c6288b8.png">

4. 学習済みデータで実行
Unityプレイすると、最初からちゃんとできているようになる。
[![Image from Gyazo](https://i.gyazo.com/a9a10d8ba351d7324f5db54e7dc7e5ef.gif)](https://gyazo.com/a9a10d8ba351d7324f5db54e7dc7e5ef)

長くなったので続きは次回！