LoginSignup
5
2

More than 1 year has passed since last update.

ML_Agentでうまくいかなかったことまとめ

Last updated at Posted at 2022-06-11

まえがき

この記事は下記サイトを参考にUnityで強化学習を行った際に吐かれたエラーをまとめたもので個人的な覚え書きです。
参考サイト

環境
windows11
Unity20203.30f
ml-agents-release_19

目次

1.起こった問題その1:mlagents-learnが実行できない
2.起こった問題その2:yamlが読まれない
3.起こった問題その3:Unityの実行を押しても動作しない

起こった問題その1 mlagents-learnが実行できない

参考サイトの手順7-(2)で

コマンド
mlagents-learn ./config/RollerBall.yaml --run-id=RollerBall-ppo-1

を実行したところ
mlagents-learn : 用語 'mlagents-learn' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
というエラーが吐かれました。
つまりmlagents-learnなんてコマンドないよって話ですね。

解決策

参考サイトの通りにwindows storeのpythonを使用していましたがUnity ML-Agents実践ゲームプログラミングではAnacondaを使用していたのでAnacondaでやったところうまく作動しました。

注意点
windows storeのpythonはpowershellでコマンドを実行しますが、anacondaのcondaコマンドはAnaconda Powershell Prompt (anaconda3)でないと作動しないので注意してください。(1敗)

起こった問題その2 yamlが読まれない

アナコンダで仮想環境を作り下記のコマンドを実行してみました。

コマンド
mlagents-learn ./config/RollerBall.yaml --run-id=RollerBall-ppo-1

すると「mlagents.trainers.exception.TrainerConfigError: There was an error decoding Config file from ./config/RollerBall.yaml. Make sure your file is save using UTF-8」と吐かれました。
簡単に訳すと「RollerBall.yaml読めないんだけどちゃんとUTF-8で書いてる?」ってことです。もちろんUTF-8で書いてますし、コードは参考サイトをコピペしたものなのでどっか書き間違えがあって読めないとかではないです。ですが読めないといわれてます。なんでや

エラー文で検索をかけてみると同じ悩みを抱えている方がいました。

この方はML-Agentsのバージョンを上げると解決したようですが、2022/6/11の時点で最新のrelease_19を使っているので同じ方法は取れませんでした。

解決策

config\ppoファイル内にはサンプルのシーン用の強化学習設定ファイルが転がっています。

path
ml-agents-release_19\config\ppo

こちらのファイルにある3DBall.yamlを指定してmlagents-learnコマンドを実行したところうまく動作しました。こちらの設定ファイルはちゃんと読んでくれるようです。(当たり前ですが)
なので3DBall.yamlをコピーしRollerBall2.yamlと名前を変え、中身の数値を参考サイトのRollerBall.yamlに置き換えを行いました。するとうまく動作し、Unityのロゴが出てきました。

起こった問題その3 Unityの実行を押しても動作しない

うまくmlagents-learnが作動し、Unityのロゴが出てきたためUnityの実行ボタンを押したところ
mlagents.trainers.exception.TrainerConfigError: The behavior name Roll_Ball has not been specified in the trainer configuration. Please add an entry in the configuration file for Roll_Ball, or set default_settings.」と吐かれました。
つまりRoll_Ballなんてないぞってことですね。Roll_Ballってどっから出てきた?

解決策

エラー文で検索をかけたところ同じ同じ悩みを抱えている方がいました。

この方の自己解決によると、yamlの2行目をBrainの名前と一致させたらできるようになるとのことです。つまりUnityでRollerAgentにコンポーネントしたBehavior Parametersの名前がyamlと一致してないのが原因のようでした。自身のプロジェクトをのぞいてみるとBehavior NameがRoll_Ballになってました。

あとがき

以上が自分が吐かれたエラーのまとめです。誰かの助けとなれば幸いです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2