Main Content

rlSimulinkEnv

既にエージェントと環境を含む Simulink モデルからの環境オブジェクトの作成

説明

関数 rlSimulinkEnv は、エージェント ブロックが既に含まれている Simulink® モデルから環境オブジェクトを作成します。環境オブジェクトはインターフェイスとして機能するため、sim または train を呼び出すと、これらの関数が (コンパイル済みの) Simulink モデルを呼び出してエージェントの経験を生成します。

エージェント ブロックを含まない Simulink モデルから環境オブジェクトを作成するには、代わりに createIntegratedEnv を使用します。強化学習環境の詳細については、Create Custom Simulink Environmentsを参照してください。

env = rlSimulinkEnv(mdl,agentBlocks) は、Simulink モデル mdl の強化学習環境オブジェクト env を作成します。agentBlocks は、mdl 内の 1 つ以上の強化学習エージェント ブロックへのパスを含みます。この構文を使用する場合、各エージェント ブロックは、MATLAB® ワークスペースに既に存在するエージェント オブジェクトを参照しなければなりません。

env = rlSimulinkEnv(mdl,agentBlocks,observationInfo,actionInfo) は、モデル mdl の強化学習環境オブジェクト env を作成します。2 つの cell 配列 (observationInfoactionInfo) には、mdl 内の各エージェント ブロックの観測仕様とアクション仕様が、agentBlocks で表示されるのと同じ順序で格納されていなければなりません。

env = rlSimulinkEnv(___,'UseFastRestart',fastRestartToggle) は強化学習環境オブジェクト env を作成し、さらに高速リスタートを有効にします。この構文は、前の構文にある任意の入力引数の後に使用します。

すべて折りたたむ

Create Simulink Environment and Train Agentの例にある学習済みエージェントと対応する 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)

これで、trainsim をそれぞれ使用して、環境内でエージェントの学習およびシミュレーションを行うことができるようになりました。

この例では、rlSimplePendulumModel Simulink® モデルを検討します。モデルは、初期状態で下向きにぶら下がっている摩擦がない単純な振子です。

モデルを開きます。

mdl = "rlSimplePendulumModel";
open_system(mdl)

観測仕様とアクション仕様にそれぞれ rlNumericSpec オブジェクトと rlFiniteSetSpec オブジェクトを作成します。

観測値は、角度の正弦、余弦、時間微分の 3 つの信号を含むベクトルです。

obsInfo = rlNumericSpec([3 1]) 
obsInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: [0x0 string]
    Description: [0x0 string]
      Dimension: [3 1]
       DataType: "double"

アクションはトルクを表すスカラーであり、-2 Nm、0 Nm、2 Nm の 3 つの値のいずれかになります。

actInfo = rlFiniteSetSpec([-2 0 2])
actInfo = 
  rlFiniteSetSpec with properties:

       Elements: [3x1 double]
           Name: [0x0 string]
    Description: [0x0 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 つのブロック (agentAagentB) で使用されるエージェントは既にワークスペース内にあるため、環境を作成するためにそれらの観測仕様およびアクション仕様を渡す必要はありません。

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 をそれぞれ使用して、環境内でエージェントのシミュレーションや学習を行うことができるようになりました。

入力引数

すべて折りたたむ

Simulink モデル名。string または文字ベクトルとして指定します。モデルには少なくとも 1 つの RL Agent ブロックが含まれていなければなりません。

エージェント ブロックのパス。string、文字ベクトル、または string 配列として指定します。

mdl に 1 つの RL Agent ブロックが含まれる場合は、agentBlocks をブロックのパスを含む string または文字ベクトルとして指定します。

mdl に複数の RL Agent ブロックが含まれる場合は、agentBlocks を各要素に 1 つのエージェント ブロックのパスを含む string 配列として指定します。

mdl には、agentBlocks にパスが含まれていない RL Agent ブロックを含めることができます。このようなエージェント ブロックは環境の一部として動作し、現在の方策に基づいてアクションを選択します。sim または train を呼び出す際、これらのエージェントの経験は返されず、方策も更新されません。

マルチエージェント シミュレーションは MATLAB 環境ではサポートされていません。

エージェント ブロックはモデル参照の中に置くことができます。強化学習用のエージェント ブロックの構成の詳細については、RL Agent を参照してください。

観測情報。仕様オブジェクト、仕様オブジェクトの配列、または cell 配列として指定します。

mdl に単一エージェントのブロックが含まれる場合は、observationInforlNumericSpec オブジェクト、rlFiniteSetSpec オブジェクト、またはそれらのオブジェクトが混在する配列として指定します。

mdl に複数のエージェント ブロックが含まれる場合は、observationInfo を cell 配列として指定します。各セルには、agentBlocks 内の対応するブロックの仕様オブジェクトまたは仕様オブジェクトの配列を格納します。

詳細については、getObservationInfo を参照してください。

アクション情報。仕様オブジェクトまたは cell 配列として指定します。

mdl に単一エージェントのブロックが含まれる場合は、actionInforlNumericSpec オブジェクトまたは rlFiniteSetSpec オブジェクトとして指定します。

mdl に複数のエージェント ブロックが含まれる場合は、actionInfo を cell 配列として指定します。各セルには、agentBlocks 内の対応するブロックの仕様オブジェクトを格納します。

詳細については、getActionInfo を参照してください。

高速リスタートを切り替えるオプション。'on' または 'off' として指定します。高速リスタートを使用すると、毎回モデルをコンパイルしたりシミュレーションを終了したりすることなく、反復シミュレーションを実行できます。

高速リスタートの詳細については、高速リスタートによる反復的なシミュレーションの改善 (Simulink)を参照してください。

出力引数

すべて折りたたむ

強化学習環境。SimulinkEnvWithAgent オブジェクトとして返されます。

強化学習環境の詳細については、Create Custom Simulink Environmentsを参照してください。

バージョン履歴

R2019a で導入