Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexeyev/riding-the-sine-wave
...and generating ugly state-action maps for MountainCar-v0
https://github.com/alexeyev/riding-the-sine-wave
elephants mountain-car-problem openai-gym q-learning reinforcement-learning-excercises
Last synced: 2 days ago
JSON representation
...and generating ugly state-action maps for MountainCar-v0
- Host: GitHub
- URL: https://github.com/alexeyev/riding-the-sine-wave
- Owner: alexeyev
- Created: 2020-04-18T16:23:50.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-07-25T11:01:28.000Z (6 months ago)
- Last Synced: 2024-11-11T01:37:04.954Z (2 months ago)
- Topics: elephants, mountain-car-problem, openai-gym, q-learning, reinforcement-learning-excercises
- Language: Python
- Size: 213 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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
Решение — нормальный такой дип ку-лёрнинг, в обучение добавлен некоторый читинг (ну или хакинг или шейпинг или трюки, если угодно).
![Карта: действие в зависимости от состояния](https://github.com/ivan-semyonich/tuda-syuda/blob/master/pics/actions_space_1586042498.png)
1. Чтобы агент побыстрее научился отползать с мёртвой точки и учился не целую вечность,
**хвалим его за прирост в скорости**.
2. [**ОТКЛЮЧЕНО**] В начале обучения в историю мы сохраняем в том числе симметричные случаи
(хоть задача и несимметрична, "раскачка" между холмами полезна).
3. В одном месте к признакам состояния добавляем их же, возведённые в квадрат (потому что если бы я писал эвристику,
там бы были квадраты расстояния; так пусть машина сама подберёт что-то подобное). Ненужные члены полинома элиминируем
гейтом, то есть линейным слоем + сигмоидой.
4. Близость до флажка решил не добавлять в обновлённый реворд, уж совсем читерство.Пробовал что-то вроде Brain Damage, тупое усреднение, добавление шума в веса, добавление шума в данные (вообще оно-то
как раз должно было помочь, потому что у позиции и скорости есть свойство локальности) — и ещё много что. Кое-что удалил,
кое-что осталось в виде закомментированного кода (но я старался, чтобы было аккуратно).Сохраняю раз в несколько шагов "карту" выученного поведения агента, а также историю ревордов. Довольно прикольно —
и много рассказывает о задаче и пространствах решений.## Howto
- точка входа — `main.py`
- архитектура агента и её обёртка — в `model.py`
- обновлённая награда — в `training.py`
- память (просто циклический буфер) — в `memory.py`
- рисование картинок — в `utils.py`![Ход обучения](https://github.com/ivan-semyonich/tuda-syuda/blob/master/pics/results_training_1586042492.png)
Бонусом пара неравенств, которые решают задачу, взяты с интернета
и в виде готового кода лежат в файле `deterministic_policy_for_comparison.py`.![Решение на if-ах](https://github.com/ivan-semyonich/tuda-syuda/blob/master/pics/actions_space_DETERMINISTIC_POLICY.png)
Ещё один бонус — интересные и не очень картинки, которые получились в процессе.
![Что бывает, когда изменённое вознаграждение слишком далеко от исходного](https://github.com/ivan-semyonich/tuda-syuda/blob/master/pics/elephants_start_mating-when_you_pull_reward_shaping_levers_too_hard.png)
*Ситуация, когда вознаграждение агенту слишком сильно отличается от исходного. Сделать хотел утюг — слон получился вдруг.*
(Due to certain secrecy measures the code has originally been made available using a fake name: [Ivan Semyonich Golubtsov](https://github.com/ivan-semyonich/tuda-syuda))