Files
Tic-Tac-Toe-AI/README.md
T
2024-12-31 11:01:31 +03:00

145 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tic-Tac-Toe AI (5 в ряд на поле 10x10)
Добро пожаловать в репозиторий **Tic-Tac-Toe AI**!
Здесь вы найдёте реализацию популярной игры «Крестики-нолики» на поле **10x10** с условием победы при **5 в ряд**, дополненную простым обучением с подкреплением на базе **PyTorch** и визуализацией при помощи **Pygame**.
<p align="center">
<img width="400" src="https://user-images.githubusercontent.com/25181517/183357849-86f72a59-fbfc-49a0-b28d-3b2fce5a8c6e.png" alt="Tic Tac Toe 5 in a row">
</p>
---
## Оглавление
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**. Свободно используйте, изменяйте и дополняйте код для любых целей.
<p align="center">
Сделано с любовью и увлечённостью к AI и играм!
</p>