# Tic-Tac-Toe AI (5 в ряд на поле 10x10) Добро пожаловать в репозиторий **Tic-Tac-Toe AI**! Здесь вы найдёте реализацию популярной игры «Крестики-нолики» на поле **10x10** с условием победы при **5 в ряд**, дополненную простым обучением с подкреплением на базе **PyTorch** и визуализацией при помощи **Pygame**.

Tic Tac Toe 5 in a row

--- ## Оглавление 1. [Особенности проекта](#особенности-проекта) 2. [Используемые технологии](#используемые-технологии) 3. [Установка и запуск](#установка-и-запуск) 4. [Принцип работы](#принцип-работы) 5. [Структура репозитория](#структура-репозитория) 6. [Возможности для доработки](#возможности-для-доработки) 7. [Обратная связь](#обратная-связь) 8. [Лицензия](#лицензия) --- ## Особенности проекта - **Расширенное поле**: 10x10 вместо классических 3x3. - **Нейронная сеть**: использует `PyTorch` для оценки выгодности ходов. - **Обучение с подкреплением**: каждое действие вознаграждается или наказывается, что позволяет модели учиться более осмысленной стратегии. - **Визуализация**: библиотека `Pygame` отображает текущую доску, ходы и процесс игры. - **Награда за победу / ничью / проигрыш**: - **Победа**: `+1` - **Ничья**: `+0.5` - **Проигрыш**: `-1` --- ## Используемые технологии - [**Python**](https://www.python.org/) — основной язык разработки - [**NumPy**](https://numpy.org/) — для удобной работы с массивами и матрицами - [**PyTorch**](https://pytorch.org/) — фреймворк для создания и обучения нейронных сетей - [**Pygame**](https://www.pygame.org/) — для визуализации игрового поля - [**random**](https://docs.python.org/3/library/random.html) — для выбора случайных ходов соперника - [**torch.optim**](https://pytorch.org/docs/stable/optim.html) — оптимизатор (Adam) для обучения сети - [**torch.nn**](https://pytorch.org/docs/stable/generated/torch.nn.Module.html) — слои и функции потерь (MSE) для нейросети --- ## Установка и запуск ### 1. Клонирование репозитория ```bash git clone https://github.com/ваш-логин/tic-tac-toe-ai-10x10.git cd tic-tac-toe-ai-10x10 ``` ### 2. Создание и активация виртуального окружения (рекомендуется) ```bash python -m venv venv # Для Windows: venv\Scripts\activate # Для macOS / Linux: source venv/bin/activate ``` ### 3. Установка зависимостей ```bash pip install -r requirements.txt ``` > **Примечание**: убедитесь, что у вас установлены Python (3.7+) и pip. > Если зависимостей немного и они не вынесены в файл `requirements.txt`, установите их вручную: > ```bash > pip install numpy torch pygame > ``` ### 4. Запуск проекта ```bash python main.py ``` > После запуска откроется окно Pygame с игрой. В терминале/консоли будет отражаться прогресс обучения по эпизодам. --- ## Принцип работы 1. **Инициализация** Создаётся доска размера `10x10`, полностью заполненная нулями (0 означает пустую клетку). 2. **Нейронная сеть** - Входной слой: `BOARD_SIZE * BOARD_SIZE = 100` входов (каждая клетка кодируется числом). - Скрытые слои: два по 128 нейронов с функцией активации ReLU. - Выходной слой: `100` нейронов, по одному на каждую клетку (представляет **Q-значение** для каждого возможного хода). 3. **Обучение с подкреплением** - После каждого хода вычисляется награда: `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-значениями и целевыми. 4. **Игровой процесс** - Игрок `1` (AI) выбирает ход согласно стратегии (берёт **argmax** по Q-значениям). - Игрок `2` (случайный выбор) ставит «крестик» в любую свободную клетку. - Проверяется, сформированы ли 5 в ряд: - по горизонтали, - по вертикали, - по диагонали и \ или против диагонали. - Переход к следующему состоянию и повтор шага обучения (обновление Q-значений). --- ## Структура репозитория ``` tic-tac-toe-ai-10x10/ ├── main.py # Основной скрипт с игрой и логикой обучения ├── requirements.txt # Список необходимых зависимостей (при наличии) ├── README.md # Текущий файл README └── assets/ # (опционально) изображения, иконки и др. ресурсы ``` --- ## Возможности для доработки 1. **Добавить функцию сохранения модели** после обучения. 2. **Реализовать нагрузочное тестирование** (например, через несколько тысяч партий). 3. **Сделать противника умнее**: вместо случайных ходов использовать алгоритмы минимакса, MCTS или другую нейронную сеть. 4. **Графический интерфейс**: добавить меню, кнопки «Начать заново», «Выход» и др. 5. **Многопоточность**: параллельно запускать несколько партий, ускоряя обучение. --- ## Обратная связь Если у вас возникли вопросы, идеи или предложения по улучшению проекта, будем рады обратной связи: - Открывайте **Issue** в данном репозитории. - Или пишите напрямую: [email@example.com](mailto:email@example.com). --- ## Лицензия Данный проект распространяется по лицензии **MIT**. Свободно используйте, изменяйте и дополняйте код для любых целей.

Сделано с любовью и увлечённостью к AI и играм!