Main Content

createGridWorld

強化学習用の 2 次元グリッド ワールドの作成

説明

GW = createGridWorld(m,n) は、['N';'S';'E';'W'] の既定のアクションをもつ、サイズ mn 列のグリッド ワールド GW を作成します。

GW = createGridWorld(m,n,moves) は、moves で指定されたアクションをもつ、サイズ mn 列のグリッド ワールド GW を作成します。

すべて折りたたむ

この例では、以下のルールをもつ 5 行 5 列のグリッド ワールドについて考えます。

  1. 境界線で囲まれた 5 行 5 列のグリッド ワールド。4 つのアクション (北 = 1、南 = 2、東 = 3、西 = 4) が可能。

  2. エージェントはセル [2,1] (2 行目の 1 列目) から開始する。

  3. セル [5,5] (青) の終了状態に到達すると、エージェントは報酬 +10 を受け取る。

  4. 環境には、セル [2,4] からセル [4,4] への、+5 の報酬を伴う特別なジャンプが含まれる。

  5. エージェントは、セル [3,3]、[3,4]、[3,5]、および [4,3] (黒いセル) の障害物によってブロックされる。

  6. 他のすべてのアクションは報酬が -1 される。

まず、関数 createGridWorld を使用して GridWorld オブジェクトを作成します。

GW = createGridWorld(5,5)
GW = 
  GridWorld with properties:

                GridSize: [5 5]
            CurrentState: "[1,1]"
                  States: [25x1 string]
                 Actions: [4x1 string]
                       T: [25x25x4 double]
                       R: [25x25x4 double]
          ObstacleStates: [0x1 string]
          TerminalStates: [0x1 string]
    ProbabilityTolerance: 8.8818e-16

次に、初期状態、終了状態、および障害物の状態を設定します。

GW.CurrentState = '[2,1]';
GW.TerminalStates = '[5,5]';
GW.ObstacleStates = ["[3,3]";"[3,4]";"[3,5]";"[4,3]"];

障害物の状態に関する状態遷移行列を更新し、障害物の状態を飛び越えるジャンプ ルールを設定します。

updateStateTranstionForObstacles(GW)
GW.T(state2idx(GW,"[2,4]"),:,:) = 0;
GW.T(state2idx(GW,"[2,4]"),state2idx(GW,"[4,4]"),:) = 1;

次に、報酬遷移行列で報酬を定義します。

nS = numel(GW.States);
nA = numel(GW.Actions);
GW.R = -1*ones(nS,nS,nA);
GW.R(state2idx(GW,"[2,4]"),state2idx(GW,"[4,4]"),:) = 5;
GW.R(:,state2idx(GW,GW.TerminalStates),:) = 10;

次に、rlMDPEnv を使用し、GridWorld オブジェクト GW を使用してグリッド ワールド環境を作成します。

env = rlMDPEnv(GW)
env = 
  rlMDPEnv with properties:

       Model: [1x1 rl.env.GridWorld]
    ResetFcn: []

関数 plot を使用すると、グリッド ワールド環境を可視化できます。

plot(env)

入力引数

すべて折りたたむ

グリッド ワールドの行数。スカラーとして指定します。

グリッド ワールドの列数。スカラーとして指定します。

アクション名。'Standard' または 'Kings' のいずれかとして指定します。moves の設定によって、以下のようになります。

  • 'Standard' の場合、アクションは ['N';'S';'E';'W']

  • 'Kings' の場合、アクションは ['N';'S';'E';'W';'NE';'NW';'SE';'SW']

出力引数

すべて折りたたむ

2 次元グリッド ワールド。以下にリストされているプロパティをもつ GridWorld オブジェクトとして返されます。詳細については、Create Custom Grid World Environmentsを参照してください。

グリッド ワールドのサイズ。[m,n] ベクトルとして指定します。

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

状態名。長さ m*n の string ベクトルとして指定します。

アクション名。string ベクトルとして指定します。Actions ベクトルの長さは、引数 moves によって決まります。

Actions は次の長さの string ベクトルです。

  • 4 (moves'Standard' として指定されている場合)。

  • 8 (moves'Kings' として指定されている場合)。

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

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

T は次のようになります。

  • K×K×4 の配列 (moves'Standard' として指定されている場合)。ここで、K = m*n

  • K×K×8 の配列 (moves'Kings' として指定されている場合)。

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

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

R は次のようになります。

  • K×K×4 の配列 (moves'Standard' として指定されている場合)。ここで、K = m*n

  • K×K×8 の配列 (moves'Kings' として指定されている場合)。

グリッド ワールド内で到達できない状態名。string ベクトルとして指定します。

グリッド ワールドでの終了状態名。string ベクトルとして指定します。

バージョン履歴

R2019a で導入