Этот процесс использовался во время моей диссертации в рамках программы бакалавриата Школы военно-морской архитектуры и морской инженерии Национального технического университета Афин.
Диссертация посвящена использованию обучения с подкреплением для минимизации общего потребления судового топлива (TFOC).
Введение
Каждый раз, когда вы запускаете эксперимент с RL, каждый раз, когда ваш агент взаимодействует с вашей средой, создаются некоторые данные, которые вы определенно хотели бы проверить, чтобы оценить свой процесс.
Вы всегда можете получить их с помощью крючка. Однако, поскольку от проекта к проекту то, что вы на самом деле хотели бы проверить, может отличаться, сегодня мы обсудим, как создать индивидуальный хук, взяв в качестве примера мой последний проект.
Содержание
- Документация
- Пример
- Индивидуальная утилита хука
- Кодирование
Документация
Уже есть руководство «Как пользоваться хуками?» в документации ReinforcementLearning.jl.
Кроме того, уже есть некоторые общие хуки, которые вы можете использовать, такие как StepsPerEpisode() и RewardsPerEpisode().
Однако вам может понадобиться что-то более конкретное, чего еще не существует. В этом случае вам придется создать свой собственный кастомизированный хук.
Что вам нужно понять с самого начала, так это то, что вы можете контролировать свой хук на разных временных этапах, и это очень удобно. Временные этапы, которые вы можете использовать:
- Предэкспериментальная стадия
- Этап перед эпизодом
- PreActStage
- Стадия последействия
- Этап после эпизода
- постэкспериментэтап
Жирным шрифтом выделены этапы, которые я использовал в своем проекте.
Пример
Я хотел проверить, что произошло с позицией, скоростью и вознаграждением моего агента во время его взаимодействия с окружающей средой.
На этом этапе я пытался научить агента переходить из начальной точки в конечную за минимальное общее время. Это происходит, когда агент следует кратчайшему пути, используя максимально доступную скорость.
Вот почему мне было не только интересно проверить награды или шаги, но я хотел знать точные позиции и скорости для каждого эпизода.
Индивидуальная утилита хука
Вы можете подумать, что в этом нет необходимости, поскольку вы можете узнать все, что вам нужно знать о процедуре обучения, просто просмотрев награды.
Что ж, возможность проверять более конкретные вещи дает вам более полное понимание того, что происходит. Например, на тренировке я попал на локальные оптимы. Я мог видеть, что обучение останавливается в точке, которая меня не устраивала, но я не мог понять, почему это произошло, пока не проверил маршруты, по которым следовал мой агент.
Так как я назначал ему наказание, равное времени, необходимому для перехода из одного состояния в другое, мой агент вычислил, что оно получит меньшее наказание, если попытается следовать прямым линиям, а не совершать затратные по времени маневры. Это привело к прохождению конечной точки, даже если она была рядом с ней, потому что она отказывалась поворачиваться, чтобы получить меньшее наказание.
Кодирование
Моим желаемым результатом был вектор векторов для всего вышеперечисленного, чтобы держать внутри то, что происходит в каждом эпизоде (каждый внутренний вектор соответствует эпизоду).
Вот код:
Что важно учитывать:
- Каждый используемый этап времени должен включать в качестве ссылки ваш агент (политику) и вашу среду. Понятно, зачем это нужно. На результаты ловушки влияет как выбранная вами политика, так и среда, в которой агент выполняет свои действия.
- Хук должен быть построен с использованием изменяемой структуры, если вы собираетесь время от времени менять внутренние элементы.
Спасибо за чтение. Я очень надеюсь, что эта статья помогла вам.