Найти тему

NeyroGamer или искусственный интеллект играющий в гонки. Часть 2

Всем привет и это вторая часть из серии статьей про искусственный интеллект играющий и видео игры. Кто не видел первую часть - советую заглянуть.

Ошибка одной из лучших  особей, результат - авария, вылет с трассы.
Ошибка одной из лучших особей, результат - авария, вылет с трассы.

В этой статье:

  1. Находим вражеские машинки и учимся их обгонять
  2. Ведение понятия отклонения от центра дороги и его влияние на очки особи
  3. Оптимизация обучения

Поехали!

Для того, что бы понять в какую сторону двигаться дальше я решил сам попробовать пройти пару карт(и понял что это не так легко!). Самое полезное чему можно было обучить нашу модель - обгонять противников на прямых участках. Если вы помните для анализа дороги мы берём её отклонение от центра в 10 полосах. Вот как это выглядит при визуализации

Зелёные точки обозначают центр дороги на каждой из полос.
Красные точки - отслеживаю "вражеские" автомобили.
Зелёные точки обозначают центр дороги на каждой из полос. Красные точки - отслеживаю "вражеские" автомобили.

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

Следующим шагом было добавление наказания за большое отклонение от центра дороги. Это добавило стремления держаться по центру, не вылетать за повороты. Именно то, что нужно!

Для ускорения обучения я добавил следующие параметры:

  1. Время тестирования каждой особи растёт от эпохи к эпохе. Это оставляет всех особей в равных условиях. Но на первых эпохах ускоряет тестирование, так как многие просто стоят, и тестировать таких не обученных особей долго не надо. Когда многие из них умеют ехать, а возможно и лавировать между врагов, мы доезжаем до первого поворота когда научились проходить его, до второго и тд.
  2. После 5 секунд от старта действует правило - тот, кто теряет скорость ниже 80 единиц - выбывает. Это позволяет отсеять особь которая врезалась. Скорее всего она уже безнадёжно отстала от остальных и можно начинать тестирование следующей особи.

Для удобного тестирования добавил вывод информации и видео с наложенной доп информацией на веб-сервер.

Данные о 10 особях. Их очки и средняя скорость.
Данные о 10 особях. Их очки и средняя скорость.

Для погружённых в тему или желающих посмотреть как все работает изнутри я оставляю ссылку на мой репозиторий. Там я веду свою разработку - https://github.com/StepanovPlaton/NeyroGamer

Блог команды - http://karandashsamodelkin.blogspot.com