
Механизм принятия решений ИИ
Контекст
В рамках процесса найма мне было предложено принять участие в соревновании CodinGame. Цель состояла в том, чтобы разработать бота, способного достичь лиги Gold в испытании Soak Overflow.
В игре две команды агентов сражаются на сетке. Каждый ход каждый агент должен выбрать перемещение и действие (выстрел, бросок бомбы или переход в защиту), чтобы максимизировать шансы команды на победу, учитывая перемещения союзников, контроль территории, укрытия и множество тактических взаимодействий.
Цели
Помимо самого рейтинга, я поставил перед собой цель создать механизм принятия решений, который:
- является модульным;
- легко объясним;
- легко расширяется и улучшается;
- основан на явных правилах предметной области, а не на трудно интерпретируемых коэффициентах и оценках.
Решение
Основу проекта составляет индивидуальный механизм принятия решений, который независимо выполняется для каждого агента.
Каждое решение объединяет несколько уровней анализа:
- оценка угроз;
- оценка наступательных возможностей;
- расчёт эффективного урона с учётом укрытий;
- контроль территории;
- поиск пути с помощью BFS;
- координация союзников посредством моделирования текущего состояния хода.
Архитектура чётко разделяет ответственность между представлением карты, пространственными вычислениями, агентами, состоянием игры и формированием действий.
Подход
В процессе разработки проект значительно изменился.
Первая архитектура, основанная главным образом на коллективных стратегиях, довольно быстро достигла своих пределов, несмотря на множество итераций.
Вместо того чтобы продолжать добавлять всё больше частных случаев, я полностью пересмотрел подход и сосредоточился на гораздо более мощном индивидуальном механизме принятия решений.
Каждое изменение проверялось экспериментально с помощью скрипта, автоматически запускавшего множество матчей, что позволило уменьшить влияние случайных колебаний рейтинга.
Такой подход помог выявить действительно полезные улучшения и в итоге достичь лиги Gold.
Результат

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