ContinuousActions
の中身は、OnActionReceived
メソッド内ではエージェントが行動を取るための決定を受け取る場所です。これは、ML-Agentsの内部で、学習中や推論中にニューラルネットワークが出力したアクションの値が ContinuousActions
に格納され、エージェントにそのアクションが渡されます。
具体的には、以下のようなプロセスで動作しています:
ActionBuffers.ContinuousActions
に格納され、OnActionReceived
メソッドでその値を利用してエージェントが動作します。そのため、ContinuousActions
の中身は、基本的にニューラルネットワークが予測した行動になります。
以下のような流れで、actionBuffers.ContinuousActions[0]
がx方向の移動に関与することを学習します。
ContinuousActions
は、学習アルゴリズム(例えば強化学習のポリシーネットワーク)によって生成される値の配列です。actionBuffers.ContinuousActions[0]
は、エージェントがポリシーネットワークを通じて生成した値を受け取ります。この値は、x方向の移動の強さを表すことになります。actionBuffers.ContinuousActions[0]
から取得した値を使って、エージェントの物理挙動を制御します。float horizontalMovement = actionBuffers.ContinuousActions[0];
Vector3 controlSignal = new Vector3(horizontalMovement, 0, 0);
rBody.AddForce(controlSignal * moveForce);
horizontalMovement
は、エージェントがポリシーネットワークから出力された値です。controlSignal
は、x方向の移動を定義し、rBody.AddForce
を使ってエージェントに力を加えています。actionBuffers.ContinuousActions[0]
を適切な値に設定するようになります。actionBuffers.ContinuousActions[0]
自体には特に指示を書く必要はありません。この値は、学習アルゴリズムによって自動的に生成され、エージェントの動作に反映されます。したがって、コードを書いた段階でactionBuffers.ContinuousActions[0]
がx方向の移動に関連することが決まるわけではなく、学習を通じてエージェントがこの関係を構築していくのです。