A UCI chess-engine built in C++.
- Universal Chess Interface (UCI) compatible.
- Hybrid board representation
- Iterative deepening Negamax framework
- Alpha-Beta pruning
- Principal variation search
- Aspiration windows with PVS
- Quiescence search
- Most Valuable Victim Least Valuable Attacker (MVV-LVA) heuristic
- Killer move heuristic
- History heuristic
- Null-move pruning
- Transposition tables to store results of previously performed searches (based on Zobrist hashes)
- Late move reduction
- Futility pruning
- Razoring
- Basic king safety (king danger zone, pawn shield, pawn storm)
- Check extension
- Tapered PeSTO's Piece-square tables for static position evaluation interpolated between different game stages
- Static Exchange Evaluation (SEE) to detect losing captures
- Mobility scores
- Parameter fine-tuning (based on Texel's tuning method) - stochastically optimized with a basic implementation of Adam (in mini-batch mode)
Lishex does not come with its own grapical user interface (GUI). Instead, it implements the UCI protocol making it compatible with most popular chess GUIs such as:
- Arena Chess GUI (free)
- Chessbase (paid)
- Cutechess (free)
- BanksiaGUI (free)
- Nibbler (free).
To compile the engine to an x86_64 Linux binary, simply run
make
Then, to run the engine on the command-line run
make run
or
./lishex
To compile in debug mode
make debug=yes
To generate project documentation with doxygen run
doxygen
in the project root.
- More search extensions: extending search depth in specific subtrees to combat the horizon effect
- LazySMP for parallel searching on multiple threads
- More sophisticated king safety (including queen distance, tropism)
- Endgame tablebase probing
- Extension limiting
- Smarter time control logic, estimated time to finish search
- Chess960 (Fisher Random Chess) support
- NNUE
I'd like to thank BlueFeverSoft (Vice), Tom Kerrigan (TCSP), Sebastian Lague, PGG106 (Alexandria), Richard Delorme (Dumb engine), Bruce Moreland, Code Monkey King (Bitboard Chess Engine), Peter Österlund (Texel), kz04px (4ku), Jay Honnold (Berserk), the Stockfish and GNU Chess developers, as well as the entire Chess Programming community for help and inspiration. I have made every effort to include proper links to articles & other sources of inspiration in the source code. However, if by any chance I have unintentionally omitted acknowledging someone's work or utilized code without due credit, I sincerely apologize. Please do not hesitate to contact me with any concerns, suggestions, or ideas, and I will gladly address them promptly.