Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как я обучил нейросеть играть в «Точки»: личный опыт разработки ИИ-соперника

Как я обучил нейросеть играть в «Точки»: личный опыт разработки ИИ-соперника

Я решил проверить, смогу ли обучить искусственный интеллект побеждать в классической игре на бумаге в клетку. Вдохновившись успехами алгоритмов в Го, я создал проект Just Dots, где нейросеть играет в «Точки» лучше меня самого. Прочитать полную версию статьи можно на Хабре, а ниже я подробно расскажу обо всех этапах создания и тренировки ИИ.

Процесс обучения нейросети на графиках
Графики изменения параметров обучения в процессе самоигры
Интерфейс редактора Godot с кодом игры
Рабочая среда Godot Engine при создании интерфейса Just Dots
Страница демоверсии Just Dots в Steam
Официальная страница проекта Just Dots в магазине Steam
Финальная игровая сессия против ИИ
Напряженный момент матча против нейросети на поле 20 на 20

Школьные баталии на тетрадных листах оставили у меня самые теплые воспоминания, но попытки запрограммировать честный алгоритм после университета долго не приносили успеха. Обычный перебор ходов здесь не работал из-за гигантского числа комбинаций, поэтому я обратил внимание на машинное обучение и метод самообучения нейросетей.

Как устроены «Точки» и почему шахматный подход не работает

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

Реклама
Игровое поле для точек с размеченными позициями
Интерфейс разрабатываемой игры Just Dots с активными ходами

Оценка позиции и дерево поиска

Поскольку точный расчет невозможен, моя нейросеть получает текущую расстановку и выдает числовую оценку от −1 до +1, определяя степень преимущества. Дополнительно сеть отсекает заведомо слабые ветки, а алгоритм симуляций определяет бюджет поиска для каждого хода, находя оптимальный баланс между скоростью и качеством решений.

Самообучение сети: откуда берутся партии

Для тренировки модели я применил подход AlphaZero, заставив алгоритм играть тысячи матчей против самого себя. Сгенерированные матчи формируют базу данных для следующих поколений, которые затем проходят «арену» — серию проверочных матчей против прежней версии программы. За несколько месяцев я сменил десятки поколений, попутно решая проблемы с подбором параметров.

Трудности тренировки и ловушки оптимизации

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

Дерево поиска возможных ходов бота
Схема разветвления вариантов при анализе игровой позиции

Технологический стек и создание простого уровня

Интерфейс и игровая логика написаны на движке Godot с использованием C# и .NET 10, тогда как обучение моделей происходит в Python через PyTorch. Для интеграции в приложение я экспортирую веса в универсальный формат ONNX. Когда дело дошло до новичков, выяснилось, что снизить сложность симуляций ИИ недостаточно — пришлось написать отдельного алгоритмического бота по эвристическим правилам.

Текущие итоги и релизные планы

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

Сравнение различных уровней сложности в Just Dots
Интерфейс настройки матча против искусственного интеллекта
01.