Unityではじめる強化学習入門 / Pythonインターフェイス
1. Unity ML-AgentsのPythonインターフェイス
「Unity ML-Agents」のPythonインターフェイスには、通常の「Unity ML-Agents」の学習で利用するPythonスクリプト「mlagents-learn」の他に、Unity環境と直接やり取りできる低レベルなPython API「mlagents.envs」があります。
2. mlagents.envs
「mlagents.envs」を利用することによって、独自の学習用Pythonスクリプトを作成することができます。主なクラスは次の3つです。
.UnityEnvironment
.BrainInfo
.BrainParameters
3. UnityEnvironment
「UnityEnvironment」は、Unity環境とPython間のメインインターフェイスです。
Unity環境とPython間で通信するには、「Academy - Broadcast Hub - Control」でチェックが付いている「Brain」を使用している「Agetn」が存在する必要があります。
◎環境の生成
環境を生成するには、UnityEnvironmentを使います。「file_name」に「None」を指定することで、「mlagents-learn」と同様に「Unityエディタ」と直接通信することができます。
UnityEnvironment(file_name=None, worker_id=0, seed=1)
file_name: 環境バイナリの名前(envと同じディレクトリに配置)。
worker_id: 環境との通信に使用するポート番号
seed: 乱数シード
戻り値: UnityEnvironmentオブジェクト
◎環境の情報出力
環境の情報出力を行うには、print(str(env))を使います。
出力例は次の通りです。
Unity Academy name: MyAcademy
Number of Brains: 1
Number of Training Brains : 1
Reset Parameters :
Unity brain name: MyBrain
Number of Visual Observations (per agent): 0
Vector Observation space size (per agent): 1
Number of stacked Vector Observation: 1
Vector Action space type: discrete
Vector Action space size (per agent): [1]
Vector Action descriptions:
◎環境のリセット
「環境」をリセットするには、、env.reset()を使います。
env.reset(train_model=True, config=None)
train_model: trueで学習モード、falseで推論モード
config: リセットパラメータの辞書
戻り値: キー「Brain名」と値「BrainInfo」の辞書
◎環境の1ステップ実行
環境の1ステップ実行を行うには、env.step()を使います。
env.step(action, memory=None, text_action=None)
action: 行動
memory: メモリー(次ステップで取得するオプション入力)
text_action: テキスト行動(単一文字列のオプション入力)
戻り値: キー「Brain名」と値「BrainInfo」の辞書
「Academy - Broadcast Hub - Control」でチェックが付いている「Brain」が複数ある場合は、キー「Brain名」で値「行動」の辞書で指定する必要があります。
action = {'brain1':[1.0, 2.0], 'brain2':[3.0,4.0]}
◎環境のクローズ
環境のクローズを行うには、env.close()を使います。
env.close()
4. BrainInfo
「BrainInfo」は、観察や報酬など、BrainとBrainを利用しているAgentの情報を保持するクラスです。主なプロパティは次の通りです。
・visual_observations: ビジュアル観察の情報
・vector_observations: ベクトル観察の情報
・text_observations: テキスト観察の情報
・memories: 前ステップで送信されたメモリの情報
・rewards: 報酬のリスト
・local_done: エピソード完了のリスト
・max_reached: 最大ステップ数到達のリスト
・agents: AgentのIDのリスト
・previous_actions: 前ステップの行動
5. BrainParameters
「BrainParameters」は、「BrainInfo」のデータ要素の説明情報を保持するクラスです。「Brain」の名前や、「BrainInfo」の観察の配列の長さなどを提供します。
6. Unity ML-Agentsの学習サイクルをコードで記述
「mlagents.env」を使って「Unity ML-Agents」の学習サイクルをコードで記述すると次のようになります。
from mlagents.envs import UnityEnvironment
import numpy as np
# パラメータ
ENV_NAME = None # 環境ファイル名
TRAIN_MODE = True # 訓練モード
NUM_EPISODES = 10 # 学習するエピソード数
MAX_STEPS = 10 # 1エピソードの最大ステップ数
# 環境の生成
env = UnityEnvironment(file_name=ENV_NAME)
# Brain情報の取得
brain_name = env.brain_names[0]
brain_info = env.brains[brain_name]
action_size = brain_info.vector_action_space_size[0]
# 学習ループ
for episode in range(NUM_EPISODES):
# 環境のリセット
brain_info = env.reset(train_mode=TRAIN_MODE)[brain_name]
# 1エピソードのループ
for step in range(MAX_STEPS):
print('episode:', episode, 'step:', step)
# 行動の取得
action = np.random.randn(1, action_size)
# 1ステップの実行
brain_info = env.step(action)[brain_name]
# エピソード完了時の処理
if brain_info.local_done[0]:
break
# 環境のクローズ
env.close()
この記事が気に入ったらサポートをしてみませんか?