Andrew's Rust Chess Engine
This project is mostly indented for self-edification. The engine is not intended to be particularly novel or powerful.
The board is currently represented using only bitboards (with magic bitboards for move generation of sliding pieces).
The engine does not ship with any GUI. It currently implements a subset of the UCI protocol, you can use it with an open source GUI such as Arena.
The program does not accept posix style arguments it will immediately start in UCI mode.
[x] transposition table
- null move pruning
- killer moves
- known issues
- fail low (alpha) nodes are never stored in the transposition table, only exact and beta nodes
- transposition table scores don't account for repetition or fifty move history, make_move_str clears the key for played moves as a workaround
- hash table size is only configurable from code, there is no UCI Hash option, so every engine allocates the 500MB default
- history array is fixed at 375 plies and ply is initialised to twice the full move number, so very long games can overflow it
- en passant is hashed for every double pawn push, even when no capture is possible, which slightly reduces transposition hits
- perft command from uci
- fix magics to load on engine start
- better evaluation
- mobility in evaluation
- evaluate drawn positions
- special cases (bishop pair, open files etc)
- winboard
- Implement the rest of the UCI protocol
- opening books