質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1060閲覧

AddVectorObs()を使いたい

Addinsell

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/02 17:42

前提・実現したいこと

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
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

ML-Agentsのことはあまり分かりませんが、少し調べてみたところusing不足の可能性が高そうです。
using MLAgents; を追加してみて下さい。

###参考
参考1
参考2

投稿2020/11/03 01:08

Automatic9045

総合スコア313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

sensorを用いて解決しました。

public override void CollectObservations(VectorSensor sensor) { // Target and Agent positions sensor.AddObservation(Target.localPosition); sensor.AddObservation(this.transform.localPosition); // Agent velocity sensor.AddObservation(rBody.velocity.x); sensor.AddObservation(rBody.velocity.z); }

投稿2020/11/06 15:03

Addinsell

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問