前提・実現したいこと
ML-Agentsを用いて追いかけっこを強化学習させたいと考えています。
Agentを学習させるためCollectObservation()を実装しようとしていましたが、以下のようなエラーメッセージが出てしまいました。
初心者なので足りない部分ばかりで申し訳ありませんが、ご教示いただけますと幸いです。
発生している問題・エラーメッセージ
現在のコンテキストに 'AddVectorObs' という名前は存在しません。 [Assembly-CSharp]
該当のソースコード
C#
1using UnityEngine; 2using Unity.MLAgents; 3 4public class RollerAgent : Agent 5{ 6 Rigidbody rBody; 7 GameObject cameraCount; 8 target script; 9 public bool cameraCount_a = false; 10 void Start() 11 { 12 rBody = GetComponent<Rigidbody>(); 13 cameraCount = GameObject.Find("Target"); //targetスクリプトから値をひぱってくる 14 script = cameraCount.GetComponent<target>(); 15 Debug.Log(script); 16 } 17 public Transform Target; 18 public Transform Wall; 19 public Transform kabe; 20 public target target; 21 22 23 public override void OnEpisodeBegin() 24 { 25 this.rBody.angularVelocity = Vector3.zero; 26 this.rBody.velocity = Vector3.zero; 27 28 //Move the target to new spot 29 Target.localPosition = new Vector3(Random.value * 18 - 9, 0.5f, Random.value * 8 - 4); 30 } 31 32 void Update () { 33 34 Debug.Log(cameraCount_a); 35 36 if(cameraCount_a) 37 { 38 Debug.Log("見えています"); 39 cameraCount_a = false; 40 } 41 42 else { 43 Debug.Log("見えません"); 44 } 45 46 if (Input.GetKey(KeyCode.W)) 47 { 48 transform.Translate(0f, 0f, 0.1f); 49 } 50 if (Input.GetKey(KeyCode.S)) 51 { 52 transform.Translate(0f, 0f, -0.1f); 53 } 54 if (Input.GetKey(KeyCode.A)) 55 { 56 transform.Translate(-0.1f, 0f, 0f); 57 } 58 if (Input.GetKey(KeyCode.D)) 59 { 60 transform.Translate(0.1f, 0f, 0f); 61 } 62 63 } 64 65 public void CollectObservations() 66 { 67 // Target and Agent positions 68 AddVectorObs(Target.position); 69 AddVectorObs(this.transform.position); 70 71 // Agent velocity 72 AddVectorObs(rBody.velocity.x); 73 AddVectorObs(rBody.velocity.z); 74 } 75 76 //指定した座標に向かって移動する 77 Vector3 direction = new Vector3(0f, 10f, 10f); 78 float speed = 1.0f; 79 80 public void MoveAgent(float[] act) 81 { 82 var dirToGo = Vector3.zero; 83 var rotateDir = Vector3.zero; 84 85 var action = Mathf.FloorToInt(act[0]); 86 switch (action) 87 { 88 case 1: 89 dirToGo = transform.forward * 1f; 90 break; 91 case 2: 92 dirToGo = transform.forward * -1f; 93 break; 94 case 3: 95 rotateDir = transform.up * 1f; 96 break; 97 case 4: 98 rotateDir = transform.up * -1f; 99 break; 100 } 101 transform.Rotate(rotateDir, Time.deltaTime * 200f); 102 rBody.AddForce(dirToGo * 2f, ForceMode.VelocityChange); 103 } 104 105 public void AgentAction(float[] vectorAction) 106 { 107 MoveAgent(vectorAction); 108 } 109 110 void OnCollisionStay(Collision collision) 111 { 112 if(collision.gameObject.tag == "kabetag") 113 { 114 AddReward(-0.1f); 115 Debug.Log("Hit" + collision.gameObject.tag); // ログを表示する 116 117 } 118 } 119 void OnCollisionEnter(Collision collision) 120 { 121 if(collision.gameObject.name == "Target") 122 { 123 AddReward(5.0f); 124 Debug.Log("TargetHit"); // ログを表示する 125 EndEpisode(); 126 } 127 } 128 129 void FixedUpdate() 130 { 131 AddReward(-0.001f); 132 } 133 134 135 136 137 138 // Start is called before the first frame update 139 public override void Heuristic(float[] actionsOut) 140 { 141 actionsOut[0] = Input.GetAxis("Horizontal"); 142 actionsOut[1] = Input.GetAxis("Vertical"); 143 } 144 145}
補足情報(FW/ツールのバージョンなど)
Ml-agents(ver1.0.2)Unity2019.3.13f1
{
"resource": "/C:/Users//ml-agents/RollerBall/Assets/RollerAgent.cs",
"owner": "csharp",
"code": "CS0103",
"severity": 8,
"message": "現在のコンテキストに 'AddVectorObs' という名前は存在しません。 [Assembly-CSharp]",
"source": "csharp",
"startLineNumber": 73,
"startColumn": 9,
"endLineNumber": 73,
"endColumn": 21
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。