Вступление

Спрос на атмосферный геймплей и реалистичное взаимодействие с неигровыми персонажами углубляет акцент на недостатках современных технологий искусственного интеллекта в играх. Поведенческие деревья («Behavior Trees»), доминирующая технология на этот момент, начала изживать себя. Она не справляется с задачей, когда разработчики пытаются основывать сложные системы ИИ с непредсказуемым поведением и способностью принимать решения в условиях недостачи информации. Следовательно, поведенческие деревья вытесняются более продвинутыми технологиями, вроде уже поспевшей зарекомендовать себя Utility AI, что знаменует новую эпоху немало качественного искусственного интеллекта.

Как поведенческие деревья стали править вселенной игровых ИИ (и почему перестают им править)

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

Способность к переходу из любого состояния в любое иное посредством определения соответствующих условий позволяет без лишних сложностей настраивать последний автомат для поведения ИИ. Однако, в этом и недостаток такого подхода. В комплексных играх последний автомат может вмещать сотни состояний, и при таких масштабах отладка становится чрезмерно сложной. В 2005 году Дэмиен Айла (Damian Isla) в своей выговоры на GDC в подробностях рассказал об этом на примере Halo 2.

Типичная схема конечного автомата с несколькими поведениями. Каждый переход (показаны стрелками) снабжён собственным списком условий.

Типичная схема последнего автомата с несколькими поведениями. Каждый переход (показаны стрелками) обеспечен собственным списком условий.

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

Типичный иерархический конечный автомат, группирующий поведения по подсостояниям.

Типичный иерархический последний автомат, группирующий поведения по подсостояниям.

В итоге идея иерархической организации повергла к идее организации задач в древовидные структуры – они же поведенческие деревья. Трудятся они так, что поведения либо выполняются по одному за раз, либо в последовательности. Льющееся поведение пересматривается с определённой частотой, к примеру, раз в секунду. При этом любой раз оценивается всё дерево, и если выбрано поведение отличное от льющегося, выполняемое состояние меняется, иначе выполняется прежнее поведение. На этом моменте преодолевается ряд недостач конечного автомата, вроде застревания в одном состоянии или ошибочной смене состояний. В Unreal Engine включена спокойная реализация поведенческих деревьев, на которую обычно и ссылаются, сообщая об этой технологии.

Типичное поведенческое древо – начинается с корневого узла. Он запускает узел условия, выбирающий между поведениями A и B. Узел условия может также называться «декоратор».

Типичное поведенческое древо – начинается с корневого узла. Он запускает узел обстоятельства, выбирающий между поведениями A и B. Узел условия может также именоваться «декоратор».

Во многих случаях поведенческие деревья предоставляют основу для создания немало понятных и прозрачных ИИ, по сравнению с конечными автоматами. К тому же, на практике чистоплотно построенное дерево облегчает визуальную отладку.

Комплексное поведенческое дерево с условиями, параллельными (одновременными) поведениями и последовательностями поведений.

Комплексное поведенческое дерево с условиями, параллельными (одновременными) поведениями и последовательностями поведений.

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

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

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

Каковы современные требования к передовому искусственному интеллекту?

Всё это возвращает нас к тому, чего ожидают от ИИ в наши дни.

Современный игровой ИИ требует технологий, способных поддерживать комплексные игровые вселенные с глубоким погружением. В таких играх, как Hitman, Witcher и Assassin’s Creed число неигровых персонажей всё возрастает, и люди ждут от них всё более природного и своеобразного поведения. А, к примеру, в Call of Duty и The Division весьма много противников, вместе с чем растёт спрос на разнообразие их поведения и на способность к тактическим поступкам. Статичный гейм-дизайн со скриптами уже никого не впечатляет, нынешним игрокам, да и самим гейм-дизайнерам охота динамичных и постоянно меняющихся ситуаций.

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

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

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

  • Технический долг – Если ИИ с трудом поддаётся расширению на этапе разработки, число ошибок и время на их устранение будет расти в геометрической прогрессии
  • Продуктивность – Если возникают трудности с скорой реализацией ИИ, необходимого в рамках дизайна игры, гейм-дизайнеры не смогут скоро создавать прототипы своих идей. В результате в игре будет меньше контента, а окружение будет неживым и заскриптованным.
  • Качество – Как следствие, многие игры просто сдаются и в крышке концов прибегают к помощи непримечательного или же попросту глупого ИИ, с каким все уже знакомы.

