Mimir is a UCI compatible chess engine built from scratch.
- Bitboard move generation (legal & pseudo-legal) verified with perft tests.
- Full compliance of drawing rules: Insufficient material, three-fold-repetition, and 50 move rule.
- Negamax alpha-beta pruning with iterative deepening depth first search and quiescence search to counter horizon effects.
- Transposition tables with zobrist hashing.
- A classical PST tapered evaluation function optimized by Texel's tuning.
- Modern NNUE based evaluation based on 768 perspective architechture with incremental updates.
- Move ordering via hash moves from transposition tables, Most Valuable Victim - Least Valuable Aggressor (MVV-LVA) for captures.
- Killer moves and history heuristics for quiet moves.
- Principal variation search (PVS) with aspiration windows.
- Null move pruning (NMP) and Late move reductions (LMR)
- Reverse Futility Pruning (RFP)
- Delta pruning and Static Exchange Evaluation (SEE).
- A UCI compatible interface with a soft-hard limit time scheduler.
- Playable on lichess @playmimir. Uses the lichess bot API.
- Rust 1.70+ (for
#![feature(variant_count)]) - Standard build tools (cargo)
cargo build --release
# Run all tests
cargo test --release- Chess Programming Wiki – comprehensive reference for most techniques outlined above
- lichess-bot - A bridge between lichess and bots.
- beans.bin - Credits to @ciekce [Stormphrax] from discord for training the network