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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что дальше

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

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

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

Обложка:

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

Корректор:

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

Вёрстка:

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

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

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

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

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

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

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

medium
Зачем мы проходили тригонометрию в школе

Чтобы делать классные 3D-игры

medium
Как работает счётчик Яндекс Метрики изнутри

Разбираемся в самом популярном инструменте маркетологов

hard
Что такое легаси в коде

Однажды, Симба, всё это будет твоим

easy
Что нового в мире ноутбукостроения

И в мире остальных полезных девайсов

easy
Кто такой девопс и что он делает

Это как системный администратор и программист в одном лице.

easy
8 фраз, от которых нужно отказаться программисту

Ни слова больше

hard
easy
[anycomment]
Exit mobile version