Глава 11. Основы глубокого обучения с подкреплением
449
Основное отличие, по сравнению с постановкой задачи «тележка — шест»
(см. табл. 11.1), состоит в структуре вознаграждения. В задаче змейки агент получает
положительные вознаграждения (+10 за каждый съеденный фрукт) лишь изред
ка — то есть лишь после определенного количества отрицательных вознаграждений,
вызванных перемещениями змейки, необходимыми для достижения фрукта. При дан
ном размере доски два положительных вознаграждения могут отстоять друг от друга
на 17 ходов, даже если змейка движется самым оптимальным образом. Небольшое
отрицательное вознаграждение — мера, заставляющая змейку двигаться по самому
короткому пути. Без этой меры змейка могла бы петлять самым замысловатым путем
и все равно получить то же вознаграждение, что излишне затянуло бы игру и процесс
обучения. Кроме того, вследствие именно подобной разреженной сложной структуры
вознаграждений главным образом и не получится воспользоваться для решения этой
задачи градиентным спуском по стратегиям и методом REINFORCE.
JavaScript-API змейки
Нашу реализацию игры «Змейка» вы можете найти в файле
snake-dqn/snake_game.js
.
Мы опишем только API класса
SnakeGame
и избавим вас от утомительных подроб
ностей реализации, которые вы можете при желании изучить сами. Синтаксис
конструктора класса
SnakeGame
— следующий:
const game = new SnakeGame({height, width, numFruits, initLen});
Размеры доски по умолчанию,
height
и
width
, равны 9.
numFruits
— количество
присутствующих на доске в любой момент времени фруктов; по умолчанию — 1.
initLen
— начальная длина змейки — по умолчанию равна 2.
Метод
step()
объекта
game
позволяет вызывающей стороне сделать ход в игре:
const {state, reward, done, fruitEaten} = game.step(action);
Аргумент метода
step()
отражает выполняемое действие: 0 — двигаться прямо,
1 — повернуть налево, 2 — повернуть направо. Возвращаемое методом
step()
зна
чение включает следующие поля.
z
z
state
— новое состояние доски, сразу же после действия, в виде простого объекта
JavaScript с двумя полями:
•
s
— занимаемые змейкой клетки в виде массива координат
[x,
y]
. Элементы
массива упорядочены: первый элемент соответствует голове змейки, а по
следний — хвосту;
•
f
— координаты
[x,
y]
занимаемых фруктами клеток.
Отметим, что это представление состояния игры специально сделано как мож
но более экономичным, поскольку алгоритму Qобучения приходится хранить
большое число (например, десятки тысяч) подобных объектов состояния, как мы
вскоре увидим. Или же можно использовать массив или вложенный массив для
фиксации состояния каждой клетки доски, включая пустые. Но при этом память
будет использоваться намного менее эффективно.
450
Do'stlaringiz bilan baham: |