Unityと、ml-agentsを用い、機械学習を勉強しているのですが、
「'RollerAgent.OnActionReceived(float[])':no suitable method found to override」,
「「'RollerAgent.Heuristic(float[])':no suitable method found to override」」
というエラーメッセージ表示されました。
どのようにすればこのエラーは消えるのかご教授お願いいたします。
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Unity.MLAgents; 5using Unity.MLAgents.Sensors; 6 7//RollerAgent 8 9public class RollerAgent : Agent 10{ 11 public Transform target; 12 Rigidbody rBody; 13 14 //初期化 15 public override void Initialize() 16 { 17 this.rBody = GetComponent<Rigidbody>(); 18 } 19 20 //エピソード開始時に呼ばれる 21 public override void OnEpisodeBegin() 22 { 23 //RollerAgentが床から落下しているとき 24 if (this.transform.position.y < 0) 25 { 26 //RollerAgentの位置と速度をリセット 27 this.rBody.angularVelocity = Vector3.zero; 28 this.rBody.velocity = Vector3.zero; 29 this.transform.position = new Vector3(0.0f, 0.5f, 0.0f); 30 } 31 32 //Targetの位置のリセット 33 target.position = new Vector3(Random.value * 8 - 4, 0.5f, Random.value * 8 - 4); 34 } 35 36 //観察取得時に呼ばれる 37 public override void CollectObservations(VectorSensor sensor) 38 { 39 sensor.AddObservation(target.position); //TargetのXYZ座標 40 sensor.AddObservation(this.transform.position); //RollerAgentのXYZ座標 41 sensor.AddObservation(rBody.velocity.x); //RollerAgentのX速度 42 sensor.AddObservation(rBody.velocity.y); //RollerAgentのZ速度 43 } 44 45 public override void OnActionReceived(float[] vectorAction) 46 { 47 //RollerAgentに力を加える 48 Vector3 controlSignal = Vector3.zero; 49 controlSignal.x = vectorAction[0]; 50 controlSignal.y = vectorAction[1]; 51 rBody.AddForce(controlSignal * 10); 52 53 //RollerAgentがTargetの位置に到着したとき 54 float distanceToTarget = Vector3.Distance(this.transform.position, target.position); 55 56 if (distanceToTarget < 1.42f) 57 { 58 AddReward(1.0f); 59 EndEpisode(); 60 } 61 62 //RollerAgentが床から落下したとき 63 if (this.transform.position.y < 0) 64 { 65 EndEpisode(); 66 } 67 } 68 69 //ヒューリスティックモードの行動決定時に呼ばれる。 70 public override void Heuristic(float[] actionsOut) 71 { 72 actionsOut[0] = Input.GetAxis("Horizontal"); 73 actionsOut[1] = Input.GetAxis("Vertical"); 74 } 75} 76
回答2件
あなたの回答
tips
プレビュー