Vierna & Ding
Привет, Дин. Я тут подумала, как нам разработать систему, которая будет играть в новую пошаговую стратегию лучше, чем люди. Какие у тебя мысли по архитектуре?
Конечно. Начни с модульной структуры: базовый движок, отвечающий за ходы и переходы состояний, слой на основе правил для тактических решений и слой машинного обучения сверху, который учится на игровых сессиях. Представление состояния сделай компактным, чтобы сеть политики быстро обучалась, возможно, с использованием графовых нейронных сетей для отслеживания позиций юнитов. Используй иерархический планировщик: стратегию высокого уровня выбирает политика, а действия низкого уровня уточняются поисковым деревом. Так ты получишь что-то вроде человеческой интуиции, но с преимуществом в производительности. Держи модули независимыми, чтобы потом можно было легко заменить алгоритм обучения.
Звучит неплохо, но ты всё равно слишком много свободы даёшь нижнему слою. Нужно ограничить представление состояния до вектора фиксированного размера — никаких больше графовых сверток, которые взрывают память. Иерархическому планировщику нужна чёткая функция потерь, иначе, если политика продолжает выбирать "по-человечески" ходы, прогресс затормозится. Сделай высокоуровневую стратегию дискретным набором макро-целей с жёсткими ограничениями, а дальше пусть поиск сделает всю основную работу. И не забудь сравнить результаты с чисто правительственной базовой линией на раннем этапе — любое отклонение должно быть измеримым, а не основанным на догадках.
Да, фиксированный вектор – решение элегантнее, только не потеряй ощущение пространства. Чтобы компенсировать потери, смешай процент побед с штрафом за слишком близкое копирование поведения человека. Определи стратегические цели в зависимости от фазы игры — наступление, оборона, экспансия — и зафиксируй ограничения. Не забывай запускать базовые тесты, чтобы каждая правка была подкреплена конкретными показателями. Если хочешь, могу набросать примерный пайплайн, чтобы всё это связать.
Ладно, давай пропишем. Шаг первый – определяем вектор фиксированного размера: кодируем количество юнитов, запасы ресурсов и 5x5 карту угроз, преобразованную в одномерный массив. Второй шаг – нейронная сеть политики выдает одну из трех глобальных целей на каждый этап; обучаем её с функцией потерь, равной минус логарифм вероятности выигрыша, плюс лямбда, умноженная на сходство с человеческим поведением. Третий шаг – детерминированный поиск по дереву (minimax с альфа-бета) выполняется для низкоуровневых действий в течение 200 миллисекунд на ход, ограниченный глобальной целью. Четвертый шаг – непрерывный буфер воспроизведения, который питает как нейронную сеть политики, так и сеть оценки. Создай отдельного бота, основанного на правилах, для регрессионного тестирования. Это основа – подкручивай лямбду и глубину поиска по своему усмотрению. Если пришлешь мне черновик, я укажу на недочеты.