Разработка пошаговой 4х стратегии. Идеи внедрения ИИ.

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

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

    1. Сделать двух юнитов: поселенца, позволяющего создавать города, и базовую пехоту для обороны и расширений.

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

       a. Поля, которые приносят еду. Нужно поддерживать уровень потребления населением города данного ресурса. Если он будет меньше требуемого, то население будет падать и уровень города уменьшаться, если выше, то наоборот, он будет расти и расширять свои территории.

        b. Рынок, который приносит монеты. На данный ресурс можно нанимать новые отряды, строить здания, торговать и т.д.

           c. Лесопилка. Дерево нужно для постройки зданий.

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

    4. Сделать базовый искусственный интеллект для ботов и провести симуляцию игры на двух игроков.

Примерно действия бота будут выглядеть так:

    Постройка поселенца -> постройка города -> постройка зданий в городах -> постройка юнитов -> расширение территорий -> захват вражеских городов/уничтожение вражеских юнитов.

Но давайте разберемся как можно это реализовать.

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

                                Рис.1. Пример иерархической машины состояний для ИИ.

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

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

    Еще одним видом ИИ для ботов может быть целеориентированное планирование действий(GOAP). Целью является желаемое конечное состояние, которого необходимо достичь, и оно имеет набор условий, которые должны быть выполнены для ее достижения. Так план будет представлять собой последовательность действий, ведущих от текущего мира к желаемому целевому состоянию. Так пример планирования можно увидеть на рисунке 3.
Рис.3. Абстрактная иллюстрация процесса планирования.

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

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

Рис.6. Пример использования коэффициентов полезности в дипломатии

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