Создайте двумерный мир сетки для обучения с подкреплением
В данном примере рассмотрите мир сетки 5 на 5 со следующими правилами:
Мир сетки 5 на 5 ограничен границами, с 4 возможными действиями (Север=1, Юг=2, Восток=3, Запад=4).
Агент стартует с ячейки [2,1] (вторая строка, первый столбец).
Агент получает вознаграждение +10, если он достигает терминального состояния в ячейке [5,5] (синяя).
Среда содержит специальный скачок от ячейки [2,4] к ячейке [4,4] с вознаграждением +5.
Агент блокируется препятствиями в ячейках [3,3], [3,4], [3,5] и [4,3] (черные ячейки).
Все другие действия приводят к вознаграждению -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)

m — Количество строк мира сеткиКоличество строк мира сетки в виде скаляра.
n — Количество столбцов мира сеткиКоличество столбцов мира сетки в виде скаляра.
moves — Имена действия'Standard' (значение по умолчанию) | 'Kings'Действие называет в виде любого 'Standard' или 'Kings'. Когда moves установлен в
'Standard', действиями является ['N';'S';'E';'W'].
'Kings', действиями является ['N';'S';'E';'W';'NE';'NW';'SE';'SW'].
GW — Двумерный мир сеткиGridWorld объектДвумерный мир сетки, возвращенный как GridWorld объект с описанными ниже свойствами. Для получения дополнительной информации смотрите, Создают Пользовательские Среды Мира Сетки.
GridSize — Размер мира сетки[m,n] векторРазмер мира сетки в виде [m,n] вектор.
CurrentState — Имя текущего состоянияИмя текущего состояния в виде строки.
Actions — Имена действияДействие называет в виде вектора строки. Длина Actions вектор определяется moves аргумент.
Actions вектор строки длины:
Четыре, если moves задан как 'Standard'.
Восемь, moves задан как 'Kings'.
T — Матрица переходовМатрица переходов в виде трехмерного массива, который определяет возможные перемещения агента в среде. Матрица переходов T матрица вероятности, которая указывает, с какой вероятностью агент переместит от текущего состояния s к любому возможному следующему s' состояния путем выполнения действия aT дают,
T :
K- K- 4 массива, если moves задан как 'Standard'. Здесь, K = mN.
K- K- 8 массивов, если moves задан как 'Kings'.
R — Матрица вознаграждений при переходеМатрица вознаграждений при переходе в виде трехмерного массива, определяет, сколько вознаграждения агент получает после выполнения действия в среде. R имеет ту же форму и размер как матрица переходов T. Матрица вознаграждений при переходе R дают,
R :
K- K- 4 массива, если moves задан как 'Standard'. Здесь, K = mN.
K- K- 8 массивов, если moves задан как 'Kings'.
ObstacleStates — Имена состояния, которые не могут быть достигнуты в мире сеткиИмена состояния, которые не могут быть достигнуты в мире сетки в виде вектора строки.
TerminalStates — Конечное состояние называет в мире сеткиКонечное состояние называет в мире сетки в виде вектора строки.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.