createGridWorld

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

Описание

пример

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: [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] вектор.

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

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

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

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

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

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

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

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

T является:

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

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

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

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

R является:

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

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

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

Имена конечных состояний в мире сетки, заданные как строковый вектор.

Введенный в R2019a