見出し画像

Unityではじめる強化学習入門 / Gymラッパー

1. Gymラッパー

「Gymラッパー」で「Unity ML-Agents」の環境をラップすることで、「OpenAI Gym」のGym環境として利用できます。

2. Gymラッパーのインストール

「Gymラッパー」は、以下のコマンドでインストールします。

$ pip install gym_unity

3. Gymラッパーの使用

Gymラッパーを利用するには、「gym_unity.envs.UnityEnv」を使います。

from gym_unity.envs import UnityEnv

env = UnityEnv(environment_filename, worker_id, use_visual, uint8_visual, multiagent)
   environment_filename: 「Unity ML-Agents」の環境のパス
   worker_id: 環境との通信に使用するポート番号(デフォルトは0)
   use_visual: 観察がビジュアル観察かどうか(デフォルトはFalse)
       False: ベクトル観察
       True: ビジュアル観察
   uint8_visual: ビジュアル観察をuint8値(0255)で出力するかどうか(デフォルトはFalse)
       False: 0.01.0
       True: 0255
   multiagent: 複数のエージェントを含むかどうか(デフォルトはFalse)
   flatten_branched: ブランチして行動空間をフラット化するかどうか(デフォルトはFalse)
       False: Discrete
       True: MultiDiscrete
   allow_multiple_visual_obs will: 複数の観察を返すかどうか(デフォルトはFalse)

使用例は次の通りです。

from gym_unity.envs.unity_env import UnityEnv
env = UnityEnv("./envs/GridWorld", 0, use_visual=True, uint8_visual=True)

4. 制限事項

・単一のBrainを持つ環境のみを利用できる。
・ビジュアル観察が存在する場合は最初のビジュアル観察、それ以外の場合はベクトル観察が観察として提供される。「allow_multiple_visual_obs = True」を指定すると、全てのビジュアル観察を取得できる。
・環境からののBrainInfoは、env.step()のinfoからアクセスできる。
・「スタックベクトル観察」(Stacked vector observations)はサポートされていない。
・gym.make()はサポートされていない。

5. Stable-BaselinesでBasicを学習

「Stable-Baselines」で「Unity ML-Agents」に含まれるサンプル環境「Basic」を学習します。

◎Unity ML-Agentsの環境の準備
(1)「ML-Agents/Examples/Scenes/Basic」のシーンを開く。
(2)AcademyのInspectorを開き、Learning BrainのControlをチェック。
(3)Training ConfigurationをInference Configurationと同じ設定にし、学習してる様子を観察できるように設定。
学習速度は遅くなるので、本気で訓練する時には、元の設定にしてください。
(4)「Build Settings」でビルドし、「basic.app」(拡張しは環境毎に異なる)を生成。

◎Stable Baselinesでの学習
Stable Baselinesでの学習のコードは次の通りです。
はじめはランダムに動きますが、徐々に点数の高い大きな球に優先的に移動するようになります。

import gym
from stable_baselines.common.policies import MlpPolicy
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import PPO2
from gym_unity.envs.unity_env import UnityEnv

# 環境の生成
env = UnityEnv('basic')
env = DummyVecEnv([lambda: env])

# モデルの生成
model = PPO2(MlpPolicy, env, verbose=1)

# モデルの学習
model.learn(total_timesteps=10000)

画像1


この記事が気に入ったらサポートをしてみませんか?