Создайте двумерный мир сетки для изучения укрепления
GW = createGridWorld(m,n)
GW = createGridWorld(m,n,moves)
В данном примере рассмотрите мир сетки 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: [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)
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'
состояния путем выполнения действия a
. T
дают,
T
:
K
-by-K-by-4
массив, если moves
задан как 'Standard'
. Здесь, K
= m
*n
.
K
-by-K-by-8
массив, если moves
задан как 'Kings'
.
R
Вознаградите матрицу переходаВознаградите матрицу перехода, заданную как трехмерный массив, определяет, сколько вознаграждения агент получает после выполнения действия в среде. R
имеет ту же форму и размер как матрица Грина T
. Вознаградите матрицу перехода, которую дают R
,
Ris :
K
-by-K-by-4
массив, если moves
задан как 'Standard'
. Здесь, K
= m
*n
.
K
-by-K-by-8
массив, если moves
задан как 'Kings'
.
ObstacleStates
— Имена состояния, которые не могут быть достигнуты в мире сеткиИмена состояния, которые не могут быть достигнуты в мире сетки, задали как вектор строки.
TerminalStates
— Терминальное состояние называет в мире сеткиТерминальное состояние называет в мире сетки, заданном как вектор строки.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.