exponenta event banner

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: []

Среду grid world можно визуализировать с помощью plot функция.

plot(env)

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

свернуть все

Число строк в сетке, указанное как скаляр.

Число столбцов в сетке, указанное как скаляр.

Имена действий, указанные как 'Standard' или 'Kings'. Когда moves имеет значение

  • 'Standard', действия ['N';'S';'E';'W'].

  • 'Kings', действия ['N';'S';'E';'W';'NE';'NW';'SE';'SW'].

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

свернуть все

Двумерный сеточный мир, возвращенный как GridWorld со свойствами, перечисленными ниже. Дополнительные сведения см. в разделе Создание пользовательских сред Grid World.

Размер сетки, указанный как [m,n] вектор.

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

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

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

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

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

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

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

T (s, s ', a ) = вероятность (s' | s, a).

T является:

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

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

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

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

R является:

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

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

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

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

Представлен в R2019a