Новая парадигма искусственного интеллекта

Killzone 2 в своё пора хвалили за один из лучших ИИ. Для динамического принятия тактических решений ненастоящими оппонентами Guerilla Games использовали систему подсчёта очков на основе выгодности поступков, и в подробностях описали, как она позволяет ИИ совершать обдуманные тактические манёвры без досконального познания игрового мира. Подобные системы ИИ использовались в F.E.A.R и Civilization, схожим манером работают и знаменитые боты из Quake.

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

  • Простота проектирования – Ненастоящий интеллект на основе Utility AI зачастую может описываться на обычном языке, что упрощает коммуникацию между программистом и дизайнером. Нет нужды затрагивать такие мистические понятия, как условия, состояния, последовательности и декораторы. Вместо этого можно разъяснить планируемое поведение как «если персонаж под огнём, главная его задача – розыск укрытия». Обратите внимание, какие размытые, но естественные для обыкновенного общения термины («главная задача») могут при этом использоваться.
  • Упрощённая расширяемость – Правила, нередко называемые маркерами, можно свободно добавлять поверх существующей системы ИИ. В отличие от того же последнего автомата, здесь не порвутся никакие важные связи. Новоиспеченные начислители просто добавляются к уже работающим, что расширяет функциональность и правдоподобность ненастоящего интеллекта.
  • Повышенное качество – Вышеуказанные пункты значительно сокращают число ошибок и увеличивают продуктивность. Это, в свою очередь, оставляет ширь для совершенствования ИИ в пределах прежних сроков и бюджета, что повышает его итоговое качество.

Однако, внутри у Utility AI есть особая магия, мастерящая его в целом более качественным методом принятия решений. Дэйв Марк (Dave Mark) из Intrinsic Algorithm объясняет, как можно использовать искривленные для начисления очков различным действиям, доступным ИИ:

apexgametools04

Пример того, как искривленные могут устанавливать приоритет различным желаниям. У каждого жажды есть входящая функция, которая нормализуется в интервале от 0 до 100. Поступок, связанное с наиболее выгодной кривой – выгодность нормализуется в интервале от 0 до 1 – приводится в исполнение. Выгодность сна вырастает в геометрической прогрессии с повышением силы желания, выгодность затрат энергии упадает линейно, а выгодность питания не падает почти никогда, за исключением зачислений пищи. Однако, она начинает расти вместе с увеличением мочи соответствующего желания. Для каждого желания сила может быть различной. Сила желания поспать зависит от времени, прошедшего после заключительного пробуждения, а сила желания тратить энергию зависит от поре суток.

Кривые позволяют Utility AI принимать решения на основе размашистого спектра входных данных, и качество системы выходит на степень нечёткой логики. На практике это означает, что Utility AI может принимать недурные решения даже в ситуациях, не предусмотренных программистом ИИ. Такое в изобилии встречается в Killzone 2, и это доля внутренней магии искусственного интеллекта.

Простота использования Utility AI распространяется и на те районы, с которыми обычно возникают проблемы у поведенческих деревьев. Сравнение и сортировка по приоритету сотен тактических позиций, как это мастерит ИИ Killzone 2, было бы сложной задачей для деревьев, поскольку новоиспеченные ветви нельзя добавлять динамически. Некоторые поведенческие деревья, так, как в Blueprint, решают эту проблему подключением специального модуля Environmental Query System. Это система, опрашивающая окружение на объект позиций и определяющая их важность согласно установленным правилам – как в линейном программировании. Однако, правила Utility AI могут начислять очки любой раздельно взятой группе объектов, будь то тактическая позиция, планета, поставленная задача или выбор оружия. Таким манером методология принятия решений становится очень гибкой.

Отличия между поведенческими деревьями и Utility AI

Для демонстрации различий между технологиями ненастоящего интеллекта можно взять конкретный пример простого ИИ, нередко используемого в играх – пусть это будут противники в шутерах.

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

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

Таблица ниже сопоставляет входные данные и выполняемые поступки:

apexgametools07

Сначала мы попробуем реализовать такой ИИ с помощью поведенческого дерева, а после с помощью Utility AI.

