createGridWorld

Создайте двумерный мир сетки для обучения с подкреплением

Описание

пример

GW = createGridWorld(m,n) создает мир сетки GW из размера m- n с действиями по умолчанию ['N';'S';'E';'W'].

GW = createGridWorld(m,n,moves) создает мир сетки GW из размера m- n с действиями, заданными moves.

Примеры

свернуть все

В данном примере рассмотрите мир сетки 5 на 5 со следующими правилами:

  1. Мир сетки 5 на 5 ограничен границами, с 4 возможными действиями (Север=1, Юг=2, Восток=3, Запад=4).

  2. Агент стартует с ячейки [2,1] (вторая строка, первый столбец).

  3. Агент получает вознаграждение +10, если он достигает терминального состояния в ячейке [5,5] (синяя).

  4. Среда содержит специальный скачок от ячейки [2,4] к ячейке [4,4] с вознаграждением +5.

  5. Агент блокируется препятствиями в ячейках [3,3], [3,4], [3,5] и [4,3] (черные ячейки).

  6. Все другие действия приводят к вознаграждению -1.

Во-первых, создайте GridWorld объект с помощью createGridWorld функция.

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]

Теперь установите начальную букву, терминал и состояния препятствия.

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'].

Выходные аргументы

свернуть все

Двумерный мир сетки, возвращенный как GridWorld объект с описанными ниже свойствами. Для получения дополнительной информации смотрите, Создают Пользовательские Среды Мира Сетки.

Размер мира сетки, заданного как [m,n] вектор.

Имя текущего состояния, заданного как строка.

Имена состояния, заданные как вектор строки длины mN.

Имена действия, заданные как вектор строки. Длина Actions вектор определяется moves аргумент.

Actions вектор строки длины:

  • Четыре, если moves задан как 'Standard'.

  • Восемь, moves задан как 'Kings'.

Матрица переходов, заданная как трехмерный массив, который определяет возможные перемещения агента в среде. Матрица переходов T матрица вероятности, которая указывает, как, вероятно, агент переместит от текущего состояния s к любому возможному следующему s' состояния путем выполнения действия aT дают,

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

T :

  • K- K- 4 массива, если moves задан как 'Standard'. Здесь, K = mN.

  • K- K- 8 массивов, если moves задан как 'Kings'.

Вознаградите матрицу перехода, заданную как трехмерный массив, определяет, сколько вознаграждения агент получает после выполнения действия в среде. R имеет ту же форму и размер как матрица переходов T. Вознаградите матрицу перехода R дают,

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

R :

  • K- K- 4 массива, если moves задан как 'Standard'. Здесь, K = mN.

  • K- K- 8 массивов, если moves задан как 'Kings'.

Имена состояния, которые не могут быть достигнуты в мире сетки, задали как вектор строки.

Терминальное состояние называет в мире сетки, заданном как вектор строки.

Введенный в R2019a