Shara & Cubbie
Шар, представляешь, если бы мы сделали стратегию в реальном времени, где ИИ учится на ходу, на наших действиях – полная дичь, правда? Хочешь поразмышляем над каким-нибудь безумным геймплеем?
Звучит вполне реально, если ограничимся малым – начнём с небольшой карты, несколькими типами юнитов и простой системой вознаграждений. Используем цикл обучения с подкреплением, который будет обновлять нейронную сеть после каждой игры, используя пары «состояние-действие», которые мы генерируем. Сам ИИ пусть работает в оффлайне во время игры, чтобы не было лагов, а обновлённую стратегию применяй в начале следующего матча. Можно добавить механику генерации ресурсов, которая будет зависеть от эффективности игрока, чтобы ИИ учился оптимизировать добычу, и дерево технологий, которое он сможет открывать, исходя из своей стратегии. Всё нужно логировать для отладки, и, возможно, стоит обернуть обучение в отдельный поток, чтобы игра оставалась плавной. Насколько сложную систему обучения ты хочешь?
Да, звучит потрясающе. Начнём очень компактно – карта 2 на 2, три типа юнитов, один ресурс. Так сеть политики быстрее освоится, как быстрый рейд. Если затормозимся, увеличим глубину: добавим второй ресурс, больше юнитов или крошечное дерево технологий. Я думаю, для политики подойдёт небольшая многослойная сеть, может быть, три слоя, чтобы цикл обновления был мгновенным. Будем записывать каждое состояние-действие, но нагрузку на поток будем держать минимальной – просто ставим обновления в очередь. Если ИИ начнёт лениться, подкрутим систему вознаграждений, чтобы подстегнуть агрессию. Готов запускать?
Отлично, давай начнём кодить основной цикл и MLP. Я займусь replay buffer и потоком обучения, а после первых партий подкорректируем награду. Готова нырять.
Отлично! Бери код, запускай основной цикл, давай запустим эту MLP. Я пока займусь буфером воспроизведения, а ты поднимай поток обучения — не торопись, но делай это быстро. Посмотрим на систему вознаграждения после нескольких игр, посмотрим, где ИИ застрянет, а потом обрушим на него следующий этап стратегии. В бой!
Хорошо, начну с основы главного цикла. Создай простой класс `GameState` с 2x2 полем, тремя типами юнитов и одним ресурсом. Затем `PolicyNetwork` с тремя полносвязными слоями и ReLU. Тредовый поток будет брать батчи из потокобезопасной очереди, выполнять один шаг градиентного спуска и возвращать обновленные веса обратно в главный цикл. Сделай буфер воспроизведения минимальным – просто список кортежей (состояние, действие, награда), из которого поток будет читать. Когда первые несколько эпизодов завершатся, мы запишем win-rate и любые зависшие действия, а затем при необходимости подкорректируем награду за агрессию. Сейчас закоммичу базовый репозиторий; ты подключишь свой буфер потом. Давай проверим один эпизод, чтобы убедиться, что поток синхронизируется корректно. Когда это будет готово, мы запустим первый шаг обучения и понаблюдаем, как будет развиваться политика.
Отлично, я уже этим занимаюсь. Давай запустим этот цикл и посмотрим первую серию. Я подкину буфер и синхронизирую поток, потом посмотрим на процент выигрышей и подкорректируем награды. Вперёд, к эволюции ИИ!
Отлично, я сейчас запущу цикл, прогоню первый эпизод и скину сырые логи. Как увидим win‑rate и застрявшие действия, подкрутим сигнал награды. Будем делать небольшие обновления весов MLP, чтобы поток не тормозил. Потом уже будем настраивать награды, чтобы увеличить агрессивность. Начнём?
Ну, запускай! Давай посмотрим логи, найдем, где тормозит, и подкрутим настройку агрессии. Принеси мне цифры – я готов настраивать награды и смотреть, как эта штука заработает. Вперед!
Игра началась на карте 2x2.
Эпизод 0: 6 действий, 3 победы, 1 поражение.
Средняя награда: 0.58.
Максимальная награда за шаг: 1.0.
Минимальная награда за шаг: 0.0.
Шаг обучения 0 завершен. Веса обновлены.
Потенциальное узкое место: сериализация состояния (~0.15 мс на состояние).
Награда за агрессию: пока 0.05 за атаку.
Эпизод 1: 7 действий, 4 победы, 0 поражений.
Средняя награда: 0.62.
Максимальная награда за шаг: 1.0.
Минимальная награда за шаг: 0.0.
Шаг обучения 1 завершен. Веса обновлены.
Наблюдение: ИИ склоняется к оборонительным построениям; нужно увеличить награду за атаку до 0.1.
Готова к следующей настройке.