メインコンテンツまでスキップ

2_3_2

ContinuousActions の中身は、OnActionReceived メソッド内ではエージェントが行動を取るための決定を受け取る場所です。これは、ML-Agentsの内部で、学習中や推論中にニューラルネットワークが出力したアクションの値が ContinuousActions に格納され、エージェントにそのアクションが渡されます。

具体的には、以下のようなプロセスで動作しています:

  1. 学習や推論フェーズでは、ML-Agentsがニューラルネットワークを使って、現在の状態(観察データ)に基づいて行動を決定します。
  2. 決定された行動が ActionBuffers.ContinuousActions に格納され、OnActionReceived メソッドでその値を利用してエージェントが動作します。

そのため、ContinuousActions の中身は、基本的にニューラルネットワークが予測した行動になります。



以下のような流れで、actionBuffers.ContinuousActions[0]がx方向の移動に関与することを学習します。

学習の流れ

  1. ContinuousActionsの初期化:

    • ContinuousActionsは、学習アルゴリズム(例えば強化学習のポリシーネットワーク)によって生成される値の配列です。
    • これらの値は、エージェントの行動(例えば、動きやジャンプなど)を決定するために使用されます。
  2. アクションの決定:

    • 学習プロセスの中で、エージェントは環境からの報酬を最大化するために最適なアクションを決定することを学びます。
    • actionBuffers.ContinuousActions[0]は、エージェントがポリシーネットワークを通じて生成した値を受け取ります。この値は、x方向の移動の強さを表すことになります。
  3. アクションの適用:

    • 以下のコードでは、actionBuffers.ContinuousActions[0]から取得した値を使って、エージェントの物理挙動を制御します。
    float horizontalMovement = actionBuffers.ContinuousActions[0];
    Vector3 controlSignal = new Vector3(horizontalMovement, 0, 0);
    rBody.AddForce(controlSignal * moveForce);
    • horizontalMovementは、エージェントがポリシーネットワークから出力された値です。
    • controlSignalは、x方向の移動を定義し、rBody.AddForceを使ってエージェントに力を加えています。

学習プロセス

  • エージェントが環境と相互作用し、行動の結果として得られる報酬(成功や失敗に基づく)をもとに、ポリシーネットワークは出力を調整します。
  • これにより、エージェントは最適な行動を学習し、例えばx方向に移動するためにactionBuffers.ContinuousActions[0]を適切な値に設定するようになります。

まとめ

  • 自動的な学習: actionBuffers.ContinuousActions[0]自体には特に指示を書く必要はありません。この値は、学習アルゴリズムによって自動的に生成され、エージェントの動作に反映されます。
  • 環境からのフィードバック: エージェントは報酬を受け取りながら、自分の行動を最適化していきます。これが強化学習の基本的なプロセスです。

したがって、コードを書いた段階でactionBuffers.ContinuousActions[0]がx方向の移動に関連することが決まるわけではなく、学習を通じてエージェントがこの関係を構築していくのです。