Как выиграть в самой сложной игре мира
easy

Как выиграть в самой сложной игре мира

Поручим это нейронке.

Самая сложная игра в мире — так официально называется аркадная игра, где вы должны пройти от одного безопасного места к другому. Сложность в том, что ваша скорость намного меньше, чем скорость движущихся препятствий. Когда они вас настигают — всё обнуляется и игра начинается сначала. Если хотите попробовать свои силы — попробуйте.

Выглядит это так:

Аркадная игра

Наш старый знакомый Эван (он же CodeBullet) написал нейронку, которая научилась выигрывать в эту игру, и снял об этом видео. Если знаете английский, лучше посмотрите видео, там довольно забавно всё происходит. Для остальных мы приготовили текстовую версию того, что происходит у Эвана:

Пишем саму игру

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

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

Поэтапно это выглядело вот так:

Рисуем стены, безопасные зоны и игровое поле
Шарики просто меняют своё направление на противоположное при отскоке
А вот тут Эван добавил красный квадратик, но забыл прописать, что нельзя заходить за стены и касаться синих шариков. Бывает :)

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

Пишем нейронку

Сначала Эван взял за основу стандартный алгоритм:

  1. В каждом поколении есть множество квадратиков, которые действуют одинаково.
  2. Каждый квадратик может пойти куда угодно.
  3. Те квадратики, которые дольше всего проживут, берутся за основу для следующего поколения нейросети.
  4. Так, шаг за шагом, у нас получится алгоритм, в котором будут самые жизнеспособные квадратики.

Посмотрим, что из этого получится:

Выглядит очень хаотично

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

Новый алгоритм — дойти как можно дальше

Поменяем алгоритм на такой:

  1. У нас снова есть поколения квадратиков, каждое из которых опирается на лучших из предыдущего.
  2. В следующий этап проходит только тот квадратик, который прошёл дальше остальных (даже если ему пока просто повезло).
  3. Но для начала нужно, чтобы квадратики научились выходить из зелёной зоны.

С такими параметрами всё стало интереснее — квадратики научились выходить из безопасной зоны. Чтобы обучение шло продуктивнее, на старте у квадратиков есть только 10 ходов, но с каждым поколением количество доступных ходов увеличивается на 5. Получается, что каждое новое поколение может ходить дальше, чем предыдущее, учитывая прошлый опыт. Кажется, это то, что нужно.

Почувствуйте разницу между поколениями и посмотрите, как они выбираются из безопасной зоны:

Первое поколение
Двадцатое поколение — совсем другое дело

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

Избегаем синих шариков

Будем учить так: столкновение с синим шариком — это плохо, и в нейронку уходит соответствующий сигнал, мол, постарайся так не делать. Проблема в том, что квадратик слишком медленный, чтобы реагировать сразу, поэтому ему нужно научиться заранее прогнозировать своё поведение и стараться избегать столкновения.

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

Начало обучения. Пока всё плохо
Уже намного лучше, но есть проблема с самым последним шариком
Ура, у нас есть победитель!

На 50-й итерации обучения искусственный интеллект наконец-то довёл квадратик до второй зелёной зоны. Но это не идеальная модель — чтобы закрепить результат, нужно её прогнать таким же образом ещё много-много раз.

Вывод такой: не всегда изначальный параметр — правильный. Если бы мы не поменяли алгоритм с долгожительства квадратиков на преодоление препятствий, то ничего бы не получилось. Но каждая такая ошибка — шаг на пути к верному решению. Помните это и не сдавайтесь.

Что дальше

Дальше мы попробуем написать эту игру сами.

А потом напишем нейронку, которую тоже научим сами.

Круто? Круто! Поэтому подписывайтесь, делитесь с друзьями и не пропускайте новые проекты.

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
Как писали игры для приставок: чудеса оптимизации и жёсткий кодинг
Как писали игры для приставок: чудеса оптимизации и жёсткий кодинг

Для всех, кто вырос, проходя восьмибитного Марио.

medium
Большой разбор: как ИИ играет в змейку
Большой разбор: как ИИ играет в змейку

Современные технологии против игры прошлого века.

medium
Большой разбор: ИИ научился играть в динозаврика из Chrome
Большой разбор: ИИ научился играть в динозаврика из Chrome

Тот редкий случай, когда хочешь остаться без интернета.

medium
Unreal Engine: что умеет, кто его использует и как научиться с ним работать
Unreal Engine: что умеет, кто его использует и как научиться с ним работать

Самый мощный из универсальных игровых движков

easy
Лучшие языки программирования для старта в 2022 году
Лучшие языки программирования для старта в 2022 году

Можно работать удалённо

easy
Что ещё полезного можно сделать со своим сервером
Что ещё полезного можно сделать со своим сервером

Когда айтишнику нечем заняться, он ставит что-то на сервер

easy
Как работает сортировка расчёской
Как работает сортировка расчёской

Улучшаем пузырьковую сортировку.

easy
Создаём свою модель распознавания лиц на Python
Создаём свою модель распознавания лиц на Python

Быстро собираем датасет и сразу используем его для обучения

easy
Что посмотреть: ютуб-каналы для ИТ-специалистов
Что посмотреть: ютуб-каналы для ИТ-специалистов

Сами смотрим и вам советуем

easy
easy