Skip to content

Latest commit

 

History

History
232 lines (188 loc) · 11.6 KB

File metadata and controls

232 lines (188 loc) · 11.6 KB

OpusChess - UCI Chess Engine

Python License Release

Шахматный движок на чистом Python с поддержкой протокола UCI.

🇬🇧 English version

Возможности

Правила шахмат (FIDE)

  • ✅ Все ходы фигур (пешка, конь, слон, ладья, ферзь, король)
  • ✅ Рокировка (короткая O-O и длинная O-O-O)
  • ✅ Взятие на проходе (en passant)
  • ✅ Превращение пешки (в ферзя, ладью, слона, коня)
  • ✅ Шах, мат, пат
  • ✅ Правило 50 ходов
  • ✅ Троекратное повторение позиции
  • ✅ Недостаточность материала для мата

Протокол UCI

  • uci - идентификация движка
  • isready / readyok - проверка готовности
  • ucinewgame - новая игра
  • position startpos [moves ...] - начальная позиция
  • position fen <fen> [moves ...] - позиция из FEN
  • go depth <n> - поиск на глубину n
  • stop - остановить поиск
  • quit - выход

Движок поиска

  • ✅ Minimax с альфа-бета отсечением
  • ✅ Итеративное углубление
  • ✅ Quiescence search (поиск спокойствия)
  • ✅ Упорядочивание ходов (MVV-LVA)
  • ✅ Piece-square tables для оценки позиции
  • Транспозиционная таблица (Zobrist hashing, 64MB кэш)
  • ✅ TT move ordering (лучший ход из кэша первым)
  • Null Move Pruning (пропуск хода для отсечения)
  • Late Move Reductions (сокращённый поиск для поздних ходов)
  • Killer Move Heuristic (запоминание ходов с отсечением)
  • History Heuristic (статистика успешных ходов)
  • Principal Variation Search (PVS)
  • Aspiration Windows (сужение окна альфа-бета)
  • Static Exchange Evaluation (SEE для оценки взятий)
  • Futility Pruning (отсечение бесперспективных ходов)
  • Check Extensions (продление поиска при шахах)
  • Internal Iterative Deepening (IID для позиций без TT-хода)

UCI Опции

  • Hash — размер транспозиционной таблицы (1-1024 MB, по умолчанию 64)
  • Depth — глубина поиска по умолчанию (1-30, по умолчанию 6)
  • Ponder — включить вывод ponder move
  • UseTranspositionTable — включить/выключить TT
  • UseNullMove — включить/выключить Null Move Pruning
  • UseLMR — включить/выключить Late Move Reductions
  • UseIID — включить/выключить Internal Iterative Deepening
  • UseRazoring — включить/выключить Razoring
  • UseReverseFutility — включить/выключить Reverse Futility Pruning
  • UseLMP — включить/выключить Late Move Pruning
  • UseProbcut — включить/выключить Probcut
  • UseSingularExtensions — включить/выключить Singular Extensions
  • UseCountermove — включить/выключить Countermove Heuristic
  • Clear Hash — очистить транспозиционную таблицу

Улучшенная оценка позиции

  • ✅ Структура пешек (сдвоенные, изолированные, проходные, цепи)
  • ✅ Безопасность короля (пешечный щит, открытые линии)
  • ✅ Активность фигур (пара слонов, ладьи на открытых линиях, на 7-й горизонтали)
  • ✅ Мобильность фигур (кони, слоны, ладьи, ферзь)
  • ✅ Контроль центра

Эндшпильные знания

  • KQ vs K — ферзь против короля (оттеснение к краю)
  • KR vs K — ладья против короля (форсированный мат)
  • KBN vs K — слон + конь против короля
  • KP vs K — правило квадрата, ладейные пешки
  • KR vs KP — ладья против пешки

Запуск

python main.py

Пример вывода статистики:

info depth 1 score cp 82 nodes 45 time 16 nps 2723 hashfull 0 pv e2e4
info depth 2 score cp 0 nodes 322 time 118 nps 2718 hashfull 0 pv d2d4 d7d5
info depth 3 score cp 69 nodes 971 time 368 nps 2635 hashfull 0 pv e2e4 d7d5 b1c3
info depth 4 score cp 0 nodes 4048 time 1544 nps 2621 hashfull 0 pv b1c3 e7e5 e2e4 b8c6
info depth 5 score cp 61 nodes 4751 time 2150 nps 2208 hashfull 2 pv g1f3 g8f6 b1c3 d7d5 d2d4
bestmove g1f3 ponder g8f6

