Unity_Lesson

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を使ってエージェントに力を加えています。

学習プロセス

まとめ

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