メインコンテンツ

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"];

MDPrlMDPEnvに渡して、エージェントの学習およびシミュレーションを行う環境を作成できるようになりました。

入力引数

すべて折りたたむ

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

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

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

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

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

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

出力引数

すべて折りたたむ

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

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

例: MDP.CurrentState = "s2";

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

例: MDP.States = ["America";"Europe";"China"];

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

例: MDP.Actions = ["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]

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

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

例: MDP.T(1,[1 2 3],1) = [-1 0.5 2]

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

例: MDP.TerminalStates = "s3"

バージョン履歴

R2019a で導入