【Unity】UnityAgentsException【エラー】

バージョン

ml-agents 0.6

単純なミスかな・・・?

まだエラーがある・・・

コード

とりあえずエラーの翻訳

UnityAgentsException: The Communicator was unable to connect. Please make sure the External process is ready to accept communication with Unity.

コミュニケータが接続できませんでした。外部プロセスがUnityとの通信を受け入れる準備ができていることを確認してください。

一体どういう意味なんだ・・・

とりあえずGoogle検索

参考 GoogleThe Communicator was unable to connect. Please make sure the External process is ready to accept communication with Unity.

とりあえずコマンドプロンプト起動すれば良さそう

別のエラーが出た・・・。

コード

とりあえずエラーの翻訳

Vector Observation size mismatch between continuous agent RollerAgent and brain RoolerBallBrain. Was Expecting 1 but received 8.

連続エージェントRollerAgentとブレインRoolerBallBrainの間のベクトル観測サイズの不一致。 1を期待していたが8を受け取った。

つまり・・・?

とりあえず検索

参考 Vector Observation size mismatch between continuous agent RollerAgent and brain RoolerBallBrain. Was Expecting 1 but received 8.Google

 

DiscreteをContiniousに変えても変わらず・・・

そもそもDiscreteとContinousの違いってなんだっけ

参考 discrete continuous ml agentGoogle

 

Discreteの場合、配列には1つの要素しか含まれません。つまりact[0]に値が格納され、Action Sizeの内のいずれかの値が来ます。

Continuousは複数の要素を受け取れます。配列の長さはAction Sizeと同じで、複数の支持を同時に受け取れます。

参考 【Unity】Unityで機械学習する「ML-Agent」を色々と試して得た知見とか - テラシュールブログテラシュールブログ

なるほど?

もう一回コードを見直してみよう

コード
・・・?

ActionSize辺りをいじればいい・・・?

sizeが2なのでvectorActionは2つって書いてある・・・ということは?

 

変わらん・・・でもキューブは移動したな・・・?初めて動いた気がする

エラーメッセージは変わってないな・・・

UnityAgentsException: Vector Observation size mismatch between continuous agent RollerAgent and brain RoolerBallBrain. Was Expecting 1 but received 8.

あ・・・Vector Observationって書いてある・・・

う・・・動いた!!!こいつ動くぞ!!!

でもすげー頭悪いな・・・50000回は練習したぞ

はあ・・・とりあえずStackedVectorsってなんだろ

参考 stacked vectors ml agentsGoogle

 

(speaking under correction) Let’s say your observation space is 3 big e.g. an x,y and z value. if you set stacked vectors to 2, it means that your observation space is now actually 6 vectors: the current x,y,z as well as the previous update step’s x,y,z. In this example, it might allow the agent to make inferences based on the velocity of what is being observed.

参考 What is the Brain stacked vectors value? · Issue #566 · Unity-Technologies/ml-agents · GitHubGitHub

(補正下で話す)あなたの観測空間は3であるとしましょう。 x、y、zの値積み上げベクトルを2に設定すると、観測空間は実際には6つのベクトルになります。つまり、現在のx、y、zと、前の更新ステップのx、y、zです。この例では、エージェントは観測されているものの速度に基づいて推論を行うことができます。

うーん・・・つまり・・・?よくわからん

StackedVectorsは2でいいのか?

・・・違うな・・・

設定書いてあるじゃん・・・

 

参考 UnityのML-Agentsで、新しい学習環境を作成する - tanaka's Programming Memotanaka's Programming Memo

うーん・・・でもうまく学習しないな・・・

5万回じゃ足りんかったか・・・

学習の設定をします。デフォルトの5万ステップだと、あまり学習の成果が見られません。3D Ballのサンプルは12個のエージェントを同時にトレーニングしていたので2万ステップ程度で効果が表れましたが、こちらは同時に1つのエージェントしかトレーニングしないので、その10倍の20万ステップは最低でも学習させたいところです。余裕をもって、50万ステップに設定します。 参考 UnityのML-Agentsで、新しい学習環境を作成する - tanaka's Programming Memotanaka's Programming Memo

 

  • ML-Agentsのリポジトリーからダウンロードしたml-agents-masterフォルダー内のconifg/trainer_config.yamlを何らかのテキストエディターで開きます
  • 22行目のcuriosity_enc_size: 128という行と、24行目のBananaBrain:の間に、以下を追加します
  1. RollerBallBrain:
  2. normalize: true
  3. max_steps: 5.0e5
  • 上書き保存します

これで、UnityのRollerBallBrainという名前のブレインをトレーニングする場合、以下が有効になります(このためにBrainの名前をRollerBallBrainに変更しました)。

  • 入力データを正規化(normalize)する
  • ステップ数を50万回(5.0e5は、5x10^5の意味)
参考 UnityのML-Agentsで、新しい学習環境を作成する - tanaka's Programming Memotanaka's Programming Memo

ふむふむ・・・なるほど・・・あれ・・・50万回にならんぞ・・・?

インデントを揃えてなかったから・・・?いや違うな・・・

名前か・・・?ああ綴り間違いか・・・_| ̄|○

(俺もだいぶしつこくなったなあ・・・前はすぐにエラーばっかだと諦めてたのに)
(そういやhttpsじゃないリンクって貼っていいのかな・・・)

こいつ直線ばっか動くな・・・(10万回ぐらい)

ほんとにうまくいくんかな・・・変わってないぞ・・・(20万回ぐらい)

変わらん・・・(30万回ぐらい)

・・・

止まったし・・・直線ばっか動くAIになったぞ・・・

設定が悪いかもしれんけどもう一回やろう・・・

・・・1万回超えた辺りから直線しか進まなくなるなあ

近づかなかったらペナルティと近づいたリワードを2倍にしてみよう・・・

うーん・・・なんかすぐ死ぬなあ・・・死んだバツを2倍にしてみよう・・・

だめだ・・・すぐ自殺する・・・ひどくなった・・・

接触したリワードを2倍にするか・・・違うなあ・・・

転落したバツも2倍にするか・・・うまくいかんなあ・・・

(神様もこんなノリで世界作ってんのかな・・・)

コードが違ってた?

コード

学習するエージェントも複製した。

割といい感じ。

できた!

よかったよかった

さて次は何をしようか・・・

コメントを残す