Поведенческое дерево

На рисунке ниже показана вероятная конфигурация ИИ в дереве. Первоначальное условие (заряжено оружие или нет) определяет переход к установленному ответвлению. Затем оценивается другой параметр, скажем, нахождение в укрытии. Вытекающие ветви оценивают третий параметр – расстояние до врага – прежде, чем перебежать к расстоянию до укрытия.

apexgametools03

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

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

Utility AI

Рисунок ниже демонстрирует вероятную реализацию ИИ на основе выгодности решений. Каждое действие оценивается по отдельности и выбирается то, что наберёт вяще очков. Движение к врагу основано на расстоянии до него в условных колах, пусть это будут метры. Если оружие не заряжено, 100 очков вычитается, чтобы поступок в таком случае не набирало очков. Огонь по врагу получает 75 очков, когда боец стоит не дальше 50 метров от врага. Если укрытие слишком вдали – дальше, чем враг, к примеру – начисляется ещё 50 очков. Если оружие не заряжено, отнимается 125 очков, таким манером действие точно не будет выполняться. Движение к укрытию получает 50 очков, если боец не в укрытии и ещё 50, когда ближайшее укрытие в пределах 50 метров. Перезарядка получает 75 очков, когда оружие не заряжено и 50, когда боец в укрытии. Если оружие заряжено, 125 очков вычитается.

apexgametools08

Utility AI спрашивает составления одной таблицы с десятью начислителями, некоторые из каких представлены одним и тем же правилом. Порядок проверки параметров не имеет смыслы, следовательно, нет нужды что-либо упорядочивать или минимизировать. Дополнительные параметры или правила можно вольно добавлять поверх существующих, просто расширяя таблицу.

Utility AI не спрашивает реализации иерархических или древовидных структур для описанного ИИ. Однако, при нужды ими можно воспользоваться. Таким образом, действиям не обязательно быть прямыми действиями, вроде движения или перезарядки, они могут выступать активаторами последующих оценок. На самом деле, Utility AI можно использовать как поведенческое дерево и реализовать в нём первоначально представленную структуру – если возникнет жажда.

В каких областях Utility AI будет полезнее всего?

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

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

  • Комплексное поведение
  • Дефиниция приоритета действия
  • Обдумывание тактики
  • Поведение на основе поставленных мишеней
  • Стратегическое планирование
  • Групповое поведение
  • Динамические, контекстно-зависимые диалоги
  • Дефиниция первостепенной цели для атаки
  • Желания
  • Эмоции
  • Симуляция человечьего поведения

Каковы ограничения Utility AI?

Ограничения связаны основным образом с тем, что разрабатываемый ИИ базируется на дизайне. Как и в большинстве технологий игровых ИИ, идея в том, что ненастоящий интеллект должен действовать согласно предусмотренным дизайнером ситуациям. Потому, хоть ИИ на основе Utility AI и может работать в условиях недостачи информации и действовать непредсказуемо благодаря способности к интерполяции и принятию нечётких решений, он негусто будет умнее своего создателя. Кроме того, разумность решений и правдоподобность поведения зависят от умелой настройки начислителей, а значит на разработку и тестирование потребуется пора. В поиске альтернативных технологий, обходящих эти ограничения, следует взглянуть в сторонку машинного обучения. Несмотря на то, что подобные методы уже оказывают огромное воздействие на другие индустрии, в играх машинное обучение пока что себя не обнаружило. Впрочем, есть компании, работающие в этом направлении, так, Good AI.

Заключение

Поведенческие деревья всё ещё популярны среди разработчиков, но эта технология стремительно стареет. С ней возникает много трудностей в работе над комплексным ИИ современных игр. Технология Utility AI уже зарекомендовала себя во немало популярных тайтлах, выступая основой ИИ, считающихся лучшими в своём роде. Она освобождена от многих проблем, присущих поведенческим деревьям, и выглядит весьма перспективной для будущих игр с комплексным, правдоподобным и более разумным ненастоящим интеллектом.

Автор Якоб Расмуссен(Jakob Rasmussen) глава Apex Game Tools — Are Behavior Trees a Thing of the Past?

Поделиться:Email this to someoneShare on VKTweet about this on TwitterShare on Facebook