【緊急】強化学習の際​のmemoryブロッ​クのステップ遅れにつ​いて

2 次查看(过去 30 天)
拓生 香山
拓生 香山 2021-12-8
お世話になっております。
memoryブロックのステップ遅れについて質問があります。
現在、MATLAB/Simulinkを通じて強化学習を行っています。
agentブロックからactionを受け渡す際に以下のようなエラーが発生します。
----------------------------------------------------------------------------------------------------------
エラー: rl.env.SimulinkEnvWithAgent>localHandleSimoutErrors (行 668)
'EAHEs/simulation/Mdl_surf_RF' の入力端子 (1) はループ内にあります。
---------------------------------------------------------------------------------------------------------
このため、例題などを確認すると、actionから環境側に受け渡す際にmemoryブロックが接続されているおり、
同様に接続を行うと解析が流れるようになりました(図)。
ただ、このブロックを使うと、初期値を入力する必要があるため、
agent側が選択した行動と環境側から返答される状態値が1ステップずれてしまうのではないかと考えました。
実際にmemoryブロックの前後でactionをmatファイルで確認したところ、1ステップ分、ずれていました。
※Unit Delayブロックでも同様の現象が発生しました。
上記のような、行動が1ステップ遅れる現象を改善する方法はありますでしょうか。
もし、memoryブロックを使わなくても解析が流せるのであれば、方法をご教授頂きたいです。
可能であれば、お早めに回答いただけると幸いです。何卒宜しくお願い致します。

采纳的回答

Toshinobu Shintai
Toshinobu Shintai 2021-12-8
モデルを見ていないので明確には申し上げられませんが、おそらく代数ループが発生しているのでは、と思います。
強化学習のエージェントブロック(RL Agent)は離散時間で動作していますので、連続時間のモデルと接続する際には遅延要素は必ず必要になります。あるべきモデリングとしては、離散時間と連続時間の間をRate Transitionブロックで繋ぐ方法をおすすめします。
  3 个评论
Toshinobu Shintai
Toshinobu Shintai 2021-12-8
離散時間のシステムが実行していない時、つまり前回実行時と次回実行時の間は、前回実行時の値で出力が固定されます。先程のコメントにも書きましたが、何らかの形で遅延は必ず発生します。理解を深めたい場合は、「離散時間システムの制御」を説明した教科書や動画などをご確認ください。
連続時間から離散時間に渡すRate Transitionブロックは0.02、離散時間から連続時間に渡す方は-1の設定でよいです。
時刻0の時点で連続時間のモデルへ入力するために、memoryブロックで指定したような初期値は必ず必要になります。
拓生 香山
拓生 香山 2021-12-8
ご返信ありがとうございます。
承知しました。私の知識不足のようです。
離散時間システムの制御に関して勉強し、理解を深めた後に、
もう一度考えていきたいと思います。
お時間割いていただきありがとうございました。

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!