Муравей на пляже по мотивам Герберта Саймона Страница 1 из 2

Сейчас наша команда Candango Games работает над игрой для ПК в стиле хоррор. Мы планируем ее уже скоро представить (кстати, для ее создания я изучаю составные элементы страха). Так вот одна из самых главных возможностей, которую я хотел реализовать в этой игре – это система, обеспечивающая эффект полного присутствия. А, как мы знаем, самое главное для реализации этой задачи – это создание качественного ИИ.








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

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

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

Однако конкретно в сфере видеоигр наблюдается одна деталь: там эквивалент «реального мира» уже виртуален, то есть это уже чистая информация. Зачем же ее повторно виртуализовывать в мозг агентов и затем заставлять мозг обрабатывать эту информацию? Почему мы пытаемся перенести мир в мозг агента, если можно сделать наоборот: перенести мозг агента в мир? И я решил это сделать: мир будет «думать», будет «умный» и знающий. Мир, а не агенты.

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

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

Вот что можно сделать с помощью простого кода, используя базовый эвристический подход «переноса мозга в мир». Причем код настолько простой, как код для Pacman. Особенность заключается в том, что агент (преследователь) понятия не имеет о том, что происходило за закрытой дверью, он не знает, что такое окно, что оно означает, куда оно ведет, и вообще ведет ли оно куда-нибудь. Агент совершенно не замечает всех этих вещей и идей. Все, что он делает – это следует имеющимся указателям и инструкциям.

Теперь представьте следующие события:

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

Как это случилось? Вы осознанно встали и сделали это? С чего вдруг вы это сделали?

Так и в этом случае: «умный» здесь не агент, а окно, а мозг принадлежит не агенту, а миру. Окно говорит агенту, что нужно сделать, куда посмотреть, куда пойти, что сказать другим агентам и как показать «его» решение игроку. Когда агент заходит в комнату, вещи вокруг говорят ему, что нужно сделать. Кровать, где прячется игрок, предлагает ему заглянуть под нее. Шкаф тоже предлагает посмотреть внутрь. Недавно открытое окно говорит ему выйти на улицу. После получения этих предложений агент принимает разумное Решение на основании приоритетности этих задач.

Взаимодействуя с окном, игрок повышает его значимость, в связи с чем повышается приоритет этой задачи, и агент выбирает именно ее, а не другие варианты – это контролируется сценариями окна. А вот, например, если бы игрок прятался в шкафу и сидел там тихонько, то приоритет задачи «заглянуть в шкаф» автоматически снижается, и поэтому агент выберет вариант «посмотреть под кровать», а у игрока, опять же, появится возможность убежать. Все зависит от выбора гейм-дизайнера: именно он принимает решение, как должен работать каждый элемент.





Но не все задачи исходят от внешних источников. Внутренние или прикрепленные к агенту элементы также могут давать задачи. Например, если у агента есть аптечка, и вдруг его ранят, то аптечка (которая у него есть) прикажет агенту ее использовать. Значимость этой задачи будет прямо пропорциональна тяжести ранения. В то же время система повреждений агента (внутренняя) прикажет ему убежать от того, что наносит агенту ранения. Скорее всего, в этой ситуации агент, на основании значимости каждой из задач, убежит и найдет безопасное место, вылечит ранение и либо продолжит борьбу, либо убежит прочь. Это легко реализовать: просто нужно наделить аптечку знанием, что в текущей ситуации без лечения никаких действий не удастся предпринять, что прекращение лечения приведет к уязвимости агента. Таким образом выстраиваются приоритеты задач.

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

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

До этого момента все выглядело очень красиво. Затем фаза первоначального создания игр закончилась, и я столкнулся с тем, что эти задачи нужно было как-то реализовать в виде кода. Наступила фаза выполнения работ. На данный момент моя система выглядит примерно так:


  • 555
  • 22/04/2015


Поделись



Подпишись



Смотрите также