Main Content

rlFunctionEnv

リセット関数とステップ関数を使用したカスタム強化学習環境の作成

説明

rlFunctionEnv を使用して独自の MATLAB® 関数 (リセット関数およびステップ関数) を指定し、カスタム強化学習環境を作成します。このオブジェクトは、rlPredefinedEnv で使用できる組み込み環境とは異なる環境を作成する場合に便利です。環境の動作を確認するために、rlFunctionEnv は環境の作成後に自動的にvalidateEnvironmentを呼び出します。

作成

説明

env = rlFunctionEnv(observationInfo,actionInfo,stepFcn,resetFcn) は、提供された観測仕様とアクション仕様 (observationInfoactionInfo) をそれぞれ使用して強化学習環境を作成します。引数 stepFcn と引数 resetFcn は、それぞれ MATLAB 関数 (ステップ関数とリセット関数) の名前であり、envStepFcn プロパティと ResetFcn プロパティを設定するために使用されます。

入力引数

すべて展開する

観測仕様。rlFiniteSetSpec オブジェクトまたは rlNumericSpec オブジェクト、あるいはそれらのオブジェクトが混在する配列として指定します。配列内の各要素は、その次元、データ型、名前などの環境観測チャネルのプロパティを定義します。

アクション仕様。rlFiniteSetSpec オブジェクト (離散行動空間の場合) または rlNumericSpec オブジェクト (連続行動空間の場合) として指定します。このオブジェクトは、環境アクション チャネルのプロパティ (サイズ、データ型、名前など) を定義します。

メモ

1 つのアクション チャネルのみが許可されます。

プロパティ

すべて展開する

環境のステップ関数。関数名、関数ハンドル、または無名関数へのハンドルとして指定します。関数 sim と関数 train は、シミュレーションまたは学習のステップごとに StepFcn を呼び出して環境を更新します。

次のシグネチャで示されているように、この関数は 2 つの入力と 4 つの出力をもたなければなりません。

[NextObservation,Reward,IsDone,UpdatedInfo] = myStepFunction(Action,Info)

あるアクション入力に対して、ステップ関数は、次の観測値と報酬の値、エピソードが終了したかどうかを示す logical 値、および更新された環境情報変数を返します。

具体的には、必要な入力引数と出力引数は次のように説明されます。

  • Action — エージェントからの現在のアクション。これは、actionInfo で指定した次元およびデータ型と一致していなければなりません。

  • Info — あるステップから次のステップに渡す任意のデータ。これは、環境の状態、または状態とパラメーターが格納された構造体の場合があります。シミュレーション関数または学習関数 (train または sim) は、この変数を次のように処理します。

    1. エピソードの開始時に、ResetFcn によって返された 2 番目の出力引数を使用して Info を初期化する

    2. 各学習またはシミュレーション ステップで、Info を 2 番目の入力引数として StepFcn に渡す

    3. StepFcn によって返される 4 番目の出力引数 UpdatedInfo を使用して Info を更新する

  • NextObservation — 次の観測値。これは、Action に基づき、現在の状態から次の状態への遷移によって生成される観測です。戻り値は、observationInfo で指定した次元およびデータ型と一致していなければなりません。

  • RewardAction に基づき、現在の状態から次の状態への遷移によって生成される報酬。戻り値はスカラーでなければなりません。

  • IsDone — シミュレーションまたは学習エピソードを終了するかどうかを示す logical 値。

許可されている 2 つを超えて追加の入力引数を使用するには、ステップ関数とリセット関数を使用したカスタム環境の作成の例に示すように、MATLAB ワークスペースで追加の引数を定義し、次にワークスペースで定義された追加の引数を使用してカスタム関数を呼び出す無名関数として stepFcn を指定します。

例: StepFcn="myStepFcn"

環境のリセット関数。関数名、関数ハンドル、または無名関数へのハンドルとして指定します。関数 sim は、各シミュレーションの開始時にリセット関数を呼び出して環境をリセットし、関数 train は各学習エピソードの開始時にリセット関数を呼び出します。

次のシグネチャで示されているように、提供するリセット関数には入力がなく、2 つの出力がなければなりません。

[InitialObservation,Info] = myResetFunction

