Erinn is a UCI chess engine written in Kotlin. It is built for version 21 of the JVM.
Search:
- Iterative deepening
- Principal variation search
- Aspiration windows
- Check extensions
- Late move reductions
- Null move pruning
- Futility pruning
- Reverse futility pruning
- Delta pruning in quiescence search
Move Generation/Ordering:
- Staged move generator
- Separate evasion move generator
- First move comes from PV table if available
- Second move comes from TT if available
- Captures ordered by static exchange evaluation for high depths, MVV-LVA for low depths
- Killer heuristic
- Remaining quiet moves ordered by relative history heuristic
NNUE Evaluation:
Positions are evaluated with NNUE. For Erinn the goal is to use a relatively small net for simplicity and due to the
limitations of vectorization in the JVM. The currently used model architecture is 49152*2 -> 64+8 -> 1.
A halfKA input feature set is used for the net to make the most out of the small hidden layer and minimal layer count.
- The Chess Programming Wiki
- This wonderful writeup about NNUE by the stockfish devs
- The Stockfish source code
- The chess programming videos by Sebastian Lague
- Various other sources like open source engines and talkchess/Computer Chess Club forum posts