项目作者: alexeyev

项目描述 :
...and generating ugly state-action maps for MountainCar-v0
高级语言: Python
项目地址: git://github.com/alexeyev/riding-the-sine-wave.git
创建时间: 2020-04-18T16:23:50Z
项目社区:https://github.com/alexeyev/riding-the-sine-wave

开源协议:

下载


Riding the Sine Line

A common task for RL: MountainCar-v0. A classic control problem: make
an underpowered cart located at the bottom of the valley reach the flag.

I solve it with Q-learning, track the progress and the solution space
by building nice maps and plots while and after training.

Core ideas

Решение — нормальный такой дип ку-лёрнинг, в обучение добавлен некоторый читинг (ну или хакинг или шейпинг или трюки, если угодно).

Карта: действие в зависимости от состояния

  1. Чтобы агент побыстрее научился отползать с мёртвой точки и учился не целую вечность,
    хвалим его за прирост в скорости.
  2. [ОТКЛЮЧЕНО] В начале обучения в историю мы сохраняем в том числе симметричные случаи
    (хоть задача и несимметрична, “раскачка” между холмами полезна).
  3. В одном месте к признакам состояния добавляем их же, возведённые в квадрат (потому что если бы я писал эвристику,
    там бы были квадраты расстояния; так пусть машина сама подберёт что-то подобное). Ненужные члены полинома элиминируем
    гейтом, то есть линейным слоем + сигмоидой.
  4. Близость до флажка решил не добавлять в обновлённый реворд, уж совсем читерство.

Пробовал что-то вроде Brain Damage, тупое усреднение, добавление шума в веса, добавление шума в данные (вообще оно-то
как раз должно было помочь, потому что у позиции и скорости есть свойство локальности) — и ещё много что. Кое-что удалил,
кое-что осталось в виде закомментированного кода (но я старался, чтобы было аккуратно).

Сохраняю раз в несколько шагов “карту” выученного поведения агента, а также историю ревордов. Довольно прикольно —
и много рассказывает о задаче и пространствах решений.

Howto

  • точка входа — main.py
  • архитектура агента и её обёртка — в model.py
  • обновлённая награда — в training.py
  • память (просто циклический буфер) — в memory.py
  • рисование картинок — в utils.py

Ход обучения

Бонусом пара неравенств, которые решают задачу, взяты с интернета
и в виде готового кода лежат в файле deterministic_policy_for_comparison.py.

Решение на if-ах

Ещё один бонус — интересные и не очень картинки, которые получились в процессе.

Что бывает, когда изменённое вознаграждение слишком далеко от исходного

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

(Due to certain secrecy measures the code has originally been made available using a fake name: Ivan Semyonich Golubtsov)