самообучающийся ии для майнкрафт
Эксперименты с искусственным интеллектом в Minecraft
11 April 2016 | Пресс-Центр
В июле этого года ученые-исследователи и даже любители смогут оценить и принять участие в совершенствовании программного обеспечения для обучающихся систем и искусственного интеллекта, создавая свои виртуальные ландшафты Minecraft.
По словам исследователей Microsoft Research, работающих над проектом Malmo, Minecraft обладает более «изощренными» возможностями по сравнению с эмуляторами ИИ, а затраты на адаптацию игры для применения в эксперименте меньше, чем на другие аналогичные разработки.
Один из экспертов подчеркивает, что у игры огромный потенциал. «Это исключительно передовое решение, – говорит профессор Хосе Хернандес-Оралло из Технического университета Валенсии, участник одной из небольших групп исследователей, которые первыми получили доступ к экспериментальному ПО. – Ничего подобного сейчас больше нет. Учитывая, что это только начало, у системы огромные перспективы».
Чтобы принять участие в эксперименте, пользователи должны установить AIX – взаимодействующую с Minecraft программную платформу, которая позволяет коду ИИ управлять персонажем и оценивать результаты его действий. AIX является программой с открытым исходным кодом, следовательно стоимость участия – это всего лишь цена стандартной лицензии на игру.
Эксперимент будет проводиться на компьютерах исследователей, «отгороженных» от прочих игроков. При этом экспериментаторы смогут изменять код программы.
«Люди создают в Minecraft невиданные конструкции с удивительными возможностями, что позволит экспериментаторам повысить потенциал модулей ИИ, – объясняет Катя Хофманн (Katja Hofmann), руководитель проекта Malmo в лаборатории MSR в Кембридже. – А со временем мы сможем пойти еще дальше и добавить задачи, которые позволят агентам ИИ учиться помогать людям, расширяя их творческие возможности. Это позволит нам в ближайшие десятилетия достичь нашей цели: поднять ИИ с нынешнего уровня до уровня, близкого к человеческому интеллекту».
Своими глазами
Играть в видеоигры программы с элементами ИИ научили уже давно. Но в данном случае Microsoft стремится использовать такую особенность Minecraft, как открытость. Она даст ИИ возможность «увидеть» происходящее в игре от первого лица.
«Это позволяет нам реализовать «персонализированный ИИ, – говорит Мэтью Джонсон (Matthew Johnson), ведущий программист проекта AIX. – Иными словами, в нашем случае ИИ не наблюдает за своим аватаром извне, а как бы находится внутри и видит происходящее глазами одной из сущностей, живущей в игровом мире. Мы считаем, что это важный шаг к моделированию общего интеллекта».
Исследователи предполагают, что одним из главных направлений их работы станет обучение методом проб и ошибок, при котором агент ИИ не просто выполняет инструкции, а обучается находить оптимальные решения задач, основываясь на предыдущем опыте и расширяя его в процессе взаимодействия со средой.
Этот подход использует программа AlphaGo, которая недавно обыграла одного из лучших игроков в го, предварительно проведя тысячи состязаний с самой собой, обучаясь новым стратегиям.
В Microsoft считают, что Minecraft предоставляет более широкие возможности для развития ИИ по сравнению с обучением конкретной игре.
«Экспериментаторы должны задействовать такие элементы игры, как лава, которая представляет особую опасность для агента-игрока, и оценить темп, в котором он научится распознавать объекты окружающей среды, – рассказала Катя Хофманн в интервью BBC. – Но платформа открыта и для более общих исследований ИИ, например, в агенты можно добавить языковые и зрительные функции. Мы рассматриваем нашу работу как первый шаг в развитии технологии, которая будет применяться при построении роботов, а сейчас же мы имеем возможность проверить ее в безопасной, полностью контролируемой среде, с минимальными затратами».
Основы ИИ
В MSR подчеркивают: несмотря на то, что платформа AIX ориентирована на специалистов в области ИИ, она также позволит создавать простые программы даже детям, и со временем на AIX выйдут разнообразные учебные материалы.
«Мы хотим привлечь к эксперименту людей разного возраста с различным менталитетом», – говорит Джонсон. А профессор Хосе Хернандес-Оралло поясняет идею: «Дети будут создавать агенты в своих любимых мирах и играть с ними. Это повысит интерес к искусственному интеллекту, и мы рассчитываем на то, что в ближайшие 10-20 лет все больше людей будут работать в этой област
Искусственный интеллект для Minecraft или что такое Malmo?
В марте я уже писал о том, что Microsoft использует Minecraft в качестве полигона для тестирования и обучения собственной системы искусственного интеллекта. Теперь этот проект вышел в публичную область и пробовать его в работе может каждый.
Разработчики рассказывают, что системы ИИ, используемые в настоящее время, служат для понимания или перевода человеческой речи, распознавания лиц и создания собственного текста. Однако конечная цель разработки подобных систем — это создание «сложного искусственного интеллекта» — системы, способной обучаться и принимать решения на основе собственного опыта.
И с этой точки зрения Minecraft оказался идеальным полем: практически бесконечный мир, в котором есть и опасности и огромные возможности для созидания. Почему упрощенной модели мира не стать областью, в которой будет жить и обучаться искусственный интеллект?
Проект, получил название Malmo (название скорее всего происходит от названия крупного шведского города, ведь сам Майнкрафт тоже родом из Швеции) и его уже можно скачать и попытаться использовать. Правда, для того чтобы установить систему искусственного интеллекта для Майнкрафта, придётся немного напрячь свой собственный.
Как установить Malmo
Вот так выяснилось, что Malmo — это мод для Minecraft 1.8
Как пользоваться Malmo
Теперь самое время попробовать систему в действии. Поскольку в комплекте поставляются скрипты для Malmo сразу на нескольких языках программирования, то можно воспользоваться ими. Я обращусь к модулю на Java, но думаю суть будет та же.
Итак, в первую очередь надо запустить Malmo (т.е. запустить launchClient.bat). Ну а потом запускать модуль JavaExamples_run_mission.
Делается это командой (я создал небольшой бат-файл):
Правда, при этом у меня возникли проблемы с тем, что библиотек MalmoJava.dll, расположенная тут же в папке с примером, оказалась «невидима» для Java. В итоге, я её скопировал в какую-то директорию, которая прописана в переменной PATH и всё запустилось нормально.
Выглядело это так: внезапно окно Майнкрафта уменьшило размера, открылся какой-то мир, и в нём стало происходить какое-то движение персонажа. При этом в консоль писались сообщения, а через какое-то время всё замерло.
Собственно просмотреть это можно тут:
И это всё?!
Ну собственно на этом этапе — это действительно всё. Т.е. в комплекте с Malmo нет готового искусственного интеллекта, который принимал бы за Вас решения, строил бы города, ловил рыбу и охотился на медведей (тем более, что Мальмо отстаёт от обычного майнкрафт и работает на версии 1.8, а не 1.10).
Самое главное, как а я понимаю, — это инструмент, который позволит разработчикам создать систему, которая будет «видеть майнкрафт» как человек. Т.е. для взаимодействия с миром Майнкрафта через Мальмо надо будет опираться на действия вида «посмотреть под ноги, если там что-то похоже на лаву не идти туда», а не обращаться к блокам напрямую, используя их координаты. Отправив команду в чат, надо будет проанализировать написанный в ответ текст и т.п. Ну и самое главное, делать это всё это можно используя ту среду разработки, к которой Вы привыкли.
Конечно, же я могу ошибаться, — я пока ещё не заглядывал в документацию и не пробовал написать свой скрипт для Мальмо. Но я обязательно постараюсь это сделать и тогда расскажу подробнее.
А как же Malmo для Minecraft Pocket Edition?
После того как я скачал Malmo, меня больше всего удивило то, что она основана на Майнкрафте для ПК. Развитие линейки MCPE имеет больший приоритет развития и я сейчас больше верю в более скорое появление официального инструментария для программирования в MCPE, чем в появление обещанного много лет назад PluginAPI для обычного Майнкрафта.
Разработчики регулярно упоминают о разработке такого API (например, об этом говорил Томмазо Кекки в интервью порталу multiplayer.it) и казалось бы логичным, что такой инструмент будет использован в рамках такого проекта как Malmo.
Но этого не произошло. И думаю, реальная причина не в том, что API находится в каком-то зачаточном состоянии (если вообще существует), а в том, что в данном случае Forge оказывается более удобным инструментом, чем «мифическое» API, которое как известно скорее всего будет представлять собой скриптовый движок, который не будет давать возможности обращаться к функциям игры на низком уровне. Удел будущего API — это новые виды блоков или мобов, представляющие собой вариации существующих.
В общем, ждать варианта Malmo для MCPE/MCW10E думаю не стоит.
Программируем в мире Minecraft
Хабр, привет! Пока все обсуждают ИИ в мире Pacman, мы начнем делать свой ИИ в Minecraft с фреймворком Malmo от Microsoft Research. Pacman у нас тоже появится. Если вы любите кубический мир, или вам хотелось бы начать изучать искусственный интеллект, или у вас есть дети, с которыми вы не можете найти общие увлечения, или же вас просто заинтересовала тема – прошу под кат.
В этой статье я постараюсь затронуть несколько тем:
Minecraft: моя предыстория
Я познакомилась с игрушкой, будучи уже студенткой. Это не помешало мне в тот же день отложить все свои личные, рабочие и академические цели, и целиком уйти в кубическую вселенную. Отпустило меня тогда только через месяц, но до сих пор я с радостью захожу иногда побегать часок по любимому миру.
Для меня Minecraft стал продолжением любимой игрушки детства – Lego, исправив ее главный недостаток: постоянную нехватку деталей. Аналог Lego с безлимитными деталями, что может быть лучше.
Изучая сабж, я случайно узнала, что мир Minecraft не ограничивается игрой, мерчем, летсплеями и фан артами. В игре снимают целые сериалы, и – неожиданно – они являются довольно популярными. На мой взгляд, это забавно.
Меня очень обрадовала новость о наличии open source фреймворка для программирования в мире Minecraft. Я твердо уверена, что в будущем в подавляющем числе профессий могут понадобиться базовые навыки программирования. Фреймворк на базе любимой игрушки, на мой взгляд, отличный способ показать ребенку захватывающий мир программирования.
Malmo: основная идея
Фреймворк Malmo был создан совместными усилиями нескольких исследователей, главной целью которых было адаптировать интересный мир к экспериментам в области искусственного интеллекта. Алгоритмов ИИ по-прежнему относительно мало, и все они имеют огромный потенциал для более детального изучения и усовершенствования. Мне очень нравится, что Microsoft создает дополнительную мотивацию к изучению неизведанного.
Технические моменты
Установка
Несмотря на четкое следование инструкции, вы можете столкнуться с целым рядом проблем в процессе установки. Мои проблемы в основном были связаны с тем, что некоторые компоненты у меня уже были поставлены, но версия отличалась. Все проблемы лечатся с помощью всем известного сайта.
Поддержка ОС и языков программирования
Несмотря на смелое заявление о поддержке всех трех популярных ОС, мне показалось, что тестирование было как следует проведено лишь для ОС Windows. Победив проблемы с установкой, ваша головная боль на ОС Windows обещает закончиться. На Linux проблемы, скорее всего, продолжатся, так как поднятый сервер периодически падает, не сообщая причин. Если вы продолжите мои эксперименты – обязательно пишите в комментарях о вашем опыте.
Авторы постарались поддержать большое число популярных языков и сделали обвязки для C#, C++, Lua, Python2 и Java. Я выбрала Python.
Как играть программировать в Malmo
Логику для каждого из человечков вы можете реализовать в коде, а также можно управлять персонажем самостоятельно всем знакомыми клавишами AWSD.
Кроме сервака с клиентом и файла с логикой, мы также имеем xml файл с описанием начального состояния мира. Авторы не настаивают на его существовании, и в своих примерах они часто кладут его в строку и хранят в коде, но, на мой взгляд, удобнее сразу сделать его отдельным файлом, добавляя нужные куски по мере необходимости.
Авторы позаботились о нас и сделали внушительное число примеров, добавив к ним описание.
Мой совет: не пытайтесь начинать с нуля, возьмите за базу первый пример. В нем ничего не происходит, мы просто создаем самый простой плоский мир и присоединяемся к персонажу. В цикле while в конце вы можете по своему усмотрению добавить экшена в происходящее. Например, напишите там:
В xml файле вы можете задать режим игры:
Задайте начальное время, позицию персонажа, кастомизируйте мир: сделайте его плоским или приближенным к реальности.
Вот этот код нарисует вам Пакмана, который поедает шарики и уходит в радужный кратер:
Наконец, в xml можно добавить необходимые координаты для добавления обзора персонажу:
По умолчанию у нас нет возможности осмотреться и получить информацию о ближайших блоках. Тем не менее, мы можем сказать, что хотим знать, что находится вокруг нас. Учтите, что в этом случае нам нужно использовать относительные координаты, отсчитываемые от кубика с ногами героя. В результате выполнения подобной строчки:
Мы получим массив со строками. Каждая строка – это текстовое представление типа одного из кубиков.
Таким образом можно создать ИИ, который исследует мир, ищет что-либо и не умирает по глупым причинам. Простейший вариант без использования машинного обучения я реализовала тут.
Фичи для ИИ
Конечно же, первое, что мне захотелось увидеть для реализации алгоритмов ИИ в malmo – это возможность двигаться дискретно. В вопросе ИИ и так хватает сложностей, и не хочется добавлять ко всему прочему постоянную корректировку направления и скорости движения.
Включаем нужное в xml так:
К сожалению, этого будет недостаточно. Чтобы двигаться дискретно, ваше начальное положение должно быть строго в центре кубика:
Целые координаты поставят вас в пересечение кубов, персонаж откажется двигаться с места, никаких предупреждений и ошибок вы не увидите. В туториале об этом также не предупреждают. Я потратила около 4 часов, чтобы осознать суть проблемы и сделать координаты x и z половинчатыми. (y отвечает за высоту и не играет роли в данной истории).
Кроме этого, исследователи добавили несколько приятных фич для решения задачи обучения с подкреплением (Reinforcement Learning). Алгоритмы этого типа подразумевают постоянное награждение или наказание искусственного интеллекта за те или иные действия. Разработчики продумали этот момент и добавили возможность прописать эти действия/события в xml, избавив код от постоянных одинаковых проверок. Вы также можете задать окончание игры по наступлению некоторого события:
Например, тут мы постоянно чуть-чуть наказываем персонажа за каждый шаг, не увенчавшийся победой; сильно награждаем за победу и наказываем за смерть; наконец, завершаем раунд в случае смерти или выигрыша.
Malmo: вывод
Авторы фреймворка подарили нам потрясающую возможность погрузиться в любимый мир с другой стороны. Malmo пока что находится в бете, во многих ситуациях он… заставляет совершенствовать свои навыки в troubleshooting. Тем не менее, его плюсы перевешивают все его минусы, а тот факт того, что исходники лежат в открытом доступе на github, позволяет нам самостоятельно доделать нужное место или создать issue для исправления критических багов.
Авторы проекта по понятным для меня причинам не упоминают ни в одной из статей возможность обучать детей на основе фреймворка: ребенок вряд ли справится с борьбой с мелкими, но частыми багами. Тем не менее, я уверена, что если родитель поможет своему ребенку и будет программировать вместе с ним, это даст отличные результаты и позволит вам провести время с пользой.
Malmo Challenge: история и результаты
Кроме самого фреймворка, Microsoft также проводил соревнование на базе платформы, названной Malmo Challenge. Оно было призвано побудить ученых и исследователей к работе над коллаборативными алгоритмами. Конкурс стартовал примерно полгода назад, а результаты появились 5 июня.
Суть челленджа в следующем: у нас есть плоский мир, забор сложной формы, внутри загона бегает хрюшка и ходит 2 человека. Наша задача – создать ИИ для одного из персонажей, которых сможет взаимодействовать со вторым, чтобы вместе они загнали хрюшку в замкнутое пространство. Второй персонаж может вести себя рандомно, может управляться человеком, другим ИИ, это может быть даже второй экземпляр вашего собственного ИИ.
При этом, вы можете получить максимальное число очков, поймав хрюшку, или же получить небольшое число очков, прыгнув в лужу сбоку. Вы не получите ничего, если ваш напарник решит прыгнуть в лужу, отказавшись от взаимодействия с вами.
Эта задача в общем виде называется Охота на оленя. Она была сформулирована еще в 18 веке Жан Жаком Руссо. Несмотря на внушительный возраст проблемы, до сих пор неясно, какой алгоритм наиболее эффективно решает поставленную задачу.
Я рада поделиться с вами результатами соревнования. Меня очень удивило распределение мест в турнирной таблице.
Первое место занял проект команды из Великобритании. Авторы трезво оценили сильный недостаток времени, поняли, что они вряд ли успеют адаптировать для задачи сложные существующие алгоритмы. Они выбрали Байесовский вывод для определения типа напарника, а также Марковские цепи для непосредственного игрового процесса. И победили.
Участники, занявшие второе место, решили взять самые сложные из существующих решений, они использовали DNN, Reinforcement learning, DQN, A3C model… И это все не помогло им обойти Байеса и Марковские цепи.
Подытожим статью мыслью о том, что нужно быть проще.
Если вам хочется также попробовать создать свой ИИ, присоединяйтесь к нашему русскоязычному чату про нейронные сети в Telegram. Там вы можете задать интересующие вас вопросы, а также поделиться вашими достижениями.
Видео с моим рассказом о Malmo на встрече Петербургского Python митапа уже появилось на моем канале на Youtube. Там также есть записи других моих лекций и прочая болтовня про IT.
Minecraft Wiki
Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.
ИИ мобов
Искусственный интеллект мобов (сокращённо ИИ) — набор программных методик, который призван смоделировать нужное поведение мобов, их действия в определенных ситуациях и т. д. Каждый моб в Minecraft обладает своеобразной системой искусственного интеллекта, которая отличается механикой и поведением. Дружелюбные мобы будут путешествовать по окрестностям, пока им не нанесут повреждение(после чего начнут убегать от источника урона), тогда как агрессивные станут атаковать игрока сразу, как он подойдёт к ним на расстояние 16 блоков и меньше (в зависимости от моба). Нейтральные мобы будут вести себя как дружелюбные, пока их не атакуют, затем их система поведения станет аналогичной агрессивным. Но бывают исключения. Например, с версии 1.14.4 собаки будут по своей воле атаковать агрессивных мобов, кроме крипера.
Содержание
Дружелюбные мобы [ ]
Деревенские жители [ ]
До версии 1.14 [ ]
Деревенские жители обладают сложной системой ИИ. Когда только их добавили в игру, их поведение заключалось в постоянном пребывании внутри домов, разворачиваясь лицом к игроку.
После версии 1.2.3 взрослые жители стали общаться друг с другом — иногда они останавливаются один возле одного и смотрят некоторое время. В то же время, несовершеннолетние жители иногда бегают друг возле друга, имитируя игру в пятнашки. Все жители заходят в свои дома, как только начинается дождь или наступает ночь, либо когда на деревню нападают враждебные мобы (не касается рейдов)
В и после версии 1.14 [ ]
Поведение жителей ещё усложнилось: теперь они имеют квалификацию своей профессии и, если являются новичками своего дела, могут сменить работу. Теперь могут запоминать свой собственный дом (кровать) и спать. После удара о колокол в спешке бегут по своим домам. Чтобы получить профессию жителю необходимо найти соответствующий блок; безработные жители активно ищут себе работу, если игрок попробует вступить в торговлю с безработным жителем, то тот только покачает головой.
Жители также теперь имеют свой график работы, собирательства ресурсов для ремесла и размножения. При создании товаров жителем блок издаёт соответствующий звук создания на нём предмета.
Странно, но при набеге на деревню они не пытаются спрятаться в домах, а вместо этого бегают по всей деревне. При набеге лучше запирать жителей в доме, и застроить дверь блоком до окончания набега.
Курицы [ ]
Курицы бесцельно бродят по миру. Игрок их интересует только тогда, когда он держит какие-либо семена (в т.ч. тыквы, арбуза, свёклы, пшеницы и семена адского нароста(только для Pocket Edition)). Если подойти к курице с семенами в руке, она начнет следовать за вами, и её возможно будет покормить.
Враждебные мобы [ ]
До обновления 1.0 враждебные мобы, такие как зомби, криперы и пауки, преследуя игрока, не обращали внимания на препятствия на их пути (обрывы, озёра с лавой и т.п.)
Зомби [ ]
Зомби атакует игрока, направляясь к нему по прямой линии, пока не подойдёт вплотную. Преследуя игрока, они не обращают внимания на препятствия на своём пути и продолжают преследование при любых обстоятельствах. Зомби может также атаковать и преследовать деревенских жителей.
До обновления 1.2 [ ]
Зомби не могут обходить пропасти или скалы на своём пути. Однако в случае соприкосновения с непроходимой поверхностью, они пытаются перепрыгнуть её.
ИИ после 1.2 [ ]
После наступления дня зомби стараются спрятаться в тёмные места, например, под кроны деревьев, пещеры или погружаются в воду, чтобы избежать смерти от возгорания. Так же они способны обходить препятствия, встречающиеся на пути. Но если замечают игрока, выбираются из укрытий.
Скелет [ ]
Скелет будет отходить от игрока после попадания, и будет постоянно держаться на дистанции от 6 до 12 блоков (только в атакующем состоянии).
До 1.2 [ ]
Если один скелет случайно попадёт стрелой в какого-либо другого враждебного моба, они начнут атаковать друг друга, пока один из них не умрёт. Затем выживший моб начнёт атаковать игрока.
После 1.2 [ ]
Скелеты получили такой же защитный механизм от возгорания на солнечном свете, как и зомби — они прячутся в тени деревьев, в воде и пещерах при наступлении дня.
Скорость передвижения у пауков почти равна обычной скорости передвижения игрока. При атаке они стараются прыгнуть на игрока. При уровне освещения 9 и выше они не будут нападать на игрока до тех пор, пока он первым не нанесёт им повреждение. Также они могут взбираться по вертикальным поверхностям и не горят на солнце. 1.14.3 PE Пауки тоже, как зомби и скелеты, могут прятаться от солнца.
Крипер [ ]
Криперы подготавливаются к взрыву, когда подходят к цели на расстояние 1 блок. Они взрываются через 1,5 секунды после «активации», если только игрок не отошёл от них на расстояние 4 блока. До 1.2 они подходили к игроку слева. После 12w05a они получили такую же систему интеллекта, как и у зомби и скелетов, однако криперы не сгорают на солнце, как и пауки. Находясь в режиме преследования игрока, они будут стараться обходить или перепрыгивать препятствия.
Криперы имеют самую сложную систему поиска пути. Поскольку им необходимо любым способом подойти к игроку вплотную, они часто скрываются, и, как кажется, устраивают засады.
Криперы убегают от оцелотов и кошек. Это иногда очень полезно, поскольку кошки могут сопровождать игрока и отпугивать криперов.
Слизень [ ]
В отличие от других мобов, целью слизней всегда является именно игрок или железный голем, снежный голем (снеговик). Они двигаются к ближайшему игроку по прямой траектории, даже если он находится за стеной. Если в радиусе 16 блоков нет ни голема ни игрока, они прыгают в произвольном направлении, пока не наткнутся на препятствие, после чего разворачиваются в другую сторону.