見出し画像

Unity ML-Agents 2.0 入門 (2) - DodgeBall環境

「Unity ML-Agents 2.0」の「DodgeBall環境」についてまとめました。

・Unity ML-Agents 2.0 (Release 18)

前回

1. DodgeBall環境

「DodgeBall」は、プレイヤーがボールを拾って相手に投げつけるシューティングゲームの学習環境です。

以下の2つのモードが用意されています。

◎ せん滅モード
相手チーム全員にボールを当ててアウトにした方が勝ちなゲームです。プレイヤーは2回ボールを当てられるとアウトになります。

◎ 旗取りモード

相手チームの旗を盗んで基地に持ち帰った方が勝ちなゲームです。プレイヤーはボールを当てられると10秒間動けなくなり、旗を持ってた場合は落とします。自分チームの旗を拾うと基地に旗が戻り、相手チームの旗を拾うと持つことができます。

プレーヤーは最大4つのボールを拾うことができ、ダッシュすることで、ボールをかわしたり、生け垣を通過したりすることができます。

2. 学習方法

この学習環境は、「MA-POCA」「可変長観察」「セルフプレイ」を利用して、エージェントを学習しています。

MA-POCA
可変長観察
セルフプレイ

3. DodgeBall環境の実行

DodgeBall環境の実行手順は、次のとおりです。

(1) DodgeBall環境をクローン。
DodgeBall環境のプロジェクトフォルダ(ml-agents-dodgeball-env)がクローンされます。

$ git clone --single-branch --branch dodgeball-env https://github.com/Unity-Technologies/ml-agents.git ml-agents-dodgeball-env

(2) Unityエディタv2020.2.6以降でプロジェクトフォルダを開く。
(3) 「Assets/Dodgeball/Scenes/TitleScreen.unity」を開き、Playボタンで実行。
事前学習されたエージェントと対戦することができます。

画像1

4. DodgeBall環境のシーン

「Assets/Dodgeball/Scenes/」には、以下の7つのシーンが含まれています。

・TitleScreen : タイトル画面。
・Elimination.unity : せん滅モードのエージェントvs人間。
・Elimination_Training.unity : せん滅モードの学習。
・EliminationVideoCapture.unity : せん滅モードのエージェントvsエージェント。
・CaptureTheFlag.unity : 旗取りモードのエージェントvs人間。
・CaptureTheFlag_Training.unity : 旗取りモードの学習。
・CaptureTheFlagVideoCapture.unity : 旗取りモードのエージェントvsエージェント。

5. 学習

「DodgeBall」環境は、「ML-Agents Release 18」で構築されています。学習には、「Elimination_Training.unity」「CaptureTheFlag_Training.unity」のいずれかを使用します。

学習設定YAML「DodgeBall.yaml」では、コンピュータの性能に応じて、コメントを解除し、環境の数(num_envs)を増やすことができます。

数千万のステップ(これには何時間もかかります)の後、エージェントは改善し始めます。他のセルフプレイの実行と同様に、時間の経過とともにELOが増加するのを観察する必要があります。学習の各段階で、どのような行動が予想されるかについては、以下の動画を参照してください。

6. 環境パラメータ

ブログ投稿の結果を生み出すために、このリポジトリのデフォルト環境を利用しました。 ただし、報酬機能を調整し、トレーナーから環境を制御するための環境パラメータも提供しています。 

・ball_hold_bonus : (デフォルト= 0.0)保持しているボールごと、タイムステップごとにエージェントに与えられる報酬。
・is_capture_the_flag : このパラメータを1に設定すると、シーンのゲームモード設定が上書きされ、キャプチャーザフラッグに変更される。消去の場合は0に設定。
・time_bonus_scale : (デフォルト=せん滅モードの場合は1.0、旗取りモードの場合は0.0)ゲームを終了するのに時間がかかりすぎた場合に与えられる負の報酬の乗数。試合を終了するのに最大ステップ数がかかる場合は、-1.0の報酬として1.0に設定。
・Elimination_hit_reward : (デフォルト= 0.1)せん滅モードで、エージェントがボールで相手を攻撃したときにエージェントに与えられる報酬。
・stun_time : (デフォルト= 10.0)旗取りモードで、エージェントがボールに当たったときにスタンする秒数。
・opponent_has_flag_penalty : (デフォルト= 0.0)旗取りモードで、対戦相手が旗を持っている場合、すべてのタイムステップでチームに与えられるペナルティ(負の報酬)。ここでは負の値を使用。
・team_has_flag_bonus : (デフォルト= 0.0)旗取りモードで、チームメンバーの1人が対戦相手の旗を持っている場合、すべてのタイムステップでチームに与えられる報酬。
・return_flag_bonus : (デフォルト= 0.0)旗取りモードで、対戦相手が旗を落とした後、チームが自分の旗を基地に戻したときにチームに与えられる報酬。
・ctf_hit_reward : (デフォルト= 0.02)旗取りモードで、エージェントがボールで相手を攻撃したときにエージェントに与えられる報酬。

参考



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