Новый дневник разработки основанной на SRD 3.5 ролевой игры Revenge of the Firstborn наполнен техническими подробностями работы искусственного интеллекта, более полезными интересующимся созданием игр, нежели обычным игрокам.
В этом месяце я решил немного изменить формат и рассказать об одной из внутренних систем в Revenge of the Firstborn, а именно об искусственном интеллекте. В Revenge of the Firstborn используется подход под названием Utility AI («ИИ полезности»). В Utility AI каждому доступному действию агента присваивается оценка «полезности», показывающая, насколько агент будет доволен его выполнением.
Чтобы определить действие с наивысшей полезностью, игра перебирает несколько десятков вариантов, начиная с завершения хода и заканчивая чтением заклинания или атакой. Любое действие имеет один или несколько входных параметров, каждый из которых представлен числом истинности или ложности. Эти значения суммируются и дают итоговую оценку полезности действия.
Возьмём пример с зельем лечения. Чтобы получить оценку полезности для зелья лечения, игра использует несколько входных параметров, которые могут повысить или понизить итоговый показатель. Вот они:
- Есть ли в инвентаре NPC зелье лечения? Если его нет, полезность действия должна быть очень низкой. Поскольку я знаю, что оценка для завершения хода NPC равна 0, я даю этому параметру значение −100 — это гаратнирует, что независимо от влияния входных параметров на общую оценку действия, она не превысит 0. Если у NPC есть зелье лечения, оценка не меняется, потому что само наличие зелья в инвентаре не влияет на желание его использовать.
- Второй по важности параметр связан с оценкой здоровья NPC. Если оно полное, проверка ничего не добавляет, однако если оно упало, скажем, ниже 50%, мы увеличиваем оценку, чтобы итог был выше базового значения 0. Допустим, это действие увеличивает оценку полезности до 25.
- Для примера добавим ещё один входной параметр. Сможет ли враг провести атаку по возможности, если агент выпьет зелье? Если да — уменьшаем оценку на 10. Таким образом, общая полезность действия составит 15, что понизит вероятность его выполнения, но не исключит совсем.
Предположим, наш гипотетический агент имеет зелье, его порядком потрепали, но критической опасности всё же нет. Это даст действию «Использовать зелье» итоговую оценку 25. Поблизости нет врагов, поэтому полезность атаки низкая, возможно, 10. Однако, на ИИ-агента действует эффект страха. Последний имеет крайне высокую оценку полезности, поскольку страх затмевает любые другие желания. Действие «Убежать в страхе» имеет оценку 75.
Итак, у нас получаются следующие оценки полезности:
- Использовать зелье лечения — 25
- Атаковать врага — 10
- Убежать в страхе — 75
Очевидным победителем становится «Убежать в страхе». Агент попытается найти место подальше от испугавшей его сущности и побежит туда.
В игре есть несколько базовых наборов действий полезности — один для агентов со средним интеллектом, один для неразумных агентов (нежить) и даже несколько специальных, например, для драконов. Это помогает придать агентам соответствующей их особенностям индивидуальности. Например, существа со средним интеллектом достаточно умны, чтобы зайти с фланга, чего не скажешь о неразумных. Монстры не ограничиваются стандартными наборами действий. Например, у медузы есть дополнительное действие взгляда, обращающего в камень.
Аналогичная система используется для определения типа атаки агента. Например, атака сбивания с ног получает больший приоритет, если агент крупнее цели и обладает умением «Улучшенное сбивание с ног». Если агент явно сильнее (огромная разница в показателе силы), он может попытаться выполнить захват, что особенно эффективно против магов, во многом лишающихся возможности колдовать.
Доступные агенту заклинания оцениваются в зависимости от количества целей, которые оно может поразить, союзников в области действия (при условии, что существо заботится о союзниках) и так далее. Чтобы заклинания выбирались немного менее предсказуемо, каждое заклинание с оценкой полезности в пределах 10% от наивысшей имеет равные шансы быть выбранным. Таким образом, агент прочитает одно из полезнейших заклинаний, отметая явно неудачные варианты.
Надеюсь, вы с интересом заглянули во внутренние аспекты игры. Следите за обновлениями, чтобы узнать больше подробностей в будущем!