メインコンテンツ

rlSimulinkEnv

既に 1 つ以上のエージェント ブロックを含む Simulink モデルからの環境オブジェクトの作成

説明

rlSimulinkEnv 関数は、既に 1 つ以上のエージェント ブロックが含まれている 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 を作成し、さらに高速リスタートを有効にします。この構文は、前の構文にある任意の入力引数の後に使用します。

すべて折りたたむ

DDPG エージェントを使用したタンク内の水位の制御の例にある学習済みエージェントと対応する Simulink モデルを使用して、Simulink 環境を作成します。

エージェントを MATLAB® ワークスペースに読み込みます。

load WaterTankDDPG

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

この例では、rlNumericSpec を使用して、3 要素ベクトルを伝送する単一のチャネルで構成される観測空間を定義します。次に、rlFiniteSetSpec を使用して、3 つの可能な値のうち 1 つだけをもつ単一のチャネルで構成される行動空間を定義します。次に、これらの観測仕様とアクション仕様を使用して、rlSimplePendulumModel Simulink モデルに依存するカスタム Simulink® 環境を作成します。

モデルは、初期状態で下向きにぶら下がっている摩擦がない単純な振子を表します。モデルを開きます。

mdl = "rlSimplePendulumModel";
open_system(mdl)

rlNumericSpec オブジェクトは、連続集合に属する信号 (アクションまたは観測値) を伝送する環境チャネルを指定します。対照的に、rlFiniteSetSpec オブジェクトは、有限集合 (有限個の要素のみを含む集合) に属する信号を伝送するチャネルを指定します。

既存の環境がある場合は、getActionInfo関数またはgetObservationInfo関数を使用して、その環境のアクション仕様または観測仕様 (一般に rlNumericSpec オブジェクトと rlFiniteSetSpec オブジェクトから成るベクトル) を抽出できます。

この例では、代わりに新しいカスタム環境を作成する必要があります。そのためには、まず、環境のアクション チャネルと観測チャネルを定義しなければなりません。

観測空間を表すチャネルを定義するには、rlNumericSpec を使用します。このチャネルは、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"

行動空間を表すチャネルを定義するには、rlFiniteSetSpec を使用します。このチャネルはトルクを表すスカラーを伝送し、-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 環境を作成するには、rlSimulinkEnvを使用します。最初の引数として Simulink モデルを指定し、2 番目の引数としてエージェント ブロックのパスを指定します。さらに、前の手順で作成した観測仕様とアクション仕様を指定します。カスタム Simulink 環境の詳細については、Create Custom Simulink Environmentsを参照してください。

agentBlk = mdl + "/RL Agent";
env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)
env = 
SimulinkEnvWithAgent with properties:

           Model : rlSimplePendulumModel
      AgentBlock : rlSimplePendulumModel/RL Agent
        ResetFcn : []
  UseFastRestart : on

ドット表記を使用してリセット関数を指定します。この例では、setVariable (Simulink)関数を使用して、モデル ワークスペースの 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

ここで、inSimulink.SimulationInput (Simulink)オブジェクトです。シミュレーションまたは学習の期間中、モデル ワークスペース内の既存の theta0 の値は、指定した theta0 の値でオーバーライドされます。シミュレーションまたは学習が完了すると、theta0 の値は元に戻ります。リセット関数の詳細については、Reset Function for Simulink Environmentsを参照してください。

組み込み関数 train および sim の引数として、(エージェント オブジェクトと組み合わせて) env を使用できるようになりました。これらの関数は、この環境内でエージェントの学習とシミュレーションを行います。

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 ブロックが含まれていなければなりません。

例: "myModel"

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

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

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

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

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

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

例: "myModel/RL Agent"

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

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

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

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

[rlNumericSpec([2 1]) rlFiniteSetSpec([3,5,7])]

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

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

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

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

rlNumericSpec([1 1])

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

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

例: "off"

出力引数

すべて折りたたむ

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

メモ

Simulink 環境内でエージェントの学習やシミュレーションを行う前に、RL Agent ブロックが意図したサンプル時間に実行されるように、エージェント オブジェクトの SampleTime プロパティを適切に設定します。

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

バージョン履歴

R2019a で導入