Смекни!
smekni.com

Настоящий виртуальный противник (стр. 1 из 2)

Дмитрий Сахань

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

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

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

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

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

Психические функции

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

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

Афферентный синтез

Афферентный синтез представляет собой обобщение потоков информации. Слово "афферентный" обозначает "обобщающий", а в дальнейшем используемое слово "афферентация" обозначает "обобщение". Синтез состоит из обстановочной афферентации, доминирующей мотивации, пусковой афферентации и памяти. Начало такта синтеза всегда начинается с обстановочной афферентации и заканчивается пусковой афферентацией.

Обстановочная афферентация - обобщение текущей обстановки (состояние дел) в сложившейся ситуации. В простом виде процесс обобщения выглядит следующим образом. Сначала на игровой карте отбираются только видимые виртуальному противнику вражеские персонажи (на исследованных областях карты) и, естественно, свои собственные персонажи. Чужие солдаты используются для обобщения состояний по угрожающим факторам, свои же солдаты - для обобщения ситуаций по собственным силам, возможному накоплению денег, сбору артефактов, построению домов и так далее.

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

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

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

Внимание - осуществление избирательного отбора нужной информации. То есть внимание играет роль ее фильтра. Оно фокусируется на какой-нибудь центральной точке информации и покрывает в разные стороны от этой точки определенную область, называемую областью внимания. В нашем случае центральной точкой внимания является игровой персонаж, а область внимания ограничивается, например, максимальной длиной движения персонажа за один ход. Таким образом, снижается объем обрабатываемой информации и отсекаются персонажи, особо не влияющие на ситуацию в ближайший 1-2 ход.

Далее хочу наглядно показать, как работает обстановочная афферентация, оперирующая областью внимания. Это отражено на приведенном ниже рисунке. Красным цветом выделены персонажи виртуального противника, синим - вражеские персонажи. Маленькие черные крестики обозначают, например, золото. Черные поля на карте - это еще не исследованные виртуальным противником земли. Зеленым цветом выделена область внимания обстановочной афферентации для каждого персонажа виртуального противника. Как было сказано, размер квадрата области внимания таков, что за один ход персонаж может достигнуть только края этого квадрата. Квадрат взят исключительно для наглядности, хотя в реальной ситуации область внимания должна напоминать круг вокруг персонажа.

Как видно из рисунка, городу не угрожает никакая опасность, а вот персонажу "C" грозит опасность превосходящих сил противника. Персонаж "A" способен взять максимум золота. Кроме того, персонажи "A" и "B" за один ход могут прийти друг другу на помощь. Также существует общая угроза виртуальному противнику, поскольку на карте существует на 1 солдат больше вражеских сил. Думаю, не сложно сделать вывод, что персонаж "A" нужно отправить собрать максимум золота для покупки/строительства нового солдата. Персонаж "B" можно отправить вслед за персонажем "A", чтобы на него не вздумал напасть близко стоящий вражеский солдат. А вот персонажу "C" нужно приказать выходить из зоны опасности, так как его сил не хватит для сражения.

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

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

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