自動運転の対戦には,本演習用に整備したプログラムを使用するため,こちらからダウンロードしてください.プログラムのチュートリアルや詳細な説明などはWikiを参照してください。下の「教科書のプログラムとの違い」もご覧ください。
上の配布プログラムは本演習用に一部使用を教科書のものから変更したため,教科書を参照する際は注意してください.
主な変更点は以下の通りです.
教科書中で、Run1~5のシーンで学習結果を実行するような指示がありますが、これらのシーンは本プログラムでは動作しません。学習結果を実行したい場合は、対戦用のシーン`Scenes/Test/Battle`で実行してください。
教科書では,前方5方向のセンサーの値が取得できるとしていますが,本プログラムでは,様々な工夫を可能にするために他の情報も得られるようにしています.
取得可能な情報は,
対壁センサー(前後左右4方向.各方向5本ずつ.角度指定可能.):壁や障害物に反応します.
対車センサー(前後左右4方向.各方向5本ずつ.角度指定可能.):相手の車に反応します.
自車のローカル速度
コース上の前方向ベクトル(次のWaypointの方向)
の計46次元です.詳細は,配布プログラム中のREADMEなどを参照してください.
対戦中に得られる情報は,以上の46次元のみで,それ以外の情報は取得できません.
注意:配布している学習用のプログラム(`NEEnvironment.cs`など)では,教科書の通り,前方5方向のセンサーなどの入力だけで学習しています.他の情報を使用して学習したり相手の車がいる環境で学習したりするには自分で実装する必要があります.
教科書では,`XBrain.cs`を編集して独自のAIを実装するように書いてあると思いますが,本プログラムでは,`BattleBrain`というクラスを継承して実装してもらいます.
[CreateAssetMenu(menuName = "BattleBrain/YourNameBattleBrain")]
public class YourNameBattleBrain : BattleBrain
{
public override double[] GetAction(List<double> observation) { }
}
車の観測情報`observation`を入力として,3次元の車の`Action`を出力する`GetAction`関数を実装する必要があるのは,教科書と同様です.`BattleBrain`クラスの詳細はWikiを参照して下さい.
教科書では,独自に実装したAIを対戦させる際には,`AgentExecutor.cs`を編集する必要があると書いてあるかもしれませんが,本プログラムでは,`AgentExecutor.cs`のコードを直接書き換える必要はありません.Unityシーン上の`AgentExecutor`オブジェクトのInspectorタブから,独自に実装した`BattleBrain`のアセットをAgentExecutor→Agents→Element0/1→Brainにセットしてください.詳細は,配布プログラム中のREADMEなどを参照してください.