Ember — это UCI-совместимый шахматный движок на Rust, который я пишу для изучения и экспериментов. Проект в активной разработке, регулярно допиливается и улучшается.
⚠️ Пре-релиз: движок пока не супер-сильный, в нём есть баги и недочёты. PR и идеи приветствуются!
- Negamax с альфа-бета отсечением
- PVS (Principal Variation Search)
- LMR (Late Move Reductions) — редукция поздних ходов
- Null Move Pruning с адаптивной редукцией
- Итеративное углубление с аспирационными окнами
- Тихий поиск (Quiescence Search) с SEE-фильтрацией
- Транспозиционная таблица со стратегией always-replace
- IID (Internal Iterative Deepening)
- Reverse Futility Pruning — отсечение по статической оценке
- Сортировка ходов: TT-ход, взятия (MVV-LVA), killer-ходы, counter-ходы, история
- Продление на шах
- Дельта-отсечение в тихом поиске
- SEE-отсечение (Static Exchange Evaluation)
- Таблицы PST (Piece Square Tables) для миттельшпиля и эндшпиля
- Оценка мобильности для коней, слонов, ладей, ферзей
- Пешечная структура: сдвоенные, изолированные и проходные пешки
- Безопасность короля: обнаружение атак и пешечное укрытие
- Бонус за пару слонов
- Ладьи на открытых линиях
- Определение фазы игры (плавная оценка)
- Корректирующая история (Correction History)
- Zobrist-хеширование позиций
- Обнаружение троекратного повторения
- Взятие на проходе и рокировка
- SEE (Static Exchange Evaluation)
- Протокол UCI (совместимость с Arena, Cute Chess и др.)
- Тюнинг оценочной функции (настройка весов)
- Поддержка нескольких потоков (Lazy SMP)
- Улучшенное управление временем
- Syzygy tablebases
- Pondering (думание на чужом времени)
- Rust 1.70 или новее
- UCI-совместимая оболочка (например, Arena, Cute Chess, Lichess)
- Скачайте последний релиз
- Откройте вашу UCI-совместимую шахматную программу
- Добавьте движок: укажите путь к скачанному бинарнику
- Начинайте игру!
# Интерактивный режим
cargo run --release
# Или передача UCI-команд
echo -e "uci\nisready\nquit" | cargo run --release| Опция | Тип | По умолч. | Диапазон | Описание |
|---|---|---|---|---|
Hash |
spin | 128 | 1–4096 | Размер TT в мегабайтах |
Threads |
spin | 1 | 1 | Количество потоков (только 1) |
Изменение параметров движка через UCI-команду setoption:
setoption name Hash value 256
├── src/
│ ├── main.rs # Обработчик протокола UCI
│ └── lib.rs # Ядро движка: поиск, оценка, генерация ходов
├── Cargo.toml
└── Cargo.lock
# Запуск тестов
cargo test
# Проверка ошибок
cargo check
# Запуск с оптимизациями
cargo run --releaseНашёлся баг? Есть идея? Открывайте issue или PR — буду рад помощи и обратной связи!
Этот проект распространяется под лицензией MIT.