SimulinkEnvWithAgent
Simulink で実装された動的モデルによる強化学習環境
説明
作成
SimulinkEnvWithAgent
オブジェクトを作成するには、次のいずれかの関数を使用します。
rlSimulinkEnv
— 少なくとも 1 つの RL Agent ブロックを含む Simulink モデルを使用して環境を作成します。createIntegratedEnv
— 参照モデルを強化学習環境として使用します。rlPredefinedEnv
— 事前定義済みの強化学習環境を作成します。
プロパティ
Simulink モデル名。string または文字ベクトルとして指定します。指定したモデルには、1 つ以上の RL Agent ブロックが含まれていなければなりません。
エージェント ブロックのパス。string または string 配列として指定します。
Model
に学習用の単一の RL Agent ブロックが含まれている場合、AgentBlock
はブロックのパスを含む string になります。
Model
に学習用の複数の RL Agent ブロックが含まれている場合、AgentBlock
は各要素に 1 つのエージェント ブロックのパスを含む string 配列になります。
Model
には、AgentBlock
にパスが含まれていない RL Agent ブロックを含めることができます。このようなエージェント ブロックは環境の一部として動作し、現在の方策に基づいてアクションを選択します。sim
または train
を呼び出す際、これらのエージェントの経験は返されず、方策も更新されません。
エージェント ブロックはモデル参照の中に置くことができます。強化学習用のエージェント ブロックの構成の詳細については、RL Agent を参照してください。
環境のリセット動作。関数ハンドルまたは無名関数ハンドルとして指定します。関数は、1 つの Simulink.SimulationInput
入力引数と 1 つの Simulink.SimulationInput
出力引数をもたなければなりません。Simulink シミュレーション入力オブジェクトの詳細については、Simulink.SimulationInput
(Simulink) を参照してください。
リセット関数は、Simulink 環境の初期状態を設定します。たとえば、各学習エピソードが異なる初期条件から開始されるように、特定のブロック状態をランダム化するリセット関数を作成できます。
MATLAB® パス上に既存のリセット関数 myResetFunction
がある場合は、関数へのハンドルを使用して ResetFcn
を設定します。
env.ResetFcn = @(in)myResetFunction(in);
リセット動作が単純な場合は、無名関数ハンドルを使用して実装できます。たとえば、次のコードでは、setVariable
(Simulink) を使用して、Simulink.SimulationInput
(Simulink) オブジェクト in
内の変数 x0
をランダムな値に設定します。シミュレーションまたは学習の期間中、モデル ワークスペース内の既存の x0
の値は、指定した x0
の値でオーバーライドされます。シミュレーションまたは学習が完了すると、x0
の値は元に戻ります。
env.ResetFcn = @(in) setVariable(in,'x0',rand());
ResetFcn
プロパティが空の SimulinkEnvWithAgent
オブジェクトのリセット関数を呼び出すと、未変更の Simulink モデルの Simulink.SimulationInput
が返されます。
sim
関数は、各シミュレーションの開始時に環境をリセットするためにリセット関数を呼び出し、train
関数は、各学習エピソードの開始時にリセット関数を呼び出します。
高速リスタートを切り替えるオプション。"on"
または "off"
として指定します。高速リスタートを使用すると、毎回モデルをコンパイルしたりシミュレーションを終了したりすることなく、反復シミュレーションを実行できます。
高速リスタートの詳細については、高速リスタートによる反復的なシミュレーションの改善 (Simulink)を参照してください。
オブジェクト関数
train | Train reinforcement learning agents within a specified environment |
sim | Simulate trained reinforcement learning agents within specified environment |
getObservationInfo | Obtain observation data specifications from reinforcement learning environment, agent, or experience buffer |
getActionInfo | Obtain action data specifications from reinforcement learning environment, agent, or experience buffer |
例
DDPG エージェントを使用したタンク内の水位の制御の例にある学習済みエージェントと対応する Simulink モデルを使用して、Simulink 環境を作成します。
エージェントを MATLAB® ワークスペースに読み込みます。
load rlWaterTankDDPGAgent
RL Agent ブロックを含む rlwatertank
モデルの環境を作成します。ブロックで使用されるエージェントは既にワークスペース内にあるため、環境を作成するために観測仕様とアクション仕様を渡す必要はありません。
env = rlSimulinkEnv("rlwatertank","rlwatertank/RL Agent")
env = SimulinkEnvWithAgent with properties: Model : rlwatertank AgentBlock : rlwatertank/RL Agent ResetFcn : [] UseFastRestart : on
2 つのサンプル時間に対して短いシミュレーションを実行して、環境を検証します。
validateEnvironment(env)
これで、train
と sim
をそれぞれ使用して、環境内でエージェントの学習およびシミュレーションを行うことができるようになりました。
この例では、rlSimplePendulumModel
Simulink® モデルを検討します。モデルは、初期状態で下向きにぶら下がっている摩擦がない単純な振子です。
モデルを開きます。
mdl = "rlSimplePendulumModel";
open_system(mdl)
観測仕様とアクション仕様にそれぞれ rlNumericSpec
オブジェクトと rlFiniteSetSpec
オブジェクトを作成します。
観測値は、角度の正弦、余弦、時間微分の 3 つの信号を含むベクトルです。
obsInfo = rlNumericSpec([3 1])
obsInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: [0×0 string] Description: [0×0 string] Dimension: [3 1] DataType: "double"
アクションはトルクを表すスカラーであり、-2
Nm、0
Nm、2
Nm の 3 つの値のいずれかになります。
actInfo = rlFiniteSetSpec([-2 0 2])
actInfo = rlFiniteSetSpec with properties: Elements: [3×1 double] Name: [0×0 string] Description: [0×0 string] Dimension: [1 1] DataType: "double"
ドット表記を使用して、rlNumericSpec
オブジェクトと rlFiniteSetSpec
オブジェクトのプロパティ値を割り当てることができます。
obsInfo.Name = "observations"; actInfo.Name = "torque";
エージェント ブロックのパス情報を割り当て、前の手順で抽出した情報を使用して Simulink モデルの強化学習環境を作成します。
agentBlk = mdl + "/RL Agent";
env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)
env = SimulinkEnvWithAgent with properties: Model : rlSimplePendulumModel AgentBlock : rlSimplePendulumModel/RL Agent ResetFcn : [] UseFastRestart : on
ドット表記を使用してリセット関数を指定することもできます。この例では、モデル ワークスペースの theta0
をランダムに初期化します。
env.ResetFcn = @(in) setVariable(in,"theta0",randn,"Workspace",mdl)
env = SimulinkEnvWithAgent with properties: Model : rlSimplePendulumModel AgentBlock : rlSimplePendulumModel/RL Agent ResetFcn : @(in)setVariable(in,"theta0",randn,"Workspace",mdl) UseFastRestart : on
Train Multiple Agents to Perform Collaborative Taskの例から Simulink モデル用の環境を作成します。
エージェントを含むファイルを読み込みます。この例では、非集中学習を使用して学習済みのエージェントを読み込みます。
load decentralizedAgents.mat
2 つのエージェント ブロックをもつ rlCollaborativeTask
モデルの環境を作成します。2 つのブロック (agentA
と agentB
) で使用されるエージェントは既にワークスペース内にあるため、環境を作成するためにそれらの観測仕様およびアクション仕様を渡す必要はありません。
env = rlSimulinkEnv( ... "rlCollaborativeTask", ... ["rlCollaborativeTask/Agent A","rlCollaborativeTask/Agent B"])
env = SimulinkEnvWithAgent with properties: Model : rlCollaborativeTask AgentBlock : [ rlCollaborativeTask/Agent A rlCollaborativeTask/Agent B ] ResetFcn : [] UseFastRestart : on
各エピソードの開始時にエージェントがランダムな初期位置から開始するように、環境のリセット関数を指定することを推奨します。例については、Train Multiple Agents to Perform Collaborative Taskで定義されている関数 resetRobots
を参照してください。
これで、sim
または train
をそれぞれ使用して、環境内でエージェントのシミュレーションや学習を行うことができるようになりました。
事前定義済みのキーワード "SimplePendulumModel-Continuous"
を使用して、連続型単純振子モデルの強化学習環境を作成します。
env = rlPredefinedEnv("SimplePendulumModel-Continuous")
env = SimulinkEnvWithAgent with properties: Model : rlSimplePendulumModel AgentBlock : rlSimplePendulumModel/RL Agent ResetFcn : [] UseFastRestart : on
この例では、createIntegratedEnv
を使用し、エージェントがやり取りするシステムを実装した、エージェント ブロックをもたない Simulink モデルから環境オブジェクトを作成する方法を示します。このようなシステムは、"プラント"、"開ループ" システム、または "参照" システムと呼ばれることが多く、エージェントを含む全体 (統合) システムは "閉ループ" システムと呼ばれることがよくあります。
この例では、滑走ロボットを制御するための DDPG エージェントの学習で説明されている飛行ロボット モデルを参照 (開ループ) システムとして使用します。
飛行ロボット モデルを開きます。
open_system("rlFlyingRobotEnv")
状態変数とサンプル時間を初期化します。
% initial model state variables theta0 = 0; x0 = -15; y0 = 0; % sample time Ts = 0.4;
エージェント ブロックに閉ループで接続された飛行ロボット モデルを含む Simulink モデル myIntegratedEnv
を作成します。この関数は、学習に使用される強化学習環境オブジェクト env
も返します。
env = createIntegratedEnv( ... "rlFlyingRobotEnv", ... "myIntegratedEn")
env = SimulinkEnvWithAgent with properties: Model : myIntegratedEn AgentBlock : myIntegratedEn/RL Agent ResetFcn : [] UseFastRestart : on
この関数は、新しい統合モデル内の RL Agent ブロックへのブロック パス、および参照モデルの観測仕様とアクション仕様を返すこともできます。
[~,agentBlk,observationInfo,actionInfo] = ... createIntegratedEnv( ... "rlFlyingRobotEnv","myIntegratedEnv")
agentBlk = "myIntegratedEnv/RL Agent"
observationInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "observation" Description: [0×0 string] Dimension: [7 1] DataType: "double"
actionInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "action" Description: [0×0 string] Dimension: [2 1] DataType: "double"
ブロック パスと仕様を返すことは、observationInfo
および actionInfo
の説明、制限、または名前を変更する必要がある場合に役立ちます。仕様を変更した後、rlSimulinkEnv
関数を使用して統合モデル IntegratedEnv
から環境を作成できます。
バージョン履歴
R2019a で導入
参考
関数
オブジェクト
ブロック
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)