Расшифровка полей:

  • depth — текущая глубина поиска
  • score cp — оценка в сантипешках (+ белые лучше)
  • nodes — количество исследованных позиций
  • time — время в миллисекундах
  • nps — узлов в секунду (скорость)
  • hashfull — заполненность хеш-таблицы (0-1000)
  • pv — главная линия (лучшие ходы)
  • ponder — ожидаемый ответ противника

После запуска движок ожидает UCI-команды из stdin.

Использование с GUI

  1. Откройте любую UCI-совместимую программу (Arena, CuteChess, и т.д.)
  2. Добавьте движок: укажите путь к main.py
  3. Начните играть!

Пример использования в консоли

> uci
id name OpusChess 2.0
id author AI Assistant
option name Hash type spin default 64 min 1 max 1024
option name Depth type spin default 6 min 1 max 30
...
uciok

> isready
readyok

> position startpos
> go depth 5
info depth 1 score cp 82 nodes 45 time 16 nps 2723 hashfull 0 pv e2e4
...
bestmove g1f3 ponder g8f6

> quit

Структура проекта

├── main.py              # Точка входа
├── board.py             # Представление доски, FEN, ходы
├── move_generator.py    # Генерация легальных ходов
├── evaluation.py        # Оценка позиции
├── search.py            # Поиск лучшего хода
├── uci.py               # UCI протокол
└── README.md            # Документация

Отладочные команды

Дополнительные команды (не входят в стандарт UCI):

  • d - показать доску в текстовом виде
  • perft <depth> - подсчёт узлов (для тестирования)
  • bench - бенчмарк производительности

История разработки

Последовательность улучшений в хронологическом порядке:

Этап 1: Базовая реализация

  1. Представление доски (board.py) — 64-элементный массив, FEN-парсинг, make/unmake move
  2. Генератор ходов (move_generator.py) — все легальные ходы FIDE
  3. Базовая оценка (evaluation.py) — материал + piece-square tables
  4. Поиск (Minimax) (search.py) — альфа-бета отсечение
  5. UCI протокол (uci.py) — полная поддержка UCI

Этап 2: Оптимизации поиска

  1. Транспозиционная таблица — Zobrist hashing, кэширование позиций
  2. Null Move Pruning — пропуск хода для отсечения
  3. Late Move Reductions (LMR) — сокращение глубины для поздних ходов
  4. Killer Move Heuristic — запоминание ходов с beta-отсечением
  5. History Heuristic — статистика успешных ходов
  6. Principal Variation Search (PVS) — оптимизация PV-узлов

Этап 3: Расширенные оптимизации

  1. Aspiration Windows — сужение окна альфа-бета
  2. Static Exchange Evaluation (SEE) — быстрая оценка взятий
  3. Futility Pruning — отсечение бесперспективных тихих ходов
  4. Check Extensions — продление поиска при шахах
  5. Internal Iterative Deepening (IID) — поиск TT-хода

Этап 4: Улучшенная оценка

  1. Структура пешек — сдвоенные, изолированные, проходные, цепи
  2. Безопасность короля — пешечный щит, открытые линии
  3. Активность фигур — пара слонов, ладьи на 7-й, открытые линии
  4. Мобильность — подсчёт доступных полей для фигур
  5. Контроль центра — бонус за центральные пешки

Этап 5: Эндшпильные знания

  1. KQ vs K — ферзь против короля
  2. KR vs K — ладья против короля
  3. KBN vs K — слон + конь против короля
  4. KP vs K — правило квадрата, оппозиция
  5. KR vs KP — ладья против пешки

Этап 6: UCI расширения

  1. UCI Options — настраиваемые параметры (Hash, Depth, флаги)
  2. Info callback — вывод статистики на каждой глубине (depth, nodes, nps, pv, hashfull)
  3. Contempt — штраф за ничью в выигрышной позиции
  4. Repetition avoidance — избегание повторения ходов
  5. Ponder move — вывод ожидаемого ответа противника

Этап 7: Продвинутые алгоритмы

  1. Razoring — агрессивное отсечение на малых глубинах
  2. Reverse Futility Pruning — Static Null Move Pruning
  3. Late Move Pruning (LMP) — пропуск поздних тихих ходов
  4. Probcut — предварительное отсечение на больших глубинах
  5. Singular Extensions — продление для уникально хорошего хода
  6. Countermove Heuristic — запоминание лучших ответов на ходы

Производительность

Сравнение глубины 5 на стартовой позиции:

Конфигурация Узлы Время Ускорение
Все оптимизации OFF 15,352 6.23s 1.0x
Все оптимизации ON 4,751 2.15s 2.9x

Сокращение узлов: 69%

Требования

  • Python 3.8+
  • Без внешних зависимостей

Лицензия

MIT License