フリーランスの暇な時に書く技術メモ
Genki Tech

ml-agentsのstepとframeの関係がよく分からなかったので調べてみた。

結論

  • Update => 可変
  • OnActionReceived => 50/s (Fixed Timestep依存) = step
  • CollectObservations, Heuristic => 10/s = Desicion Period * step

ML-Agentsのセンサーに、加速度と重力方向を渡そうと思ったら、自分がフレームとステップの関係をよく理解できていなかったことが原因でうまく行かなかったのでまとめてみました。

Update関数の呼ばれる頻度

可変。Updateは画面のリフレッシュレートに応じて、1秒あたりに呼ばれる回数が決まっていない。これはUnityの基本。

OnActionReceivedの呼ばれる頻度

固定。画面のリフレッシュレートに関係なく、1秒当たり固定回呼ばれ、これ1回が1stepに相当する。 FixedUpdate関数の呼ばれる頻度で処理しているようで、プロジェクトの設定からFixed Timestepを変更すると変わってしまうため注意が必要。規定だと1秒に50回実行。

CollectObservations, Heuristicの呼ばれる頻度

コンポーネント「Decision Requester」で設定している「Decision Period」の数だけstepが進むと実行される。 既定値の5が設定されている場合、Fixed Timestepが規定値の「0.02」であれば、5/50で1秒当たり10回呼び出される。