В настоящее время я пытаюсь получить ИНС для игры в видеоигру, и я надеялся получить некоторую помощь от замечательного сообщества здесь.
Я остановился на Diablo 2. Таким образом, игра ведется в реальном времени с изометрической точки зрения, когда игрок управляет одним аватаром, на котором сфокусирована камера.
Чтобы сделать вещи конкретными, задача состоит в том, чтобы получить вашего персонажа x очков опыта без снижения его здоровья до 0, где очки опыта получаются за счет убийства монстров. Вот пример игрового процесса:
Теперь, поскольку я хочу, чтобы сеть работала исключительно на основе информации, которую она получает от пикселей на экране, она должна изучить очень богатое представление, чтобы играть эффективно, поскольку для этого предположительно потребуется знать (по крайней мере неявно), как разделить игровой мир на объекты и как с ними взаимодействовать.
И всю эту информацию нужно как-то передать в сеть. Я даже не могу думать о том, как тренировать эту штуку. Моя единственная идея - иметь отдельную программу, которая визуально извлекает с экрана что-то изначально хорошее / плохое (например, здоровье, золото, опыт), а затем использует этот показатель в процедуре обучения с подкреплением. Я думаю, что это будет частью ответа, но я не думаю, что этого будет достаточно; слишком много уровней абстракции от необработанного визуального ввода до целенаправленного поведения, чтобы такая ограниченная обратная связь могла обучить сеть в течение моей жизни.
Итак, мой вопрос: какие еще способы вы можете придумать, чтобы обучить сеть выполнять хотя бы часть этой задачи? желательно без тысяч помеченных примеров.
Просто для большего направления: я ищу другие источники обучения с подкреплением и / или любые неконтролируемые методы для извлечения полезной информации в этой настройке. Или контролируемый алгоритм, если вы можете придумать способ получения помеченных данных из игрового мира без необходимости вручную маркировать их.
ОБНОВЛЕНИЕ (27.04.12):
Как ни странно, я все еще работаю над этим и, похоже, добиваюсь прогресса. Самый большой секрет того, как заставить работать контроллер ИНС, заключается в использовании самых передовых архитектур ИНС, соответствующих поставленной задаче. Следовательно, я использовал сеть глубоких убеждений, состоящую из факторизованных условно-ограниченных машин Больцмана, которые я обучал неконтролируемым образом (на видео, где я играл в игру) перед точной настройкой с обратным распространением временной разницы (т.е. обучение с подкреплением со стандартным ИНС прямого распространения).
Тем не менее, все еще ищем более ценный вклад, особенно по проблеме выбора действий в реальном времени и о том, как кодировать цветные изображения для обработки ИНС :-)
ОБНОВЛЕНИЕ (21.10.15):
Только что вспомнил, что задал этот вопрос когда-то, и подумал, что должен упомянуть, что это уже не безумная идея. Со времени моего последнего обновления DeepMind опубликовал свой научный доклад о том, как заставить нейронные сети играть в игры Atari с помощью визуальных входов . Действительно, единственное, что мешает мне использовать их архитектуру для игры, ограниченного подмножества, Diablo 2, - это отсутствие доступа к основному игровому движку. Рендеринг на экран с последующим перенаправлением в сеть слишком медленный для обучения за разумный промежуток времени. Таким образом, мы, вероятно, не увидим такого рода ботов, играющих в Diablo 2 в ближайшее время, но только потому, что они будут играть во что-то с открытым исходным кодом или с доступом API к цели рендеринга. (Возможно, землетрясение?)
Ответы:
Я вижу, что вы беспокоитесь о том, как обучать ИНС, но этот проект скрывает сложность, о которой вы, возможно, не подозреваете. Распознавание объектов / символов в компьютерных играх посредством обработки изображений - это очень сложная задача (не говоря уже о безумных играх с шутерами от первого лица и ролевыми играми). Я не сомневаюсь в ваших навыках и не говорю, что это невозможно, но вы можете легко потратить в 10 раз больше времени на распознавание вещей, чем на реализацию самой ИНС (при условии, что у вас уже есть опыт работы с методами обработки цифровых изображений. ).
Я считаю вашу идею очень интересной и очень амбициозной . На этом этапе вы можете пересмотреть это. Я чувствую, что этот проект - это то, что вы планируете для университета, поэтому, если в центре внимания действительно находится ИНС, вам, вероятно, следует выбрать другую игру, что-то более простое.
Я помню, что недавно кто-то пришел за советом по другому, но в чем-то похожему проекту . Стоит это проверить.
С другой стороны, могут быть лучшие / более простые подходы к идентификации объектов в игре, если вы принимаете предложения. Но сначала давайте назовем этот проект тем, чем вы хотите его видеть: смарт-ботом .
Один из методов реализации ботов - доступ к памяти игрового клиента для поиска соответствующей информации, такой как местоположение персонажа на экране и его здоровье. Чтение памяти компьютера тривиально, но выяснить, где именно в памяти искать, - нет. Сканеры памяти, такие как Cheat Engine, могут быть очень полезны для этого.
Другой метод , который работает в рамках игры, включает манипулирование информацией о рендеринге. Все объекты игры должны отображаться на экране. Это означает, что местоположения всех 3D-объектов в конечном итоге будут отправлены на видеокарту для обработки. Будьте готовы к серьезной отладке.
В этом ответе я кратко описал 2 метода, позволяющих добиться желаемого с помощью обработки изображений. Если они вам интересны, вы можете найти больше о них в « Эксплуатации онлайн-игр» (глава 6), отличной книге по этой теме.
источник
ОБНОВЛЕНИЕ 2018-07-26: Вот и все! Сейчас мы приближаемся к тому моменту, когда такая игра станет разрешимой! Используя OpenAI и основанную на игре DotA 2, команда могла бы создать ИИ, который сможет победить полупрофессиональных игроков в игре 5 на 5 . Если вы знакомы с DotA 2, вы знаете, что эта игра очень похожа на Diablo-подобные игры с точки зрения механики, но можно утверждать, что она еще более сложна из-за командной игры.
Как и ожидалось, это было достигнуто благодаря последним достижениям в обучении с подкреплением с помощью глубокого обучения и использованию открытых игровых фреймворков, таких как OpenAI, что упрощает разработку ИИ, поскольку вы получаете аккуратный API, а также потому, что вы можете ускорить игру (ИИ играл эквивалент 180 лет игры против самого себя каждый день!).
5 августа 2018 года (через 10 дней!) Планируется провести этот ИИ против лучших игроков DotA 2. Если это сработает, ожидайте большой революции, возможно, не такой медиатизированной, как решение игры го, но тем не менее это будет огромной вехой для игрового ИИ!
ОБНОВЛЕНИЕ 2017-01: область развивается очень быстро с момента успеха AlphaGo, и почти каждый месяц появляются новые структуры, облегчающие разработку алгоритмов машинного обучения в играх. Вот список последних, которые я нашел:
Очень захватывающие времена!
ВАЖНОЕ ОБНОВЛЕНИЕ (2016-06): как отмечает OP, эта проблема обучения искусственных сетей игре в игры с использованием только визуального ввода сейчас решается несколькими серьезными учреждениями с весьма многообещающими результатами, такими как DeepMind Deep-Qlearning-Network (DQN ) .
А теперь, если вы хотите принять вызов следующего уровня, вы можете использовать одну из различных платформ для разработки игр с искусственным интеллектом , такую как ViZDoom , высокооптимизированную платформу (7000 кадров в секунду) для обучения сетей игре в Doom, используя только визуальные входы. :
И результаты просто потрясающие, смотрите видео на их веб-странице и хороший учебник (на Python) здесь!
Существует также аналогичный проект Quake 3 Arena под названием Quagents , который также обеспечивает простой API-доступ к базовым данным игры, но вы можете отказаться от него и просто использовать снимки экрана и API только для управления своим агентом.
Чем полезна такая платформа, если мы используем только скриншоты? Даже если у вас нет доступа к базовым данным игры, такая платформа предоставляет:
Подводя итог, можно сказать, что самое замечательное в этих платформах состоит в том, что они устраняют большую часть предыдущих технических проблем, с которыми вам приходилось иметь дело (как управлять входными данными игры, как настраивать сценарии и т. Д.), Так что вам просто нужно иметь дело с алгоритмом обучения сам.
Итак, приступайте к работе и сделайте нас лучшим визуальным ботом для ИИ;)
Старый пост, описывающий технические проблемы разработки ИИ, полагающегося только на визуальные входы:
В отличие от некоторых моих коллег, упомянутых выше, я не думаю, что эта проблема неразрешима. Но это определенно чертовски сложно!
Первая проблема, как указывалось выше, связана с представлением состояния игры : вы не можете представить полное состояние с помощью всего лишь одного изображения, вам нужно поддерживать какое-то запоминание(здоровье, но также экипированные предметы и предметы, доступные для использования, квесты и цели и т. д.). Получить такую информацию можно двумя способами: либо путем прямого доступа к данным игры, что является наиболее надежным и простым; либо вы можете создать абстрактное представление этой информации, выполнив несколько простых процедур (открыть инвентарь, сделать снимок экрана, извлечь данные). Конечно, при извлечении данных из скриншота вам придется либо ввести некоторую контролируемую процедуру (которую вы полностью определяете), либо неконтролируемую (с помощью алгоритма машинного обучения, но тогда это значительно увеличит сложность ...). Для неконтролируемого машинного обучения вам нужно будет использовать совсем новый тип алгоритмов, называемых алгоритмами структурного обучения (которые изучают структуру данных, а не то, как их классифицировать или прогнозировать значение).http://techtalks.tv/talks/54422/
Затем возникает еще одна проблема: даже когда вы получили все необходимые данные, игру можно наблюдать лишь частично . Таким образом, вам нужно ввести абстрактную модель мира и снабдить ее обработанной информацией из игры, например, местоположением вашего аватара, а также местоположением квестовых предметов, целей и врагов за пределами экрана. Для этого вы можете изучить Mixture Particle Filters от Vermaak 2003.
Кроме того, вам понадобится автономный агент с динамически генерируемыми целями . Хорошо известная архитектура, которую вы можете попробовать, - это агент BDI, но вам, вероятно, придется настроить его, чтобы эта архитектура работала в вашем практическом случае. В качестве альтернативы существует также рекурсивная сеть Петри, которую вы, вероятно, можете комбинировать со всеми видами вариаций сетей Петри для достижения желаемого, поскольку это очень хорошо изученная и гибкая структура с прекрасными процедурами формализации и доказательств.
И, наконец, даже если вы сделаете все вышеперечисленное, вам нужно будет найти способ имитировать игру с ускоренной скоростью (использование видео может быть приятным, но проблема в том, что ваш алгоритм будет только наблюдать без контроля и иметь возможность попробовать на себе очень важно для обучения). В самом деле, хорошо известно, что современный алгоритм требует гораздо больше времени, чтобы изучить то же самое, что и человек (тем более с обучением с подкреплением), поэтому, если он не может ускорить процесс ( то есть, если вы не можете ускорить игровое время), ваш алгоритм даже не сойдется за одну жизнь ...
В заключение, то, что вы хотите достичь здесь, находится на пределе (и, возможно, немного выше) существующих современных алгоритмов . Я думаю, что это возможно, но даже если это так, вы собираетесь потратить чертовски много времени , потому что это не теоретическая проблема, а практическая проблема, к которой вы здесь приближаетесь, и, следовательно, вам нужно реализовать и объединить много различных подходов ИИ для ее решения.
Несколько десятилетий исследований с целой командой, работающей над этим, может быть недостаточно, поэтому, если вы один и работаете над ним неполный рабочий день (поскольку у вас, вероятно, есть работа для жизни), вы можете провести всю жизнь, не дойдя до рабочий раствор.
Поэтому мой самый важный совет заключается в том, чтобы снизить свои ожидания и попытаться уменьшить сложность.решения вашей проблемы, используя всю возможную информацию, и избегайте как можно большего количества снимков экрана (например, пытайтесь подключиться непосредственно к игре, ищите DLL-инъекцию) и упрощайте некоторые проблемы путем реализации контролируемых процедур, не позволяйте вашему Алгоритм изучит все (т. е. сейчас как можно больше откажется от обработки изображений и будет полагаться на внутреннюю игровую информацию, позже, если ваш алгоритм работает хорошо, вы можете заменить некоторые части своей программы ИИ обработкой изображений, тем самым грубо достигнув своей полной цели например, если вы можете заставить что-то работать достаточно хорошо, вы можете попытаться усложнить свою проблему и заменить контролируемые процедуры и данные игры с памятью на неконтролируемые алгоритмы машинного обучения на снимках экрана).
Удачи, и если это сработает, обязательно опубликуйте статью, вы наверняка прославитесь решением такой сложной практической задачи!
источник
Проблема, которую вы преследуете, неразрешима в том смысле, как вы ее определили. Обычно ошибочно думать, что нейронная сеть «волшебным образом» изучит подробное представление проблемы. При принятии решения о том, является ли ИНС подходящим инструментом для решения задачи, следует иметь в виду, что это метод интерполяции. Подумайте, можете ли вы сформулировать свою проблему как поиск приближения функции, когда у вас есть много точек из этой функции и много времени для проектирования сети и ее обучения.
Задача, которую вы предлагаете, не проходит этот тест. Управление игрой не зависит от изображения на экране. Игрок должен хранить в памяти много информации. В качестве простого примера: часто бывает так, что каждый раз, когда вы заходите в магазин в игре, экран выглядит одинаково. Однако то, что вы покупаете, зависит от обстоятельств. Независимо от того, насколько сложна сеть, если пиксели экрана являются ее входом, она всегда будет выполнять одно и то же действие при входе в магазин.
Кроме того, существует проблема масштаба. Задача, которую вы предлагаете, слишком сложна для изучения в разумные сроки. Чтобы узнать, как работает игровой ИИ, посетите сайт aigamedev.com . Искусственные нейронные сети успешно использовались в некоторых играх, но очень ограниченно. Разработать игровой ИИ сложно и часто дорого. Если бы существовал общий подход к построению функциональных нейронных сетей, отрасль, скорее всего, ухватилась бы за него. Я рекомендую вам начать с гораздо более простых примеров, таких как крестики-нолики.
источник
Похоже, что суть этого проекта заключается в изучении того, что возможно с помощью ИНС, поэтому я бы предложил выбрать игру, в которой вам не нужно иметь дело с обработкой изображений (что из других ответов здесь кажется действительно сложной задачей в игра в реальном времени). Вы можете использовать Starcraft API для создания своего бота, он дает вам доступ ко всему соответствующему состоянию игры.
http://code.google.com/p/bwapi/
источник
В качестве первого шага вы можете посмотреть на разницу последовательных кадров. Вы должны различать фоновые и настоящие спрайты монстров. Думаю, мир также может содержать анимацию. Чтобы найти их, я заставлял персонажа перемещаться и собирать все, что движется вместе с миром, в большое фоновое изображение / анимацию.
Вы могли обнаруживать и идентифицировать врагов с помощью корреляции (используя БПФ). Однако, если анимация повторяется с точностью до пикселя, будет быстрее просто посмотреть на несколько значений пикселей. Ваша основная задача будет заключаться в написании надежной системы, которая будет определять, когда на экране появляется новый объект, и постепенно будет передавать все кадры кадра спрайта в базу данных. Возможно, вам также придется создавать модели для эффектов оружия. Их следует вычесть, чтобы они не загромождали базу данных оппонентов.
источник
Предположим, что в любой момент вы можете сгенерировать набор `` результатов '' (может включать вероятности) из набора всех возможных `` ходов '' и что в игре присутствует некоторое понятие согласованности (например, вы можете играть на уровне X снова и снова снова), вы можете начать с N нейронных сетей со случайными весами, и каждая из них будет играть в игру следующим образом:
1) Для каждого возможного «хода» сгенерируйте список возможных «результатов» (со связанными вероятностями) 2) Для каждого результата используйте свою нейронную сеть, чтобы определить связанную «ценность» (оценку) «результата» (например, число от -1 до 1, 1 - наилучший возможный результат, -1 - худший) 3) Выберите «ход», ведущий к наивысшей вероятности * оценка 4) Если ход привел к «победе» или «поражению», остановитесь, в противном случае вернитесь к шагу 1.
По прошествии определенного времени (или «выигрыша» / «проигрыша») оцените, насколько близка нейронная сеть была к «цели» (это, вероятно, потребует некоторых знаний предметной области). Затем выбросьте 50% (или какой-то другой процент) NN, которые были наиболее далеко от цели, выполните кроссовер / мутацию 50% лучших и снова запустите новый набор NN. Продолжайте бежать до тех пор, пока не появится удовлетворительный NN.
источник
Я думаю, что вам лучше всего будет сложная архитектура, включающая несколько / может сетей: то есть одна, распознающая предметы и отвечающая на них, одна для магазина, одна для боя (возможно, здесь вам понадобится одна для распознавания врагов, одна для атак) и т. Д. .
Затем попробуйте придумать самый простой игровой процесс Diablo II, возможно, варвар. Тогда сначала сделайте это просто, как Акт I, только первая область.
Тогда я предполагаю, что ценные «цели» - это исчезновение вражеских объектов и уменьшение шкалы здоровья (оценивается обратно пропорционально).
Как только вы позаботитесь об этих отдельных, «более простых» задачах, вы можете использовать «главную» ИНС, чтобы решить, какую вспомогательную ИНС активировать.
Что касается обучения, я вижу только три варианта: вы можете использовать описанный выше эволюционный метод, но тогда вам нужно вручную выбрать «победителей», если вы не создадите для этого целую отдельную программу. Вы могли бы заставить сети «смотреть», как кто-то играет. Здесь они научатся подражать стилю игрока или группы игроков. Сеть пытается предсказать следующее действие игрока, получает подкрепление для правильного предположения и т. Д. Если вы действительно получаете нужную ИНС, это можно сделать с помощью видео-геймплея, нет необходимости в реальном игровом процессе. Наконец, вы можете позволить сети играть в игру, имея в виду смерти врагов, повышение уровня, восстановление здоровья и т. Д. В качестве положительного подкрепления и смерти игроков, потерю здоровья и т. Д. В качестве отрицательного подкрепления. Но видя, как даже простая сеть требует тысячи конкретных шагов обучения для изучения даже простых задач,
В целом ваш проект очень амбициозный. Но я, например, думаю, что это можно «теоретически сделать», если учесть достаточно времени.
Надеюсь, это поможет и удачи!
источник