メインコンテンツ

createMDP

マルコフ決定過程オブジェクトの作成

説明

マルコフ決定過程 (MDP) は、状態と観測値が有限空間に属し、確率的ルールが状態遷移を制御する離散時間の確率的制御プロセスです。MDP は、強化学習を使用して解決された最適化問題を研究するのに役立ちます。createMDP 関数を使用して、指定された状態と遷移をもつ GenericMDP オブジェクトを作成します。その後、オブジェクトのプロパティの一部を変更し、それを rlMDPEnv に渡して、エージェントが対話できる環境を作成できます。

mdp = createMDP(states,actions) は、指定された状態とアクションをもつマルコフ決定過程オブジェクトを作成します。

すべて折りたたむ

8 つの状態と 2 つの可能なアクションをもつ GenericMDP オブジェクトを作成します。

mdp = createMDP(8,["up";"down"])
mdp = 
  GenericMDP with properties:

            CurrentState: "s1"
                  States: [8×1 string]
                 Actions: [2×1 string]
                       T: [8×8×2 double]
                       R: [8×8×2 double]
          TerminalStates: [0×1 string]
    ProbabilityTolerance: 8.8818e-16

状態遷移とそれに関連する報酬を指定します。

% State 1 transition and reward
mdp.T(1,2,1) = 1;
mdp.R(1,2,1) = 3;
mdp.T(1,3,2) = 1;
mdp.R(1,3,2) = 1;

% State 2 transition and reward
mdp.T(2,4,1) = 1;
mdp.R(2,4,1) = 2;
mdp.T(2,5,2) = 1;
mdp.R(2,5,2) = 1;

% State 3 transition and reward
mdp.T(3,5,1) = 1;
mdp.R(3,5,1) = 2;
mdp.T(3,6,2) = 1;
mdp.R(3,6,2) = 4;

% State 4 transition and reward
mdp.T(4,7,1) = 1;
mdp.R(4,7,1) = 3;
mdp.T(4,8,2) = 1;
mdp.R(4,8,2) = 2;

% State 5 transition and reward
mdp.T(5,7,1) = 1;
mdp.R(5,7,1) = 1;
mdp.T(5,8,2) = 1;
mdp.R(5,8,2) = 9;

% State 6 transition and reward
mdp.T(6,7,1) = 1;
mdp.R(6,7,1) = 5;
mdp.T(6,8,2) = 1;
mdp.R(6,8,2) = 1;

% State 7 transition and reward
mdp.T(7,7,1) = 1;
mdp.R(7,7,1) = 0;
mdp.T(7,7,2) = 1;
mdp.R(7,7,2) = 0;

% State 8 transition and reward
mdp.T(8,8,1) = 1;
mdp.R(8,8,1) = 0;
mdp.T(8,8,2) = 1;
mdp.R(8,8,2) = 0;

モデルの終了状態を指定します。

mdp.TerminalStates = ["s7";"s8"];

state2idxを使用して、"s7" に関連付けられたインデックスを取得します。

state2idx(mdp,"s7")
ans = 
7

rlMDPEnvを使用して、mdp をエージェントの学習やシミュレーションに使用できる環境オブジェクトに変換できるようになりました。

入力引数

すべて折りたたむ

モデルの状態。次のいずれかとして指定します。

  • 正の整数 — モデルの状態の数を指定します。この場合、各状態は既定の名前をもちます (最初の状態は "s1" など)。

  • string ベクトル — 状態名を指定します。この場合、状態の総数はベクトルの長さに等しくなります。

例: ["America";"Europe";"China"];

モデルのアクション。次のいずれかとして指定します。

  • 正の整数 — モデルのアクションの数を指定します。この場合、各アクションは既定の名前をもちます (最初のアクションは "a1" など)。

  • string ベクトル — アクション名を指定します。この場合、アクションの総数はベクトルの長さに等しくなります。

例: ["GoWest";"GoEast"];

出力引数

すべて折りたたむ

MDP モデル。次のプロパティをもつ GenericMDP オブジェクトとして返されます。

現在の状態の名前。string として指定します。

例: "Europe";

状態名。状態の数に等しい長さの string ベクトルとして指定します。

例: ["America";"Europe";"China"];

アクション名。アクションの数に等しい長さの string ベクトルとして指定します。

例: ["GoWest";"GoEast"];

状態遷移行列。環境内でエージェントが取り得る動きを決定する 3 次元配列として指定します。状態遷移行列 T は、アクション a を実行したときにエージェントの位置が現在の状態 s から考えられる次の状態 s' に移行する可能性を示す確率行列です。TS×S×A の配列で、S は状態の数、A はアクションの数です。これは次の式で与えられます。

T(s,s',a) = probability(s'|s,a)

あるアクションに続く非終了状態 s からの遷移確率の合計は、1 または 0 でなければなりません。したがって、ある状態からのすべての確率的遷移は同時に指定しなければなりません。

たとえば、アクション 4 の後の状態 1 が状態 2 または 3 に移行する確率が等しいことを示すには、次のコマンドを使用します。

mdp.T(1,[2 3],4) = [0.5 0.5];

アクションの後、一定の確率で同じ状態が維持されることを指定することもできます。

mdp.T(1,[1 2 3 4],1) = [0.25 0.25 0.25 0.25];

例: mdp.T(1,[1 2 3],1) = [0.25 0.5 0.25] は、オブジェクト mdp 内にある T の最初の行に含まれる最初の 3 つの要素を割り当てます。

報酬遷移行列は、環境内でアクションを実行した後にエージェントが受け取る報酬の量を決定する 3 次元配列として指定します。R の形状とサイズは状態遷移行列 T と同じです。アクション a を実行することによる状態 s から状態 s' への移行に対する報酬は、次の式で与えられます。

r = R(s,s',a).

例: mdp.R(1,[1 2 3],1) = [-1 0.5 2] は、オブジェクト mdp 内にある R の最初の行に含まれる最初の 3 つの要素を割り当てます。

終了状態名。状態名の string ベクトルとして指定します。

例: mdp.TerminalStates = "s3" は、オブジェクト mdp の終了状態に "s3" という名前を割り当てます。

状態遷移行列の行に沿った確率の合計に対する許容誤差。

状態遷移行列の行に沿った数値の合計はその行番号で示される状態へ移行する確率を表すため、各行の数値の合計は、ProbabilityTolerance で指定された許容誤差内で 1 または 0 のいずれかにならなければなりません。この条件が満たされない場合、エラーがスローされます。

遷移確率を設定するには、行全体を 0 に設定してから、0 以外の確率を一度にすべて設定します。例については、createGridWorld を参照してください。または、状態遷移行列を変数にコピーし、その変数を変更してから、グリッド ワールド オブジェクトの状態遷移行列としてその変数を再度割り当てることもできます。

例: mdp.ProbabilityTolerance = 1e-15; は、オブジェクト mdp の確率許容誤差を 1e-15 に設定します。

バージョン履歴

R2019a で導入