A chess engine in development. I'm learning Rust and engine dev as I go, so any feedback is appreciated.
The bot runs on Lichess.org!
(Currently running on a 2GHz Odroid N2+
)
Rating estimate of version 1.1.3
:
~2055
CCRL blitz (+95
against 1.0.0
)
~2069
Lichess (all time controls). Probably not representative outside of Lichess, since the bot plays on relatively weak hardware, potentially against cherry-picking bots, etc. etc.
SPRT results and ELO calculations can be found here.
- iterative deepening
- alpha-beta negamax
- extended null-move reductions
- transposition table
- current replacement scheme:
- previous PV always remains
- previous iteration gets replaced
- depth-preferred replacement
- current replacement scheme:
- move ordering:
- TT move
- MVV-LVA
- PeSTO eval
Since version 0.1.7
, the uci repository has been combined with this repository, so building from source should now be trivial:
In the root directory, run
cargo build --release
- default UCI commands (not 100% complete, but sufficient for compatibility with e.g. Cute Chess)
help
Show list of known commandsd
Print current boardeval
Static eval of positionrun
Run main function of the bot (multipurpose debug command, runs run_bot() located in lib.rs)make [move]
Make move (e.g.e2e4
)undo
Undo last move madeprobe
Probe current position in the transposition tablegen
Get the TT generation of the last searchhist
Print the history of stored keys for threefold detectionquit
Quit
Some Criterion benchmarks used for development can be run with
cargo bench --bench bench
One statistic which I'm proud of:
perft(6)
takes on average430 ms
, which is~276 MNPS!
(bulk counting, no hashing)(No-bulk:
2372 ms
,50 MNPS
)
Run a perft test suite with
cargo test --release -- --nocapture
This performs perft on 32 tricky positions and compares it with expected perft results.