NNUE chess engine written in Rust. Play against it on lichess.org
The current minimum supported Rust version for the UCI binary is 1.57.0.
- Frozenight 4.0: 2957
- Frozenight 3.0: 2842
- Frozenight 2.1: 2683
- Frozenight 2.0: 2606
- Frozenight 4.0: 3004
- Frozenight 3.0: 2893
- Frozenight 2.1: 2677
- Frozenight 1.0: 2448
- Frozenight 4.0: 2998
- Frozenight 3.0: 2761
cozy-chess
for move generation- Principal Variation Search
- Aspiration windows
- ABDADA-based multithreading strategy
- NNUE evaluation
- 768 -> 32x2 (-> 1)x16
- Network bucketing based on modified piece material values (Queen = 8)
- This is based on game phase tuning in Koivisto done by Luecx
- Training data generated through self-play, originally starting with a random network
- Trained using (a modified version of) Pali's
marlinflow
- Quiescense search
- SEE ordering & pruning with MVV-LVA for ties
- Check Evasions
- Check Extensions
- Late move reductions
- Late move pruning
- Null move pruning
- Reverse futility pruning, except using qsearch instead of static eval
- Transposition Table
- Depth-preferred with aging
- Move ordering
- Hash move
- SEE captures, losing captures last, with MVV-LVA for ties
- Killer heuristic (ordered near pawn captures pawn)
- Relative history heuristic (side-by-side piece-tosq and fromsq-tosq tables)
- Underpromotions last
- Time management
- Uses at least 2% remaining + increment/2
- Avoids stopping in the middle of an iteration
Frozenight is dual-licensed under the MIT License and Apache License (Version 2.0) licesnses.
- Analog (Tantabus), for
cozy-chess
and helping me understand search techniques - Pali (Black Marlin), for
marlinflow
and helping me understand NN training and search techniques - Authors of the chess programming wiki, for its wealth of knowledge