この例では、rlNumericSpec を使用して、3 要素ベクトルを伝送する単一のチャネルで構成される観測空間を定義します。次に、rlFiniteSetSpec を使用して、3 つの可能な値のうち 1 つだけをもつ単一のチャネルで構成される行動空間を定義します。次に、これらの観測仕様とアクション仕様を使用して、rlSimplePendulumModel Simulink モデルに依存するカスタム Simulink® 環境を作成します。
モデルは、初期状態で下向きにぶら下がっている摩擦がない単純な振子を表します。モデルを開きます。
rlNumericSpec オブジェクトは、連続集合に属する信号 (アクションまたは観測値) を伝送する環境チャネルを指定します。対照的に、rlFiniteSetSpec オブジェクトは、有限集合 (有限個の要素のみを含む集合) に属する信号を伝送するチャネルを指定します。
既存の環境がある場合は、getActionInfo関数またはgetObservationInfo関数を使用して、その環境のアクション仕様または観測仕様 (一般に rlNumericSpec オブジェクトと rlFiniteSetSpec オブジェクトから成るベクトル) を抽出できます。
この例では、代わりに新しいカスタム環境を作成する必要があります。そのためには、まず、環境のアクション チャネルと観測チャネルを定義しなければなりません。
観測空間を表すチャネルを定義するには、rlNumericSpec を使用します。このチャネルは、3 つの信号 (角度の正弦、余弦、および時間微分) を含むベクトルを伝送します。
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 with properties:
Elements: [3×1 double]
Name: [0×0 string]
Description: [0×0 string]
Dimension: [1 1]
DataType: "double"
ドット表記を使用して、rlNumericSpec オブジェクトと rlFiniteSetSpec オブジェクトのプロパティ値を割り当てることができます。
これらの仕様を使用することで、新しいカスタム環境と、その環境内で動作するエージェント オブジェクトの両方を作成できるようになりました。
カスタム Simulink 環境を作成するには、rlSimulinkEnvを使用します。最初の引数として Simulink モデルを指定し、2 番目の引数としてエージェント ブロックのパスを指定します。さらに、前の手順で作成した観測仕様とアクション仕様を指定します。カスタム Simulink 環境の詳細については、Create Custom Simulink Environmentsを参照してください。
env =
SimulinkEnvWithAgent with properties:
Model : rlSimplePendulumModel
AgentBlock : rlSimplePendulumModel/RL Agent
ResetFcn : []
UseFastRestart : on
ドット表記を使用してリセット関数を指定します。この例では、setVariable (Simulink)関数を使用して、モデル ワークスペースの theta0 をランダムに初期化します。
env =
SimulinkEnvWithAgent with properties:
Model : rlSimplePendulumModel
AgentBlock : rlSimplePendulumModel/RL Agent
ResetFcn : @(in)setVariable(in,"theta0",randn,"Workspace",mdl)
UseFastRestart : on
ここで、in はSimulink.SimulationInput (Simulink)オブジェクトです。シミュレーションまたは学習の期間中、モデル ワークスペース内の既存の theta0 の値は、指定した theta0 の値でオーバーライドされます。シミュレーションまたは学習が完了すると、theta0 の値は元に戻ります。リセット関数の詳細については、Reset Function for Simulink Environmentsを参照してください。
組み込み関数 train および sim の引数として、(エージェント オブジェクトと組み合わせて) env を使用できるようになりました。これらの関数は、この環境内でエージェントの学習とシミュレーションを行います。