Что русскому хорошо, динозавру вымирание
С просторов ВК.
С просторов ВК.
Благодаря домашнему интернету от МТС сегодня я обновил личный рекорд в игре с прыгающим динозавриком
Не знаю было ли это, в одном из каналов в телеграмме, парень озадачился игрой в браузере "Dino" всем известная игра при отсутствии интернета.
примерно за пару дней, разработал модель и сделал эту игру. Вот что получилось.
Ссылка на то как он ее делал
Цену назвал сразу: 100 000$
И вот второе видео полной доработанной версии
А Вы знали, что когда на гаджете нет интернета, можно поиграть? Я тоже не знал. Дочь случайно нашла игру. Оказывается при отсутствии интернет в Google Chrome если нажать на динозавра, то открывается оч простая но занятная игра.. Сидим минут 20 залипаем.
В браузере Google Chrome есть игра с динозавриком. Когда нет интернета, браузер показывает такое:
Если нажать на пробел, то динозаврик оживёт, и ваша задача — управлять им с помощью пробела (прыжок) и стрелочки вниз (присесть), чтобы не сталкиваться с препятствиями.
Недавно в Chrome добавили возможность поиграть в эту игру даже с интернетом: вбейте в адрес chrome://dino
Программист из Австралии по имени Эван (на Ютубе — CodeBullet) написал нейросеть, которая сама играет в эту игру, и выложил об этом видео:
Спойлер: в конце ИИ просто рвёт игру на части.
Давайте по шагам разберём, что он сделал и что у него получилось в итоге. Сам ролик на английском, поэтому, если вы не знаете английского, считайте эту статью смысловым переводом происходящего.
Создание игры
Можно научить ИИ играть в игру, просто глядя на экран и анализируя всё, что там происходит. Но тогда быстродействие ИИ будет ограничено скоростью работы экрана, то есть на каких-то сверхскоростях ИИ играть уже не сможет. А мы хотим играть на сверхскоростях, поэтому эффективнее будет встроить ИИ прямо в игру.
Пол и прыгучий персонаж. Чтобы попробовать первую версию игры как можно быстрее, Эван не рисует динозавра, а делает вместо него прыгающий прямоугольник. С поверхностью то же самое: простая линия вместо дороги с перспективой и песком в случайных местах. Единственное, что пока можно в игре — прыгать прямоугольником на месте:
Кстати, если вы обратите внимание на игру в Chrome, то заметите, что хотя динозаврик (по ощущениям) бежит по земле, на самом деле его координата X на экране не меняется. Можно представить, что это не динозаврик бежит, а кактусы летят на него со всё более высокой скоростью. Иллюзия!
Движение и препятствия. На следующем шаге Эван делает так, чтобы на динозаврика двигались кактусы. Но кактусы тоже рисовать долго, поэтому снова берём прямоугольники. Сначала делаем их маленькими и смотрим, что происходит:
Пока всё хорошо: персонаж прыгает, прямоугольники двигаются. Можно сделать следующий шаг — добавить кактусы разной высоты и ширины, как в оригинальной игре. И снова это всё ещё прямоугольники:
Смерть от кактусов. Последнее, что делает Эван — добавляет в игру условие, что как только персонаж коснулся кактуса, то умирает. Это делается просто проверкой пересечения границ одного и второго объекта. Коснулся кактуса — всё исчезло:
Теперь всё готово для первой версии, можно поиграть и проверить, всё ли там происходит как надо.
Эван не начал программировать сразу всю игру с динозаврами, графикой и красивыми кактусами. Вместо этого он сделал макет игры и физику; потом убедился, что всё работает; и только после этого заменил прямоугольники на динозавра и кактусы, а линию на полу — на дорогу с песком. Всё это он просто вырезал из игры и вставил в свой проект:
За кадром осталось то, как Эван делал птиц: они могут летать низко, повыше или совсем высоко. Но мы уже понимаем, что сначала это был прямоугольник выше линии, а потом его заменили на картинку с птицей.
Динозаврику тоже пришлось научиться пригибаться — прямоугольник, который уменьшал свою высоту, превратился в пригибающегося динозаврика:
Нейросеть
Когда игра готова, можно к ней прикручивать искусственный интеллект. Для этого Эван пишет простую самообучающуюся нейросеть, которая работает по принципу обучения с подкреплением. Это значит, что ИИ сначала ничего не знает о мире, в который его поместили, и его задача — определить для себя правила, которые помогут играть в игру как можно дольше.
Если очень коротко, то это работает так:
- делают первое поколение сети;
- запускают её в игру и смотрят результат;
- те версии первого поколения, которые показали наилучшие результаты или дольше всех играли, остаются, а остальные убираются;
- эти удачные версии снова запускают в игру и тоже смотрят, какие из них покажут наилучший результат;
- новых везунчиков оставляют, остальных убирают, и всё повторяется до тех пор, пока ИИ не научится полностью проходить игру.
Первая версия ИИ, которую сделал Эван, просто прыгала случайным образом, и, если повезёт, то перепрыгивала кактусы:
Синяя линия — связь между параметрами игры и действием динозаврика. Пока всё примитивно.
У первых нескольких поколений ИИ была примитивная тактика: просто прыгаешь и надеешься, что интервал прыжков совпадёт с расстояниями между кактусами. Это не сработало, поэтому к седьмому поколению нейросеть нашла взаимосвязь между расстоянием до препятствия, расстоянием между препятствием и моментом, когда надо подпрыгивать:
Цветные линии вверху — это связи внутри нейросети в упрощённом виде. Видно, как одни параметры начинают влиять на другие.
Теперь ИИ умеет дожидаться, пока кактусы не окажутся достаточно близко для прыжка, вместо того чтобы перепрыгивать их случайным образом.
Интересный момент: так как Эван использует самообучающуюся нейросеть, то мы можем заметить, как в некоторых моментах динозаврик раздваивается или распадается на множество частей.
Это связано с тем, что ИИ постоянно проверяет, что лучше: прыгнуть чуть раньше или чуть позже. И если какая-то стратегия даёт результат лучше, чем у остальных вариантов — ИИ делает эту стратегию базовой и в следующем поколении опирается уже на неё.
25-е поколение — здесь появилась реакция на низко летящего птеродактиля (в авторском тексте значится утка): нужно пригнуться.
40-е поколение — связи поменялись, чтобы приспособиться к высокой скорости игры, когда кактусы за секунду пролетают от одного края до другого.
43-е поколение — визуально отличие не сильно заметно, но некоторые линии в связях стали толще. Это значит, что одни коэффициенты и параметры стали сильнее влиять на другие.
Финал
К сорок третьему поколению нейросеть Эвана научилась играть в динозаврика с такой скоростью, которая выходит за пределы человеческих возможностей. Именно для этого и используют ИИ — чтобы помочь человеку справляться с задачами ещё лучше, чем он это делает сейчас.
Есть и другие
На Ютубе много примеров, как нейросети учатся играть в эту игру. Подходы существуют разные, но чаще всего вы увидите какие-то эволюционные или генетические алгоритмы, смысл которых в одном: случайным образом мутируешь много исходных персонажей, проверяешь их, отбираешь лучшего, потом делаешь ему копии и случайным образом мутируешь их. И так шаг за шагом, поколение за поколением удачные мутации укрепляются, а ненужные пропадают.
Так как машины могут прогонять поколения очень быстро, буквально за секунды, за несколько часов можно обучить нейронку какой-нибудь несложной игре, даже если она не знает её правил. А за дни, недели и месяцы можно обучить и более сложным играм.
Помните игру про чёрно-белого динозаврика, бегущего через препятствия, которая появляется в Chrome при отсутствии подключения к интернету? Практика показывает, что многие не прочь позалипать в этом раннере даже при наличии соединения, но не имеют представления о том, как его активировать, не отключая интернет принудительно. Видимо, поэтому Google решила, что раз пользователям так нравятся браузерные игры, не стоит ограничивать их одним только динозавриком, а дать возможность выбирать, во что они хотят играть.
Google работает над созданием отдельного раздела с играми, доступ к которым можно получить из Chrome в любое время. Уже сейчас известно, что, помимо бегущего динозаврика Дино, пользователи смогут запускать не теряющую своей популярности змейку, сапёр и, возможно, какие-то другие игры. На их появление указывает упоминание в разделе “Выбор редакции”, который также появится в каталоге. Видимо, Google всерьёз решила, что возможность иметь постоянный доступ к тайм-киллерам, помогающим скоротать время в моменты ничегонеделания, — это то, что нужно её пользователям.
Игры в Google Chrome
Судя по всему, в перспективе это будет своего рода Google Chrome Store с широким ассортиментом веб-игр, которые так или иначе знакомы пользователям. Именно легендарность и должна подтолкнуть их к запуску — по крайней мере для того, чтобы вспомнить времена косынки, пасьянса и солитера. Но удастся ли Google удержать пользователей надолго? Сомневаюсь. Во всяком случае, пока Google просто прорабатывает эту концепцию и даже не нарисовала для каталога игр соответствующего оформления.
Безусловно, добавление в Chrome пары-тройки новых игр не будет лишним. Однако в то же время желание поискового гиганта превратить браузер в подобие игровой площадки похоже на пир во время чумы. В конце концов, не так уж и часто большинству из нас доводится бесцельно сидеть перед монитором компьютера, чтобы искать способы занять себя. Поэтому не очень понятно, кто вообще будет играть в игры в браузере. Ретрограды, скорее всего, не предадут старую-добрую косынку, продвинутые пользователи лучше возьмут в руки смартфон, а тем, у кого просто отключился интернет, будет достаточно пробежать пару забегов вместе с Дино.
Каталог расширений Chrome
Куда логичнее для Google, на мой взгляд, было бы заняться переосмыслением каталога расширений, который сегодня выглядит как привет из прошлого. В нём нет ни удобной системы навигации, ни грамотного распределения расширений по каталогам, ни постоянно пополняющегося ассортимента. В результате большинство заходят в каталог только один раз — для установки блокировщика рекламы и в лучшем случае расширения для оповещения о входящих письмах и сообщениях их социальных сетей.