質問対応
全般
Q. デバッグの仕方がわからない
スクリプトにDebug.Log("hoge")のように書くことでプリントデバッグができます。
出力内容はコンソールに表示されるので、バグが出た時はこれを活用してとりましょう(デバッガなど使える人はもちろん使ってください)
自動運転
Q. 学習環境で用いたセンサーの数を増やすのに応じて、対戦時に用いるセンサーをNNBattleBrain.csの55行目RearrangeObservationの引数で変える必要はないのでしょうか。
これは必要です。配布したNNBattleBrainは、センサーが少ない状態(7次元)での学習結果のファイルを読み込んでいます。
一方でNNBattleBrainのGetAction関数の引数であるobservationには46次元の値が入ってくるため、そこから必要な値だけを切り出す必要があり、それをRearrangeObservationでやっています。
センサーの数を増やして学習を行ったら、NNBattleBrainで用いるNNの入力の次元も増えるので、用いるobservationデータもそれに対応させる必要があります。
46次元全部そのまま使うなら,新しいクラス作らなくてもNNBattleBrainのUses All Observationにチェック入れれば大丈夫です.(画像参照)
observationの一部だけ使うなら,片山が言うようにRearrangeObservationを使ってやる必要があります.
これは,下のようにProcessObservation関数をoverrideすれば簡単に実装できます.
[CreateAssetMenu(menuName = "BattleBrain/NewBattleBrain")]
public class NewBattleBrain : NNBattleBrain
{
protected override List<double> ProcessObservation(List<double> observation)
{
return RearrangeObservation(observation, new List<int>(){0, 1, 2, 3, 4, 40, 42});
}
}
Q. 適合度の計算の方法を変更する場合にはCarAgents.csの中を変える形になるのでしょうか。
そうなると思います。その場合学習のロジックが変わるだけで対戦用のAIの入出力が変わることはないと思うので、CarAgent.csの提出は不要です。
Q. 全ての次元の観測データを使って学習させたが、あまりうまくいかない
まず今回の実験設定では、全ての観測データをそのまま突っ込むとおそらく過剰になってあまりうまくいかないと思います。去年までは対戦ではない自動運転の課題をやっていたのですが、前方5個の対壁センサー+x,z軸の速度の合計7次元だけでも、うまくパラメータを調整したりしてあげればほとんどのコースを走り切ることができます(ニューロ進化)。
あまりうまくいかない人は、一回(前方5個の対壁センサー+x,z軸の速度)を基準にしてやってみるといいと思います。その上で
使えそうな対壁センサーをいくつか足していく
対車センサーの有効活用を考える
学習環境を対戦用にカスタマイズする
新しいAIを作る
などをやってみると進めやすいかと思います。コースを走り切ることができるだけでも結構上に行けるんじゃないかと思うので、まずはそこを目指してみるといいと思います。
Q. matrix.csで“colmun is not match row”エラーが出る
NNに入力した観測データとニューラルネットのサイズが合ってないことが原因です。学習環境であれば、
EnvironmentのインスペクタのInput Sizeが想定通りになっているか
observationが想定通りの次元になっているか
対戦環境であれば、
読み込んでいるファイルの入力次元は想定通りか
RearrangeObservationでちゃんと次元を指定してるか
useAllObsevationフラグはちゃんと想定通りか
を確認してください。
Q. 「Set Next Direction」のボタンを押すタイミングが分からない
基本的には、学習シーンの実行を開始する前に一度だけ押せば大丈夫です。
押した後にシーンを保存すれば、その後押す必要はありません。