Шахматный движок на чистом Python с поддержкой протокола UCI.
- ✅ Все ходы фигур (пешка, конь, слон, ладья, ферзь, король)
- ✅ Рокировка (короткая O-O и длинная O-O-O)
- ✅ Взятие на проходе (en passant)
- ✅ Превращение пешки (в ферзя, ладью, слона, коня)
- ✅ Шах, мат, пат
- ✅ Правило 50 ходов
- ✅ Троекратное повторение позиции
- ✅ Недостаточность материала для мата
- ✅
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-хода)
Hash— размер транспозиционной таблицы (1-1024 MB, по умолчанию 64)Depth— глубина поиска по умолчанию (1-30, по умолчанию 6)Ponder— включить вывод ponder moveUseTranspositionTable— включить/выключить TTUseNullMove— включить/выключить Null Move PruningUseLMR— включить/выключить Late Move ReductionsUseIID— включить/выключить Internal Iterative DeepeningUseRazoring— включить/выключить RazoringUseReverseFutility— включить/выключить Reverse Futility PruningUseLMP— включить/выключить Late Move PruningUseProbcut— включить/выключить ProbcutUseSingularExtensions— включить/выключить Singular ExtensionsUseCountermove— включить/выключить Countermove HeuristicClear Hash— очистить транспозиционную таблицу
- ✅ Структура пешек (сдвоенные, изолированные, проходные, цепи)
- ✅ Безопасность короля (пешечный щит, открытые линии)
- ✅ Активность фигур (пара слонов, ладьи на открытых линиях, на 7-й горизонтали)
- ✅ Мобильность фигур (кони, слоны, ладьи, ферзь)
- ✅ Контроль центра
- ✅ KQ vs K — ферзь против короля (оттеснение к краю)
- ✅ KR vs K — ладья против короля (форсированный мат)
- ✅ KBN vs K — слон + конь против короля
- ✅ KP vs K — правило квадрата, ладейные пешки
- ✅ KR vs KP — ладья против пешки
python main.pyinfo 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.
- Откройте любую UCI-совместимую программу (Arena, CuteChess, и т.д.)
- Добавьте движок: укажите путь к
main.py - Начните играть!
> 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- бенчмарк производительности
Последовательность улучшений в хронологическом порядке:
- Представление доски (
board.py) — 64-элементный массив, FEN-парсинг, make/unmake move - Генератор ходов (
move_generator.py) — все легальные ходы FIDE - Базовая оценка (
evaluation.py) — материал + piece-square tables - Поиск (Minimax) (
search.py) — альфа-бета отсечение - UCI протокол (
uci.py) — полная поддержка UCI
- Транспозиционная таблица — Zobrist hashing, кэширование позиций
- Null Move Pruning — пропуск хода для отсечения
- Late Move Reductions (LMR) — сокращение глубины для поздних ходов
- Killer Move Heuristic — запоминание ходов с beta-отсечением
- History Heuristic — статистика успешных ходов
- Principal Variation Search (PVS) — оптимизация PV-узлов
- Aspiration Windows — сужение окна альфа-бета
- Static Exchange Evaluation (SEE) — быстрая оценка взятий
- Futility Pruning — отсечение бесперспективных тихих ходов
- Check Extensions — продление поиска при шахах
- Internal Iterative Deepening (IID) — поиск TT-хода
- Структура пешек — сдвоенные, изолированные, проходные, цепи
- Безопасность короля — пешечный щит, открытые линии
- Активность фигур — пара слонов, ладьи на 7-й, открытые линии
- Мобильность — подсчёт доступных полей для фигур
- Контроль центра — бонус за центральные пешки
- KQ vs K — ферзь против короля
- KR vs K — ладья против короля
- KBN vs K — слон + конь против короля
- KP vs K — правило квадрата, оппозиция
- KR vs KP — ладья против пешки
- UCI Options — настраиваемые параметры (Hash, Depth, флаги)
- Info callback — вывод статистики на каждой глубине (depth, nodes, nps, pv, hashfull)
- Contempt — штраф за ничью в выигрышной позиции
- Repetition avoidance — избегание повторения ходов
- Ponder move — вывод ожидаемого ответа противника
- Razoring — агрессивное отсечение на малых глубинах
- Reverse Futility Pruning — Static Null Move Pruning
- Late Move Pruning (LMP) — пропуск поздних тихих ходов
- Probcut — предварительное отсечение на больших глубинах
- Singular Extensions — продление для уникально хорошего хода
- Countermove Heuristic — запоминание лучших ответов на ходы
Сравнение глубины 5 на стартовой позиции:
| Конфигурация | Узлы | Время | Ускорение |
|---|---|---|---|
| Все оптимизации OFF | 15,352 | 6.23s | 1.0x |
| Все оптимизации ON | 4,751 | 2.15s | 2.9x |
Сокращение узлов: 69%
- Python 3.8+
- Без внешних зависимостей
MIT License