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



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

Оценка позиции и дерево поиска
Поскольку точный расчет невозможен, моя нейросеть получает текущую расстановку и выдает числовую оценку от −1 до +1, определяя степень преимущества. Дополнительно сеть отсекает заведомо слабые ветки, а алгоритм симуляций определяет бюджет поиска для каждого хода, находя оптимальный баланс между скоростью и качеством решений.
Самообучение сети: откуда берутся партии
Для тренировки модели я применил подход AlphaZero, заставив алгоритм играть тысячи матчей против самого себя. Сгенерированные матчи формируют базу данных для следующих поколений, которые затем проходят «арену» — серию проверочных матчей против прежней версии программы. За несколько месяцев я сменил десятки поколений, попутно решая проблемы с подбором параметров.
Трудности тренировки и ловушки оптимизации
Иногда процесс заходил в тупик: ученик упорно не мог обыграть учителя. Эксперименты с размером сети не давали результата, пока я не скорректировал бюджет поиска на арене. Еще один неожиданный баг проявился после кэширования дерева ходов: бот стал играть умнее в защите, но партии стали чаще завершаться вничью, лишив нейросеть качественных примеров побед.

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

