Этот процесс использовался во время моей диссертации в рамках программы бакалавриата Школы военно-морской архитектуры и морской инженерии Национального технического университета Афин.

Диссертация посвящена использованию обучения с подкреплением для минимизации общего потребления судового топлива (TFOC).

Введение

Каждый раз, когда вы запускаете эксперимент с RL, каждый раз, когда ваш агент взаимодействует с вашей средой, создаются некоторые данные, которые вы определенно хотели бы проверить, чтобы оценить свой процесс.

Вы всегда можете получить их с помощью крючка. Однако, поскольку от проекта к проекту то, что вы на самом деле хотели бы проверить, может отличаться, сегодня мы обсудим, как создать индивидуальный хук, взяв в качестве примера мой последний проект.

Содержание

  • Документация
  • Пример
  • Индивидуальная утилита хука
  • Кодирование

Документация

Уже есть руководство «Как пользоваться хуками?» в документации ReinforcementLearning.jl.

Кроме того, уже есть некоторые общие хуки, которые вы можете использовать, такие как StepsPerEpisode() и RewardsPerEpisode().

Однако вам может понадобиться что-то более конкретное, чего еще не существует. В этом случае вам придется создать свой собственный кастомизированный хук.

Что вам нужно понять с самого начала, так это то, что вы можете контролировать свой хук на разных временных этапах, и это очень удобно. Временные этапы, которые вы можете использовать:

  • Предэкспериментальная стадия
  • Этап перед эпизодом
  • PreActStage
  • Стадия последействия
  • Этап после эпизода
  • постэкспериментэтап

Жирным шрифтом выделены этапы, которые я использовал в своем проекте.

Пример

Я хотел проверить, что произошло с позицией, скоростью и вознаграждением моего агента во время его взаимодействия с окружающей средой.

На этом этапе я пытался научить агента переходить из начальной точки в конечную за минимальное общее время. Это происходит, когда агент следует кратчайшему пути, используя максимально доступную скорость.

Вот почему мне было не только интересно проверить награды или шаги, но я хотел знать точные позиции и скорости для каждого эпизода.

Индивидуальная утилита хука

Вы можете подумать, что в этом нет необходимости, поскольку вы можете узнать все, что вам нужно знать о процедуре обучения, просто просмотрев награды.

Что ж, возможность проверять более конкретные вещи дает вам более полное понимание того, что происходит. Например, на тренировке я попал на локальные оптимы. Я мог видеть, что обучение останавливается в точке, которая меня не устраивала, но я не мог понять, почему это произошло, пока не проверил маршруты, по которым следовал мой агент.

Так как я назначал ему наказание, равное времени, необходимому для перехода из одного состояния в другое, мой агент вычислил, что оно получит меньшее наказание, если попытается следовать прямым линиям, а не совершать затратные по времени маневры. Это привело к прохождению конечной точки, даже если она была рядом с ней, потому что она отказывалась поворачиваться, чтобы получить меньшее наказание.

Кодирование

Моим желаемым результатом был вектор векторов для всего вышеперечисленного, чтобы держать внутри то, что происходит в каждом эпизоде ​​(каждый внутренний вектор соответствует эпизоду).

Вот код:

Что важно учитывать:

  • Каждый используемый этап времени должен включать в качестве ссылки ваш агент (политику) и вашу среду. Понятно, зачем это нужно. На результаты ловушки влияет как выбранная вами политика, так и среда, в которой агент выполняет свои действия.
  • Хук должен быть построен с использованием изменяемой структуры, если вы собираетесь время от времени менять внутренние элементы.

Спасибо за чтение. Я очень надеюсь, что эта статья помогла вам.