【画像あり】M1 Mac環境でUnity上で強化学習を可視化する環境構築手順

# 背景
某物理エンジンYoutuber([チャンネル](https://www.youtube.com/channel/UCrkqNT0_Fd5_TIWdjey6K0A))と同じことをしたかったんですが、
表題の方法がネットで探しても見つかりませんでした。
一人で試行錯誤しながら環境を構築するのが地獄だったので、
後続の人に同じ道を歩ませんとここに手順を残しておきます。
(M1 MacとIntel Macの記事が混じっててまじで地獄でした。。。)

# 前提
2022年2月6日時点で筆者が下記の手順で環境を構築できることを確認しました。
バージョンの変更などあればご容赦ください。

# 本稿のゴール
デモプロジェクトでシミュレーション及び学習ができること。
# 手順
## 1.ML-Agentsのダウンロード
<details>
  <summary>ML-Agentsとは？</summary>
Unity上で<b>機械学習の学習環境を構築するフレームワーク</b>です。
</details>

### 1.1.下記URLからML-Agentsをダウンロード
https://github.com/Unity-Technologies/ml-agents
![f63d72ab-ceb3-4420-88ba-476bb699035d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/cbb1d914-8dbc-1de6-62f0-a8993b036c69.png)
### ​​​​​1.2.上記でダウンロードしたファイルを解凍する

## 2.仮想環境の構築
### 2.1.下記URLからMiniforgeのダウンロード
https://github.com/conda-forge/miniforge
![5ecc1c04-cca5-4255-8b03-226b7892bc88.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/bd1b45be-51b5-080e-e014-b6019d812bc1.png)
### 2.2.ダウンロードしたフォルダ直下で、下記コマンドを実行
```shell
bash Miniforge3-MacOSX-arm64.sh
```
適宜Enterとyesを入力してください。
### 2.3.ターミナルを再起動する
### 2.4.下記コマンドを実行して、仮想環境を作成する
```shell
conda create -n 【環境名】 python=3.9.9
```
### 2.5.仮想環境をアクティベート
```shell
conda activate 【環境名】
```
### 2.6.必要なライブラリのインストール
下記コマンドを実施(場所は問わない)
```sh
conda install numpy
conda install Pytorch=1.8.0
conda install h5py
conda install grpcio
```
2.1.でダウンロードしたml-agentsのフォルダ直下で下記コマンドを実施
```shell
python -m pip install mlagents==0.28.0
```

## 3.Unityの準備
<details>
  <summary>Unityとは？</summary>

  [ユニティ•テクノロジーズ社](https://unity.com/ja)が提供するゲーム開発プラットフォームです。
下記の要素を備えており、「これがあればゲームが作れますよ」というツールキットになっています。
- 3D/2D描画
- サウンド再生
- UI管理
- データ管理
- 物理エンジン(力学的な法則のシミュレーション)

ゲーム画面を作るためにコードを書くのではなく、マリオメーカーのように**オブジェクトを配置してゲーム画面を作成する**ので、
​​​​​​​プログラミングに明るくない方でも直感的な操作だけで(ある程度の)ゲームを作成できます。

</details>
<details>
  <summary>UnityHubとは？</summary>

**Unityのバージョン管理ツール**です。

</details>

### 3.1.下記URLから、UnityHubのダウンロード
https://unity3d.com/get-unity/download
![0445ed1a-03ce-4e24-9ab6-7092ff9f0fce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/62fc9e3d-3b25-a3c9-3e12-1d2d5f3fe3d5.png)
### 3.2.Unityアカウントの作成
ここは各々頑張ってください笑
### 3.3.(したい人は)言語を日本語に変更
歯車マーク > Appearance > Language >日本語​​​​​​​
### 3.4.MLagentsのデモプロジェクトをインポート
「開く」から下記を選択
![2c05d7e6-b13d-4861-b22f-f00e5cad932e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/8e9dcfa0-ed59-46a3-87ec-e6cad161c25d.png)
### 3.5.Unityをインストールして起動
インポートしたプロジェクトをクリックするとエディタの
インストールを進めるポップアップが出てくるため
「他のエディターバージョンを選択」を選択し、最新のバーションをインストールしましょう。
​​​​​​​※2022年2月6日現在ではデモと同じバージョンのApple Siliconエディタがないため
ワーニングが出ますが無視しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/cf908552-7352-3d56-cdc8-f0a92d18b3f6.png)
![a227c783-062b-4246-af36-a8b8bfce5260.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/0e759f79-b47f-57eb-99a6-8bca8e406edf.png)

## 4.デモの実行
今回は「3DBall」というデモを実行してみます。
### 4.1.デモプロジェクトを開く
プロジェクトウィンドウのAssets\ML-Agents\Examples\3DBall\Scenes\3DBallを開く
![5ce33cbf-9f2b-4951-bb34-1ed362f66d4a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/4fa5feaa-01e4-a2f8-b4fd-832ef29b6cc7.png)
### 4.2.学習済みモデルでシミュレーション
上の再生ボタンを押下すると既に学習しているので、
ボールを落とさないようにバランスを取るようにキャラが動きます。
かわいい()
![e2a41ab0-e5eb-469d-88fe-7192b710145c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/ca6f322d-240c-3c31-a912-402dce640a5a.gif)
### 4.3.学習を行う
ターミナルで下記コマンドを実施
```shell
mlagents-learn 【2.1.でダウンロードしたml-agentsのフォルダ】¥config¥ppo¥3DBall.yaml --run-id=【任意のID】
```
この状態で再生ボタンを押すと学習が行われます。
4.2.と異なり学習モードなので、実行速度が速かったりボールを落としまくる姿が見れます。
とてもかわいい()
![6363f5e4-c932-4aa6-9f73-34d13802b806.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2559675/f844ab22-e28c-69c8-bbbc-abbbf70e4f38.gif)

## 最後に
デモプロジェクトさえ動けば、あとは遊ぶだけです！
今後はこの環境で遊ぶ方法や遊んだ結果などを投稿します。
拙稿をお読みいただきありがとうございました。