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