Simulink統合環境モデルを作成する
参照モデルに適切な操作入力ポート、観測出力ポート、およびスカラー報酬出力ポートがある場合、参照モデルとRLAgentブロックを含むSimulinkモデルを自動的に作成できます。この関数は、モデルの環境オブジェクト、操作仕様、および観測仕様を返します。
createIntegratedEnv
強化学習用のSimulinkモデルを作成するための環境として、参照モデルを使用します。
文法
env = createIntegratedEnv(refModel、newModel)
[env、agentBlock、obsInfo、actInfo] = createIntegratedEnv(___)
[___] = createIntegratedEnv(___、Name、Value)
説明
env = createIntegratedEnv(refModel、newModel)は、newModelで指定された名前でSimulink®モデルを作成し、このモデルの強化学習環境オブジェクトenvを返します。新しいモデルにはRLAgentブロックが含まれており、参照モデルrefModelは、このブロックで指定されたエージェントをトレーニングするための強化学習環境として使用されます。
[env、agentBlock、obsInfo、actInfo] = createIntegratedEnv(___)は、新しいモデルのRL Agentブロックのブロックパスと、参照モデルobsInfoおよびactInfoの観測およびアクションデータの仕様を返します。
[___] = createIntegratedEnv(___、Name、Value)は、1つ以上のName、Valueを使用してポート、観測値、および操作情報を指定し、モデルと環境のインターフェースを作成します。
インスタンス
Simulinkモデルから環境を作成する
この例は、createIntegratedEnvを使用して、エージェントが対話する必要のあるシステムのSimulinkモデルから環境オブジェクトを作成する方法を示しています。このようなシステムは通常、ファクトリ、開ループシステム、または参照システムと呼ばれ、エージェントを含む(統合された)システム全体は通常、閉ループシステムと呼ばれます。
モデルを開きます。
open_system('rlFlyingRobotEnv');
状態変数とサンプリング時間を初期化します。
% initial model state variables
theta0 = 0;
x0 = -15;
y0 = 0;
% sample time
Ts = 0.4;
SimulinkモデルIntegratedEnvを作成します。これには、閉ループでインテリジェントボディに接続された飛行ロボットモデルが含まれています。この関数は、トレーニングに使用される強化学習環境オブジェクトenvも返します。
env=createIntegratedEnv('rlFlyingRobotEnv','IntegratedEnv')
この関数は、新しい統合モデルのRLエージェントブロックのブロックパス、および参照モデルの観測データと操作データの仕様を返すこともできます。
[~,agentBlk,observationInfo,actionInfo]=createIntegratedEnv('rlFlyingRobotEnv','IntegratedEnv')
この関数は、observationInfoおよびactionInfoの説明、制限、または名前を変更してから、関数rlSimulinkEnvを使用して統合モデルIntegratedEnvから環境を作成する必要がある場合に役立ちます。
指定されたポート名で統合環境を作成する
この例は、「名前と値」のペアを使用して関数createIntegratedEnvを呼び出し、統合(閉ループ)Simulink環境と対応する環境オブジェクトを作成する方法を示しています。
createIntegratedEnv関数の最初のパラメーターは、エージェントと対話するシステムを含む参照Simulinkモデルの名前です。このタイプのシステムは通常、ファクトリまたはオープンループシステムと呼ばれます。この例では、参照システムは水タンクのモデルです。
開ループ水タンクモデルを開く
open_system('rlWatertankOpenloop.slx');
上記の状況が発生した場合は、矢印の方向をクリックしてサンプルモデルを開きます。
シミュレーションを実行できるように、観測値の生成に使用される離散積分器ブロックのサンプリング時間を設定します。
Ts=1;
入力ポートはu(アクションではない)と呼ばれ、1番目と3番目の出力ポートはyと呼ばれ(監視とisdoneの代わりに)停止するため、関数createIntegratedEnvを呼び出すときに「名前と値」を使用します。正しい名前を割り当てます。
env=createIntegratedEnv('rlWatertankOpenloop','IntegratedWatertank','ActionPortName','u','ObservationPortName','y','IsDonePortName','stop')
これにより、新しいモデルIntegratedWatertankが作成されます。このモデルには、閉ループでエージェントブロックに接続された参照モデルが含まれています。この関数は、トレーニングに使用される強化学習環境オブジェクトenvも返します。
入力パラメータ
refModel —参照モデル名の
文字列| 文字ベクトル
文字列または文字ベクトルとして指定された参照モデル名。これは、エージェントと対話するシステムを実装するために使用されるSimulinkモデルです。このようなシステムは通常、ファクトリ、開ループシステム、または参照システムと呼ばれ、エージェントを含む(統合された)システム全体は通常、閉ループシステムと呼ばれます。新しいSimulinkモデルは、この参照モデルを強化学習環境の動的モデルとして使用します。
newModel —新しいモデル名の
文字列| 文字ベクトル
文字列または文字ベクトルとして指定された新しいモデル名。createIntegratedEnvは、この名前を使用してSimulinkモデルを作成しますが、モデルは保存しません。
名前と値のペアの引数
オプションのコンマ区切りの名前、値とパラメーターのペアを指定します。Nameはパラメーターの名前であり、Valueは対応する値です。名前は引用符で囲む必要があります。Name1、Value1、…、NameN、ValueNなど、複数の名前と値のペアのパラメーターを任意の順序で指定できます。
例: "IsDonePortName"、 "stopSim"は、参照モデルのstopSimポートをisdone信号のソースとして設定します。
'ObservationPortName' —参照モデルの観測出力ポート名
「observation」(デフォルト)| 文字列| 文字ベクトル
参照モデルの観測出力ポートの名前が「observation」でない場合は、observationPortNameを指定してください。
'ActionPortName' —参照モデルのアクション入力ポート名
「action」(デフォルト)| 文字列| 文字ベクトル
ActionPortName」と文字列または文字ベクトル。参照モデルのアクション入力ポートの名前が「action」でない場合は、ActionPortNameを指定してください。
'IsDonePortName' —参照モデル完了フラグ出力ポート名
「isdone」(デフォルト)| 文字列| 文字ベクトル
参照モデル完了フラグの出力ポート名。「IsDonePortName」と文字列または文字ベクトルで構成されるコンマ区切りのペアとして指定されます。参照モデルの完了フラグ出力ポートの名前が「isdone」でない場合は、IsDonePortNameを指定してください。
'ObservationBusElementNames' —観測バスリーフ要素の名前
文字列配列
文字列配列として指定された、正規を作成する観測バスのリーフ要素の名前。Simulinkバスオブジェクトの要素のサブセットの観測仕様を作成するには、BusElementNamesを指定します。BusElementNamesが指定されていない場合、バス内のリーフ要素ごとにデータ指定が作成されます。
ObservationBusElementNamesは、観測出力ポートがバス信号の場合にのみ適用できます。
例: 'ObservationBusElementNames'、["sin" "cos"]は、 "sin"および "cos"という名前の観測バス要素の仕様を作成します。
'ObservationDiscreteElements' — 「ObservationDiscreteElements」と名前と値のペアのセル配列で構成されるコンマ区切りのペアとして指定された、名前と値のペアの観測仕様
セル配列の有限値
。名前と値の各ペアは、要素名と離散値の配列で構成されます。
参照モデルの観測出力ポートが次の場合:
-
バス信号は、ObservationBusElementNamesで指定されたバスリーフ要素の1つの名前を指定します。
-
バス以外の信号の場合は、ObservationPortNameなどの監視ポートの名前を指定します。
指定された離散値は、指定された観測信号のデータ型に変換可能である必要があります。
観測仕様要素に離散値を指定しない場合、要素は連続です。
例: 'ObservationDiscretElements'、{'observation'、[-1 0 1]}は、デフォルトのポート名で観測された非バス観測信号の離散値を指定します。
例: 'ObservationDiscretElements'、{'gear'、[-1 0 1 2]、 'direction'、[1 2 3 4]}は、バスの「gear」および「direction」リーフ要素の離散値を指定しますアクション信号。
出力パラメータ
env —強化学習環境
SimulinkEnvWithAgentオブジェクト
強化学習環境のインターフェースは、SimulinkEnvWithAgentオブジェクトとして返されます。
agentBlock —エージェントブロック
文字ベクトルへのブロックパス
新しいモデルのエージェントブロックのブロックパスは、文字ベクトルとして返されます。新しいSimulinkモデルでエージェントをトレーニングするには、エージェントを作成し、agentBlockで示されるRLエージェントブロックでエージェント名を指定する必要があります。
エージェントの作成の詳細については、強化学習エージェントを参照してください。
obsInfo —観測データの仕様
rlNumericSpecオブジェクト| rlFiniteSetSpecオブジェクト| データ仕様オブジェクトの配列
観測データの仕様。次のいずれかとして返されます。
-
単一の連続観測仕様rlNumericSpecオブジェクト
-
単一の離散観測仕様のRlFiniteSetSpecオブジェクト
-
複数仕様のデータ仕様オブジェクト配列
actInfo —アクションデータの仕様
rlNumericSpecオブジェクト| rlFiniteSetSpecオブジェクト| データ仕様オブジェクトの配列
次のいずれかとして返される操作データ仕様:
-
単一の連続アクション仕様のRlNumericSpecオブジェクト
-
単一の離散操作仕様のRlFiniteSetSpecオブジェクト
-
複数のアクション仕様のデータ仕様オブジェクト配列