createGridWorld

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

Синтаксис

GW = createGridWorld(m,n)
GW = createGridWorld(m,n,moves)

Описание

пример

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

GW = createGridWorld(m,n,moves) создает мир сетки GW размера m-by-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: [25×1 string]
           Actions: [4×1 string]
                 T: [25×25×4 double]
                 R: [25×25×4 double]
    ObstacleStates: [0×1 string]
    TerminalStates: [0×1 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: [1×1 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].

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

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

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

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

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

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

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

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

T:

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

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

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

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

Ris :

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

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

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

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

Введенный в R2019a

Для просмотра документации необходимо авторизоваться на сайте