リセット関数は、環境を初期状態に設定し、観測値の初期値を計算します。たとえば、各学習エピソードが異なる初期条件から始まるように、特定の状態値をランダム化するリセット関数を作成できます。InitialObservation 出力は、observationInfo の次元およびデータ型と一致していなければなりません。

ResetFcnInfo 出力は環境の Info プロパティを初期化し、あるステップから次のステップに渡す任意のデータを含みます。これは、環境の状態、または状態とパラメーターが格納された構造体の場合があります。シミュレーション関数または学習関数 (train または sim) は、Info の現在の値を StepFcn の 2 番目の入力引数として提供し、StepFcn によって返された 4 番目の出力引数を使用して Info の値を更新します。

許可されている 2 つを超えて追加の入力引数を使用するには、ステップ関数とリセット関数を使用したカスタム環境の作成の例に示すように、MATLAB ワークスペースで引数を定義し、次にワークスペースで定義された追加の引数を使用してカスタム関数を呼び出す無名関数として stepFcn を指定します。

例: ResetFcn="myResetFcn"

次のステップに渡す情報。これは、環境の状態、または状態とパラメーターが格納された構造体の場合があります。ResetFcn が呼び出されると、ResetFcnInfo 出力として定義した内容がこのプロパティを初期化します。ステップが発生すると、シミュレーション関数または学習関数 (train または sim) は、Info の現在の値を StepFcn の 2 番目の入力引数として使用します。StepFcn が完了すると、シミュレーション関数または学習関数は、StepFcn によって返された 4 番目の出力引数を使用して Info の現在の値を更新します。

例: Info=[-1 0 2.2]

オブジェクト関数

getActionInfoObtain action data specifications from reinforcement learning environment, agent, or experience buffer
getObservationInfoObtain observation data specifications from reinforcement learning environment, agent, or experience buffer
trainTrain reinforcement learning agents within a specified environment
simSimulate trained reinforcement learning agents within specified environment
validateEnvironmentValidate custom reinforcement learning environment

すべて折りたたむ

MATLAB® でカスタム動的関数を提供して、強化学習環境を作成します。rlFunctionEnv を使用すると、観測仕様、アクション仕様、および定義したステップ関数とリセット関数から MATLAB 強化学習環境を作成できます。

この例では、ポール上のカートを平衡化するシステムを表す環境を作成します。環境からの観測値は、カートの位置、カートの速度、振子の角度、および振子の角速度です。この環境の詳細については、ステップ関数とリセット関数を使用したカスタム環境の作成を参照してください。これらの信号の観測仕様を作成します。

obsinfo = rlNumericSpec([4 1]);
obsinfo.Name = "CartPole States";
obsinfo.Description = 'x, dx, theta, dtheta';

この環境は、エージェントが 2 つの有効な力の値 (-10 N または 10 N) のいずれかをカートに適用できる離散行動空間をもちます。これらのアクションのアクション仕様を作成します。

actInfo = rlFiniteSetSpec([-10 10]);
actInfo.Name = "CartPole Action";

次に、ステップ関数とリセット関数を指定します。この例では、提供された関数 myResetFunction.m および myStepFunction.m を使用します。これらの関数とその構造の詳細については、ステップ関数とリセット関数を使用したカスタム環境の作成を参照してください。

rlFunctionEnvに渡さなければならないカスタム リセット関数とカスタム ステップ関数には、それぞれ 0 個と 2 個の引数が必要ですが、無名関数を使用することでこの制限を回避できます。具体的には、rlFunctionEnv に渡すリセット関数とステップ関数を無名関数 (それぞれ 0 個と 2 個の引数) として定義し、これらの関数が追加の引数をもつカスタム関数を呼び出すようにします。これを行う方法の詳細については、ステップ関数とリセット関数を使用したカスタム環境の作成を参照してください。

定義された観測仕様、アクション仕様、および関数名を使用してカスタム環境を作成します。

env = rlFunctionEnv(obsinfo,actInfo,"myStepFunction","myResetFunction")
env = 
  rlFunctionEnv with properties:

     StepFcn: "myStepFunction"
    ResetFcn: "myResetFunction"
        Info: [4x1 double]

これで、他の任意の環境の場合と同様に、env 用のエージェントを作成し、学習やシミュレーションを行うことができるようになりました。

バージョン履歴

R2019a で導入

すべて展開する