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

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

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

Помните, раньше была такая игра — змейка? Она появилась в 70-х, и в неё играли на всём: от компьютеров и приставок до кнопочных телефонов. Например, если вы пропустили то время, это могло выглядеть вот так:

Смысл игры:

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

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

Австралийский программист Эван, он же CodeBullet, научил искусственный интеллект играть в эту игру и сделал об этом видео:

Если вы знаете английский, просто смотрите и получайте удовольствие, а если нет — мы приготовили подробный разбор того, что происходит в ролике.

Начало: 5 разных алгоритмов

В самом начале Эван экспериментировал с нейросетью, чтобы найти лучший алгоритм для игры в змейку. В итоге у него получилось 5 разных алгоритмов, каждому из которых он дал своё имя. Они отличались стилем игры, поведением в разных ситуациях и результативностью.

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

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

Лена. Она умнее Стёпы, двигается более предсказуемо, а ещё у неё классно получается избегать столкновения с собой. Это важное умение для змейки, потому что если голова упрётся в хвост или в тело — игра закончится.

Лена отлично умеет выбираться из сложных ситуаций.

Миша. Быстрая, эффективная змейка почти без единого лишнего движения. Миша почти идеален, но этого недостаточно.

Коля. Умеет собирать много кусочков, но когда становится совсем длинным, то размер начинает ему мешать.

Сёма. Чемпион среди этих версий, потому что только он смог набрать 136 очков — больше, чем остальные кандидаты.

Собираем в одно целое

Можно было остановиться на Сёме, но Эван решил пойти дальше и подумал: «А что если объединить эти змейки в одну, чтобы вместе они работали максимально эффективно?»

Для этого программист сделал одну большую нейросеть, в которую поместил 5 змеек по такому алгоритму:

  1. Перед каждым следующим шагом каждая из пяти змеек говорит, как бы она поступила в этой ситуации.
  2. Отдельная нейросеть смотрит на варианты и выбирает лучший из них.
  3. Змейка делает шаг, и всё начинается сначала.

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

Добавляем цвета

Чтобы стороннему наблюдателю было понятно, что происходит на экране и о чём именно «думает» нейронка, Эван придумал раскрашивать змейку в разные цвета:

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

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

Например, тут явно Степан.
А вот тут Лена помогает Стёпе не врезаться в самого себя.

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

Даже тут виден кусочек Стёпы :-)
Новая змейка побила рекорд Сёмы, и даже с такой длиной она легко движется дальше.
Начались первые проблемы: белый цвет означает, что змейке не до еды и нужно выбираться из такой ситуации.
А вот отсюда змейка уже выбраться не сумеет, хотя путь для выхода у неё есть. Рекорд — 204 очка.

Запустим снова и проверим, получится ли побить этот рекорд:

200 очков и почти катастрофа, но змейка всё же нашла решение. Поразительно.
Набрав 228 очков, змейка внезапно врезается в свой хвост, хотя места в середине достаточно для трёх таких змеек.

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

Что дальше

Дальше как обычно — новые большие разборы, объяснение того, как работают нейросети и как это применить на практике. Лайк, подписка, все дела.

Обложка:

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

Корректор:

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

Вёрстка:

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

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

Зачем нужен контроль версий и что делать, если ваши друзья его используют

easy
Как на самом деле работает Wi-Fi

Пособие для тех, кому нужно больше, чем пароль.

easy
Новая задача про хитрого электрика

На этот раз у него 49 проводов, но он справится.

hard
Если вы гуманитарий, вы очень нужны в ИТ

Самое простое объяснение, почему технарям не обойтись без гуманитариев.

easy
Как стать богатым программистом

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

easy
Как защитить сайт от хакерских скриптов

Включите политику безопасности.

medium
«Никто не верил, что я сама пишу код»

Анастасия Никулина: о дата-сайнс, ютубе и программировании.

10 главных конструкций языка C

Простое введение в сложный язык.

easy
Что такое this в JavaScript

Это «это», но что именно означает — зависит от контекста

hard
medium
[anycomment]
Exit mobile version