8.1 KiB
Tic-Tac-Toe AI (5 в ряд на поле 10x10)
Добро пожаловать в репозиторий Tic-Tac-Toe AI!
Здесь вы найдёте реализацию популярной игры «Крестики-нолики» на поле 10x10 с условием победы при 5 в ряд, дополненную простым обучением с подкреплением на базе PyTorch и визуализацией при помощи Pygame.
Оглавление
- Особенности проекта
- Используемые технологии
- Установка и запуск
- Принцип работы
- Структура репозитория
- Возможности для доработки
- Обратная связь
- Лицензия
Особенности проекта
- Расширенное поле: 10x10 вместо классических 3x3.
- Нейронная сеть: использует
PyTorchдля оценки выгодности ходов. - Обучение с подкреплением: каждое действие вознаграждается или наказывается, что позволяет модели учиться более осмысленной стратегии.
- Визуализация: библиотека
Pygameотображает текущую доску, ходы и процесс игры. - Награда за победу / ничью / проигрыш:
- Победа:
+1 - Ничья:
+0.5 - Проигрыш:
-1
- Победа:
Используемые технологии
- Python — основной язык разработки
- NumPy — для удобной работы с массивами и матрицами
- PyTorch — фреймворк для создания и обучения нейронных сетей
- Pygame — для визуализации игрового поля
- random — для выбора случайных ходов соперника
- torch.optim — оптимизатор (Adam) для обучения сети
- torch.nn — слои и функции потерь (MSE) для нейросети
Установка и запуск
1. Клонирование репозитория
git clone https://github.com/ваш-логин/tic-tac-toe-ai-10x10.git
cd tic-tac-toe-ai-10x10
2. Создание и активация виртуального окружения (рекомендуется)
python -m venv venv
# Для Windows:
venv\Scripts\activate
# Для macOS / Linux:
source venv/bin/activate
3. Установка зависимостей
pip install -r requirements.txt
Примечание: убедитесь, что у вас установлены Python (3.7+) и pip.
Если зависимостей немного и они не вынесены в файлrequirements.txt, установите их вручную:pip install numpy torch pygame
4. Запуск проекта
python main.py
После запуска откроется окно Pygame с игрой. В терминале/консоли будет отражаться прогресс обучения по эпизодам.
Принцип работы
-
Инициализация
Создаётся доска размера10x10, полностью заполненная нулями (0 означает пустую клетку). -
Нейронная сеть
- Входной слой:
BOARD_SIZE * BOARD_SIZE = 100входов (каждая клетка кодируется числом). - Скрытые слои: два по 128 нейронов с функцией активации ReLU.
- Выходной слой:
100нейронов, по одному на каждую клетку (представляет Q-значение для каждого возможного хода).
- Входной слой:
-
Обучение с подкреплением
- После каждого хода вычисляется награда:
WIN_REWARD,DRAW_REWARDилиLOSE_REWARD. - Используется Q-learning: [ Q(s, a) \leftarrow Q(s, a) + \alpha , \bigl[r + \gamma \max_{a'} Q(s', a') - Q(s, a)\bigr] ]
- Оптимизатор Adam с функцией потерь MSE минимизирует разницу между предсказанными Q-значениями и целевыми.
- После каждого хода вычисляется награда:
-
Игровой процесс
- Игрок
1(AI) выбирает ход согласно стратегии (берёт argmax по Q-значениям). - Игрок
2(случайный выбор) ставит «крестик» в любую свободную клетку. - Проверяется, сформированы ли 5 в ряд:
- по горизонтали,
- по вертикали,
- по диагонали и \ или против диагонали.
- Переход к следующему состоянию и повтор шага обучения (обновление Q-значений).
- Игрок
Структура репозитория
tic-tac-toe-ai-10x10/
├── main.py # Основной скрипт с игрой и логикой обучения
├── requirements.txt # Список необходимых зависимостей (при наличии)
├── README.md # Текущий файл README
└── assets/ # (опционально) изображения, иконки и др. ресурсы
Возможности для доработки
- Добавить функцию сохранения модели после обучения.
- Реализовать нагрузочное тестирование (например, через несколько тысяч партий).
- Сделать противника умнее: вместо случайных ходов использовать алгоритмы минимакса, MCTS или другую нейронную сеть.
- Графический интерфейс: добавить меню, кнопки «Начать заново», «Выход» и др.
- Многопоточность: параллельно запускать несколько партий, ускоряя обучение.
Обратная связь
Если у вас возникли вопросы, идеи или предложения по улучшению проекта, будем рады обратной связи:
- Открывайте Issue в данном репозитории.
- Или пишите напрямую: email@example.com.
Лицензия
Данный проект распространяется по лицензии MIT. Свободно используйте, изменяйте и дополняйте код для любых целей.
Сделано с любовью и увлечённостью к AI и играм!
