Relatively strong UCI chess engine
CLI:
- Functional (but not complete) UCI implementation
- printstate: shows the state of the board.
- perftsuite : performs a suite of perft tests, currently only supports the suite ethereal.
- perft : performs a perft test from the current position and outputs the result.
- splitperft : performs a perft test from the current position and outputs the result seperated by which move is the first one done.
- getfen: outputs a string of Forsyth-Edwards Notation (FEN) that encodes the current position.
- incheck: outputs if the current position is in check or not.
- evaluate: outputs the evaluation of the current position.
- bench : performs the bench test, a fixed depth search on a series of 50 positions.
Board Representation:
- Copymake moves
- Board represented using 8 bitboards
- Pext bitboards, lookups, and setwise move generation
- Repetition detection
- Incremental Zobrist hashing
- Incremental PSQT updates
Search:
- PVS search
- Aspiration windows
- Transposition Table(TT) cutoffs
- Reverse Futility Pruning
- Null Move Pruning
- Late Move Reductions (log function, generated on startup)
- Fail-soft
Evaluation:
- Tuned PSQTs (soon to be NNUE)
Move ordering:
- TT best move
- MVV-LVA
- Killer Move Heuristic
- History Heuristic
Toanth: General help and explaining things I didn't understand before
Ciekce: Preventing the cardinal sins of C++ since day 1
RedBedHed: Lookup tables for move generation
JW: More random C++ things
A_randomnoob: Helping with a lot of random engine bits
zzzzz: Ideas, planning, and a lot that I probably forgot
Logo generated by AI