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値(0〜255)で出力するかどうか(デフォルトはFalse)
False: 0.0〜1.0
True: 0〜255
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)
この記事が気に入ったらサポートをしてみませんか?