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

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

新規登録して質問してみよう
ただいま回答率
85.46%
強化学習

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

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Unity

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

Q&A

0回答

1669閲覧

Unity ML-Agentsにてターゲットを複数把握したエージェントが近くのターゲットへ向かうように設定したいのですが、エージェントが迷ってしまいなかなかターゲットへ向かわず困っています。

sssssss3333333

総合スコア0

強化学習

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

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Unity

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

0グッド

0クリップ

投稿2020/10/17 16:42

編集2020/10/18 06:58

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

こんにちは、UnityでML-Agentsを触り始めて3か月程度の初心者です。 現在、火災が発生した際に人が避難する様子をシミュレーションするために、その練習として人(エージェント)が避難口(ターゲット)を見つけるとそこへ向かい、到達すると避難完了というような仕組みを作っています。 Unityではじめる機械学習強化学習Unity ML-Agents実践ゲームプログラミングv1.1対応版という本を教材として、強化学習を進めていたのですが、どうしても解決できない問題が出てきたので質問させていただきます。 観察はできるだけ人間の感覚に近いものを使おうと考え、RayPerceptionSensor3Dを用いているのですが、エージェントが複数のターゲットを補足したときに迷ってしまい、なかなかターゲットにたどり着かないという状況になっています(根気よく待てばターゲットのほうへ向かってくれますが、必ずしも一番近いターゲットとは限らないです)。 最終的には火災時の避難シミュレーションが目的なので時間をかけず素早くターゲットへ向かってほしいところなのですが、どうもうまくいきません。 例えばRayPerceptionSensor3Dを用いて把握したターゲットと、エージェントとの距離を取得してできるだけ距離の近いほうのターゲットへ迷わずに向かうというような方法があれば教えていただけないでしょうか? もしくは、学習方法が悪いのではないか、この方法を使ったほうが良いのではないかなどの指摘があればお願いしたいです。 何卒宜しくお願い致します。

該当のソースコード

C#

1using System.Collections.Generic; 2using UnityEngine; 3using Unity.MLAgents; 4using Unity.MLAgents.Sensors; 5 6// RollerAgent 7public class Normal : Agent 8{ 9 Rigidbody rBody; 10 11 // 初期化時に呼ばれる 12 public override void Initialize() 13 { 14 this.rBody = GetComponent<Rigidbody>(); 15 } 16 17 // エピソード開始時に呼ばれる 18 public override void OnEpisodeBegin() 19 { 20 // RollerAgentの位置と速度をリセット 21 this.rBody.angularVelocity = Vector3.zero; 22 this.rBody.velocity = Vector3.zero; 23 this.transform.localPosition = new Vector3(Random.value * 36 - 18, 0.5f, Random.value * 36 - 18); 24 25 } 26 27 // 行動実行時に呼ばれる 28 public override void OnActionReceived(float[] vectorAction) 29 { 30 // RollerAgentに力を加える 31 Vector3 controlSignal = Vector3.zero; 32 controlSignal.x = vectorAction[0]; 33 controlSignal.z = vectorAction[1]; 34 rBody.AddForce(controlSignal * 25); 35 36 // RollerAgentが床から落下した時 37 if (this.transform.localPosition.y < 0) 38 { 39 EndEpisode(); 40 } 41 42 //スペースキーを押したらエピソード終了 43 if (Input.GetKey(KeyCode.Space)) 44 { 45 EndEpisode(); 46 } 47 48 } 49 50 private void OnCollisionEnter(Collision collision) 51 { 52 //ゲームタグ"Target"にぶつかったら報酬 53 if (collision.gameObject.CompareTag("Target")) 54 { 55 AddReward(1.0f); 56 EndEpisode(); 57 } 58 } 59 60 public void FixedUpdate() 61 { 62 AddReward(-0.001f); 63 } 64 // ヒューリスティックモードの行動決定時に呼ばれる 65 public override void Heuristic(float[] actionsOut) 66 { 67 actionsOut[0] = Input.GetAxis("Horizontal"); 68 actionsOut[1] = Input.GetAxis("Vertical"); 69 } 70} 71 72 73```###学習用のPPOファイル 74behaviors: 75 Normal: 76 trainer_type: ppo 77 hyperparameters: 78 batch_size: 10 79 buffer_size: 100 80 learning_rate: 0.0003 81 beta: 0.005 82 epsilon: 0.2 83 lambd: 0.95 84 num_epoch: 3 85 learning_rate_schedule: linear 86 network_settings: 87 normalize: true 88 hidden_units: 128 89 num_layers: 2 90 vis_encode_type: simple 91 reward_signals: 92 extrinsic: 93 gamma: 0.99 94 strength: 1.0 95 keep_checkpoints: 5 96 max_steps: 500000 97 time_horizon: 64 98 summary_freq: 1000 99 threaded: true 100
### 試したこと 複数あるターゲットの大きさや位置を変えてみる →複数あるターゲット同士にある程度の距離があると迷わずに向かっていく ターゲットを複数でなく一つにしてみる →迷わずに一直線にターゲットへ向かっていく 時間が経つごとにマイナスの報酬を与えてみる →特に変化なし ### 補足情報(FW/ツールのバージョンなど) Unityのバージョン:2019.4.1f1 mlagentsのバージョン:Release8 以下学習結果のグラフです。 上からCumulative Reward,Episode Lengthのグラフとなっています。 ![イメージ説明](92e371b364bdb81bbe1f6c616b81172b.png) 以下学習モデルです。 青色のエージェントが4隅の黄色いターゲットへ向かっていく想定をしています。 ![イメージ説明](593ea4e354d5bbaade596c0acfddd8be.jpeg) ![イメージ説明](fcc3585fc29cd83221feb141e344eb73.jpeg)

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

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

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

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

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

ayousanz

2020/10/18 04:50

コードが見にくいので,シンタックスハイライトされるようにしてください また情報が少し少ないと思うので学習のグラフ等を載せたほうがいいと思います
sssssss3333333

2020/10/18 06:59

早速のご指摘ありがとうございます。 いくつか情報の追記をさせていただきました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問