Хотя я согласен с вступительным параграфом DampeS8N (т.е. игровой ИИ должен быть достаточно умным, чтобы заставить игрока думать, что он умный), но я чувствую, что этот вопрос нуждается в некоторой доработке. Используемые структуры данных могут быть FSM для всех уровней, но на самом деле это не отвечает на вопрос о том, как работают отдельные системы.
Отказ от ответственности: я почти не играл в игры Civilization, поэтому мое понимание игрового процесса ограничено. Если есть какие-либо очевидные ошибки, я прошу прощения. Пожалуйста, поправьте меня, и я с удовольствием отредактирую.
Я буду брать цитаты из оригинальной статьи IGN .
1. Тактический ИИ
На самом низком уровне тактический ИИ использует имеющиеся силы, чтобы выиграть битву в локальном масштабе.
Это, наверное, самая стандартная часть подсистемы. Есть безграничные способы сделать это, используя FSMs, Trehavior Trees (или даже выполняя произвольные действия, в зависимости от сложности ИИ).
Однако, поскольку это пошаговая игра, похожая на Risk, я думаю, что более вероятно, что каждому юниту присваивается счет. Затем к этой оценке добавляются множители, зависящие от различных переменных (пристрастия, бонусы на местности и т. Д.).
Затем результат рассчитывается примерно так:
If (AI unit score >> (much greater) enemy unit score) Then Completely destroy enemy unit
If (AI unit score > (somewhat greater) enemy unit score) Then Partially destroy enemy unit
If (AI unit score < (somewhat less) enemy unit score) Then Partially destroy AI unit
If (AI unit score << (much less) enemy unit score) Then Completely destroy AI unit
Имеет смысл, что ИИ будет пытаться максимизировать этот счет в бою.
Добавьте значение эпсилона (например, небольшой случайный шанс неудачи / успеха), и вы получите довольно прилично выглядящий ИИ (никто не хочет идеального противника, это просто не весело!).
2. Операционный ИИ
На шаг впереди от этого операционный ИИ выбирает, какие сражения сражаться, и обеспечивает наличие необходимых сил.
Я думаю, что есть пара моментов для этого:
- Оценка силы тока
- Армирование блоков
- Оценка того, какие бои выбрать / избежать
Оценка текущей силы - это просто крики карты влияния на меня. Это может быть легко представлено на шестигранной сетке. Поскольку эта подсистема ориентирована на боевые действия, значения влияния могут быть репрезентативными для значений силы каждого подразделения в непосредственной близости. Если ваша массивная армия сосредоточена в небольшой области шестиугольников, значение влияния будет огромным, и операционный ИИ примет это во внимание при оценке выбранных боев. Не забывайте, значения влияния противоборствующих армий также будут рассчитаны. Это позволяет операционному ИИ прогнозировать потенциальные входящие угрозы.
Укрепление юнитов. Получая информацию о противоборствующих фракциях с карты влияния, ИИ может определить, какие юниты находятся под наибольшей угрозой. ИИ может затем дать команду ближайшим подразделениям пойти и усилить угрожаемые стороны.
Оценка того, какие бои выбрать / избежать - здесь может возникнуть пара ситуаций. Если ИИ обнаружит, что отряд находится под угрозой, И поблизости нет отрядов, которые могли бы ему помочь, то он может а) принять решение пожертвовать отрядом (если они просто пехотинцы, вместо незаменимого генерала, например) или б) заказать отряд отступать. И наоборот, если ИИ обнаружит слабый вражеский отряд возле армии, он может приказать отрядам убить этого врага.
Вот достойный документ, в котором используются карты влияния в играх со стратегиями в реальном времени.
3. Стратегический ИИ
Продвигаясь еще выше, стратегический ИИ управляет империей в целом, концентрируясь на том, где строить города и что с ними делать.
"Где я должен построить город?" просто звучит как оценка позиции. Шахматные программы и другие игры используют его для определения желательности данной позиции. Например:
Hex A: близко к ресурсам, на большой местности, близко к союзникам, близко к врагу Hex B: далеко от ресурсов, на средней высоте, на среднем расстоянии от союзников, далеко от врага
Функция оценки позиции может принимать следующие три фактора:
Score = Proximity to resources (closer yields a higher score) +
terrain elevation (higher yields higher score) +
proximity to allies (closer is better) +
proximity to enemies (farther is better)
И какой бы шестиугольник не набрал больше очков, он будет там, где построен город. Более подробную информацию о функциях оценки можно найти здесь .
Я считаю, что стратегический ИИ также имеет кучу псевдо-предварительно выпеченных стратегий в игре в зависимости от типа победы, к которой стремится ИИ.
4. Большой стратегический ИИ
На вершине лестницы находится грандиозный стратегический ИИ, который решает, как выиграть игру.
Я думаю, что это, пожалуй, самый простой из всех, и создается впечатление, что он более впечатляющий, чем на самом деле. В такой игре будет только конечное количество типов побед. В статье упоминается победа над завоеванием, при условии, что есть победы Альянса и т. Д., Это может быть так же просто, как случайный выбор одного из типов и затем передача его в другие системы.
РЕДАКТИРОВАТЬ: Конечно, как указал DampeS8N, тип карты может диктовать наилучшее условие победы, в этом случае он может быть жестко закодирован проектировщиками или какой-либо функцией оценки, учитывающей различные переменные.
Резюме.
Я думаю, что действительно важно отметить, что система такого типа состоит в том, что, как подсистемы являются многоуровневыми, им не нужно много общаться друг с другом. Это выглядит как нисходящая архитектура со слабосвязанными компонентами. С точки зрения технического дизайна, он чистый и гибкий, и, вероятно, черпает вдохновение из Emergent Behavior и / или Subsuration Architecture .
Я действительно извиняюсь за длину этого поста, он превратился в чудовище :(
В любом случае, я надеюсь, что это поможет!
В общем, ИИ в играх не следует рассматривать как «сложный», это все о получении того, что вы хотите, с наименьшими усилиями. Название игры - Появление.
В этом случае ваша фундаментальная концепция неверна. Эти 4 системы вообще не должны работать вместе. Им просто нужно выглядеть так, как они. Они также могут быть намного более урезаны, чем вы думаете, они должны быть.
Вы также изменили порядок сложности. Самым сложным компонентом Civ AI является тактический AI, за которым следует операционный. Стратегия, вероятно, очень проста, и великий ИИ, вероятно, еще проще.
Связь между компонентами больше похожа на систему хрюканства и меньше похожа на реальное общение. С высокого уровня на низкий уровень это будет выглядеть так:
Великий ИИ
оценить состояние карты. Учитывая знания, которыми обладает ИИ (которым может быть все или только то, что он имел бы, если бы был игроком), он решает, какую конечную цель достичь быстрее всего. Скорее всего, это машина с конечным числом состояний , которая решает некоторые задачи и выбирает цель. Возможно, это что-то более экзотическое; генетический алгоритм или , возможно, на основе байесовской Штучки . Затем он проворчал сообщение типа «больше науки».
Страт А.И.
затем смотрит на то, что у него есть для работы, используя большую часть той же информации. Речь идет о попытках достичь этой общей цели, но также и о более детальных аспектах игры. Я на войне? Есть ли у меня голодные люди? скоро. Вероятно, это также машина с конечным состоянием , возможно, Fuzzy Logic (которая на самом деле является просто эволюцией в FSM.) Давайте предположим, что это простой FSM. Он задаст вышеупомянутые вопросы в том порядке, в котором, учитывая определенные критерии, он решит, что в этом раунде должны произойти разные вещи. Я на войне, выделяю деньги на подготовку солдат. Мои люди голодают, строят здесь зернохранилище, а не строят что-то научное.
Выбор единиц для сборки может быть частью Strat AI или Op AI в зависимости от того, как мы делим вещи.
Оп AI
возьмет отряды, которые доступны, и назначит их для перехода на разные фронты войны. Это решит общую форму конфликта, куда новые подразделения возглавят, как только они будут развернуты. Это, вероятно, также FSM. Он может заметить, что враг на фронте А атакует юнитами, слабыми против юнита В, и отправит туда больше юнитов В, а не на другой фронт, который силен против юнита В. Он будет отдавать общие приказы юнитам в целом. Атака по желанию. Отступление. Скоро.
Тактический ИИ
это конкретная единица. Каждый тип юнитов будет по-разному реагировать на общий порядок. Подразделение, предназначенное для самоубийства, может игнорировать приказ об отступлении. Отряды, которые являются воинами, могут отступать, даже когда им приказывают сражаться. Цив обычно очень легок в такого рода вещах. Как правило, все подразделения в Civ следуют своим командам. Учитывая больший порядок, в котором они находятся, они (видят образец здесь?) FSM. Я ранен? Я должен отступить и исцелиться. Есть ли у меня преимущество в этом месте? Атака. Я слишком близко к атаке? Отвали. И сложность этого FSM не должна быть намного больше, чем эти три вещи, чтобы быть эффективными и убедительными как интеллектуальные.
Можно ли это улучшить?
Да, конечно. Вопрос в том, заметят ли игроки. И 99% времени у них не будет.
Теперь, это все AI принятия решений. Здесь действуют другие подсистемы ИИ. Существует A * или другой алгоритм поиска пути, который позволяет юнитам найти кратчайший путь к локации. Существуют алгоритмы поиска лучшего места для начала новых городов. Скоро. Их часто группируют с ИИ, и зачастую они действительно более сложны, чем «думающая» часть ИИ. На самом деле, код для поиска ответов на вопросы, которые должен задать ФСМ, часто на несколько порядков сложнее, чем сам ФСМ. Как именно можно решить, что
источник