Main Content

RL Agent

強化学習エージェント

  • RL Agent block

ライブラリ:
Reinforcement Learning Toolbox

説明

RL Agent ブロックを使用して、Simulink® で強化学習エージェントのシミュレーションと学習を行います。MATLAB® ワークスペースに保存されているエージェント、または rlACAgent オブジェクトや rlDDPGAgent オブジェクトなどのデータ ディクショナリにブロックを関連付けます。ブロックを接続して、観測値と計算された報酬を受け取るようにします。たとえば、次の rlSimplePendulumModel モデルのブロック線図について考えます。

RL Agent ブロックの [observation] 入力端子は、振子の瞬間的な角度と角速度から派生した信号を受け取ります。[reward] 端子は、同じ 2 つの値と適用されたアクションから計算された報酬を受け取ります。システムに適した観測値と報酬の計算を構成します。

ブロックはエージェントを使用し、提供された観測値と報酬に基づいてアクションを生成します。[action] 出力端子をシステムの適切な入力に接続します。たとえば、rlSimplePendulumModel[action] 出力端子は、振子システムに適用されるトルクです。このモデルの詳細については、振子の振り上げと平衡化のための DQN エージェントの学習を参照してください。

Simulink で強化学習エージェントに学習させるには、Simulink モデルから環境を生成します。次に、その環境に対して学習させるエージェントを作成して構成します。詳細については、Create Custom Simulink Environmentsを参照してください。環境を使用して train を呼び出すと、train はモデルをシミュレーションし、ブロックに関連付けられたエージェントを更新します。

端子

入力

すべて展開する

この端子は環境からの観測信号を受信します。観測信号は、測定値またはその他の瞬間的なシステム データを表します。複数の観測値がある場合は、Mux ブロックを使用してそれらをベクトル信号に結合できます。非バーチャル バス信号を使用するには、bus2RLSpec を使用します。

この端子は、観測データに基づいて計算された報酬信号を受け取ります。報酬信号は、長期報酬の期待値を最大化するために、エージェントの学習中に使用されます。

この信号を使用して、学習エピソードを終了する条件を指定します。エピソードの終了条件を判定するには、システムに適したロジックを構成しなければなりません。応用例の 1 つは、明らかに順調に進んでいるエピソード、またはうまくいっていないエピソードを終了することです。たとえば、エージェントが目標に到達した場合、または回復不能なほど目標から離れた場合、エピソードを終了できます。

この信号を使用して、ブロックに外部アクションを提供します。この信号は人間の専門家による制御アクションとすることができ、安全な学習アプリケーションまたは模倣学習アプリケーションに使用できます。[use external action] 信号の値が 1 の場合、RL Agent ブロックは [action] 出力端子を介して [external action] 信号を環境に渡します。また、ブロックは外部アクションを使用し、結果の観測値と報酬に基づいて、エージェントの方策を更新します。

依存関係

この端子を有効にするには、[外部アクション入力] パラメーターを選択します。

用途によっては、環境に適用されるアクションが RL Agent ブロックから出力されるアクションと異なる場合があります。たとえば、Simulink モデルはアクション出力信号に Saturation ブロックを含めることができます。

このような場合に Off-Policy エージェントの学習結果を改善するには、この入力端子を有効にし、環境に実際に適用される実際のアクション信号を 1 サンプル時間遅延させて接続します。例については、Custom Training Loop with Simulink Action Noiseを参照してください。

メモ

[last action] 端子は、Off-Policy エージェントでのみ使用する必要があります。そうでない場合、学習で予期しない結果が生じる可能性があります。

依存関係

この端子を有効にするには、[最後のアクション入力] パラメーターを選択します。

この信号を使用して、[external action] 信号を環境に渡します。

[use external action] 信号の値が 1 の場合、ブロックは [external action] 信号を環境に渡します。また、ブロックは外部アクションを使用してエージェントの方策を更新します。

[use external action] 信号の値が 0 の場合、ブロックは [external action] 信号を環境に渡さず、方策の更新に外部アクションを使用しません。代わりに、ブロックからのアクションはエージェントの方策からのアクションを使用します。

依存関係

この端子を有効にするには、[外部アクション入力] パラメーターを選択します。

出力

すべて展開する

観測値と報酬の入力に基づいて、エージェントによって計算されたアクション。この端子を環境の入力に接続します。非バーチャル バス信号を使用するには、bus2RLSpec を使用します。

メモ

rlACAgentrlPGAgent、または rlPPOAgent (rlContinuousGaussianActor オブジェクトを使用するもの) などの連続行動空間エージェントは、アクション仕様によって設定された制約を適用しません。このような場合、環境内で行動空間の制約を適用しなければなりません。

シミュレーション中の報酬信号の累積和。この信号を観測または記録して、累積報酬が時間の経過とともにどのように変化するかを追跡します。

依存関係

この端子を有効にするには、[累積報酬出力] パラメーターを選択します。

パラメーター

すべて展開する

MATLAB ワークスペースまたはデータ ディクショナリに保存されているエージェント オブジェクト (rlACAgent オブジェクトや rlDDPGAgent オブジェクトなど) の名前を入力します。エージェント オブジェクトの詳細については、強化学習エージェントを参照してください。

RL Agent ブロックが Triggered Subsystem (Simulink)Function-Call Subsystem (Simulink) などの条件付き実行サブシステム内にある場合、ブロックがその親サブシステムのサンプル時間を継承できるように、エージェント オブジェクトのサンプル時間を -1 に指定しなければなりません。

プログラムでの使用

ブロック パラメーター: Agent
型: string、文字ベクトル
既定: "agentObj"

ブロック関数 generatePolicyBlock を呼び出して、[エージェント オブジェクト] で指定されたエージェントの greedy 方策を実装する Policy ブロックを生成します。ブロックは、greedy 方策を生成するため、方策ブロックを生成する前にエージェントの UseExplorationPolicy プロパティを false に設定します。

生成されたブロックは新しい Simulink モデルに追加され、方策データは現在の作業フォルダーの MAT ファイルに保存されます。

このパラメーターを選択して、ブロックの入力端子 [external action] および [use external action] を有効にします。

プログラムでの使用

ブロック パラメーター: ExternalActionAsInput
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

このパラメーターを選択して、ブロックの入力端子 [last action] を有効にします。

プログラムでの使用

ブロック パラメーター: ProvideLastAction
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

このパラメーターを選択して、ブロックの出力 [cumulative reward] を有効にします。

プログラムでの使用

ブロック パラメーター: ProvideCumRwd
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

観測データ型を適用するには、このパラメーターを選択します。ここで、[observation] 入力端子に接続された信号のデータ型がエージェントの ObservationInfo プロパティのデータ型と一致しない場合、ブロックは信号を正しいデータ型にキャストしようとします。データ型をキャストできない場合、ブロックはエラーを生成します。

厳密なデータ型を適用すると、次のことができます。

  • ブロックが正しいデータ型を取得していることを検証する。

  • 他のブロックが [observation] 端子からデータ型を継承できるようにする。

プログラムでの使用

ブロック パラメーター: UseStrictObservationDataTypes
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

バージョン履歴

R2019a で導入