動作確認のため再生モードにすると0の場合の行動のみを繰り返してしまいます。(本当は0~6が欲しい)
Behavior Parameters は
Discrete Branches → 1
Branch 0 Size →7
としております。
ML-agents release12です。
本当に初心者なので簡単なところを見落としている可能性があります。少しでも可能性があったら教えてください。
追記
自分なりに調べて上のようなコードから下のコードに変えましたが変わりはありませんでした。無駄の多い汚いコードかもしれませんがよろしくお願いします。
C#
1public override void OnActionReceived(float[]vectorAction) 2{ 3int AgentX =(int)vectorAction[0]; 4 5...以下値を用いた関数等 6
C#
1//Agentの動作 2//別のスクリプトからRequestDecisionを送っています 3 4namespace Conect4Agent 5{ 6 7 public class GameAgent : Agent 8 { 9 EnvironmentParameters m_ResetParams; 10 private BehaviorParameters Parameters => _parameters ?? (_parameters = gameObject.GetComponent<BehaviorParameters>()); 11 private BehaviorParameters _parameters; 12 public int TeamId => Parameters.TeamId; 13 14 public override void Initialize() 15 { 16 m_ResetParams = Academy.Instance.EnvironmentParameters; 17 } 18 19 public override void OnEpisodeBegin() 20 { 21 } 22 23 public override void CollectObservations(VectorSensor sensor) 24 { 25 } 26 27 public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask) 28 { 29 { 30 //最上段 31 var actionIndices = new List<int> { }; 32 for (var i = 0; i < 7; i++) 33 { 34 if (GameAI.squares[i, 6] != 0) 35 { // 自分が置けない場所 36 37 int mask = i + 42; 38 actionIndices.Add(mask); 39 } 40 } 41 actionMask.WriteMask(0, actionIndices); 42 } 43 44 } 45 46 public void MoveAgent(ActionSegment<int> act) 47 { 48 GameAI.AgentX = act[0]; 49 } 50 51 public override void OnActionReceived(Unity.MLAgents.Actuators.ActionBuffers actions) 52 { 53 MoveAgent(actions.DiscreteActions); 54 55 if (GameAI.CheckWinLose(GameAI.RED) == GameAI.RED) 56 { 57 if (TeamId == 0) 58 { 59 SetReward(1.0f); 60 } 61 else if (TeamId == 1) 62 { 63 SetReward(-1.0f); 64 } 65 EndEpisode(); 66 } 67 else if (GameAI.CheckWinLose(GameAI.GREEN) == GameAI.GREEN) 68 { 69 if (TeamId == 0) 70 { 71 SetReward(-1.0f); 72 } 73 else if (TeamId == 1) 74 { 75 SetReward(1.0f); 76 } 77 EndEpisode(); 78 } 79 else if (GameAI.CheckWinLose(GameAI.DROW) == GameAI.DROW) 80 { 81 SetReward(0f); 82 EndEpisode(); 83 } 84 } 85 86 } 87}
あなたの回答
tips
プレビュー