Alpha-beta pruning chess engine, using bitboards + hyperbola quintessence. Currently ~1500 ELO (relative to CCRL 40/15).
Perft: measures move generation + move make/unmake (cargo bench -p engine -- perft)
- Non-bulk, single-threaded: 55.6M positions/second (M4 Pro)
- Minimax
- Alpha-beta pruning
- Iterative deepening
- Quiescence search
- Transposition table
- Basic move ordering: transposition table move and MVV-LVA
- Principal variation search
- Null move pruning
- Pieces value
- Piece square table
- Tapered eval
To build the UCI binary:
cargo build -p cli --release
then start by running the binary with no arguments.
Tricky move generation bugs I encountered found:
- En passant pinning
- A pawn that can be en passant'd is checking the king
- A piece that is pinned can move to block/capture a checker