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 and SEE pruning in quiescence search
Move Generation/Ordering:
- Staged move generator
- Separate evasion move generator
- 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 history heuristic
NNUE Evaluation:
Positions are evaluated with NNUE. For Erinn the goal is to use a relatively short net for simplicity and due to the
limitations of vectorization in the JVM. The currently used model architecture is (24576 -> 64+8)x2 -> 1 with 8 output buckets.
A halfKA_hm 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 Engine Programming Discord
- The chess programming videos by Sebastian Lague
- Various other sources like open source engines and talkchess/Computer Chess Club forum posts