Author:Dan Kelsey
v.4.1.0:
Calvin 4.1.0 brings major improvements to time management and move ordering, many minor enhancements to search, and a very embarrassing bugfix.
Results from self-play suggest a strength jump of around 110-140 elo and an estimated CCRL strength of at least 3100.
STC: Elo difference: 116.8 +/- 20.7
LTC: Elo difference: 140.9 +/- 28.2
🐛 Very embarrassing bugfix
On the one hand I am ashamed. On the other hand, this was the easiest free elo ever.
Stop searching first PV node with a null window (#69)
⏳ Time management
Implemented soft/hard time limits. The soft limit is checked at the start of each ID loop to determine whether a new iteration should be started. This saves a lot of unnecessary time from unfinished searches. The soft limit is also scaled using two heuristics: best move stability and eval stability.
Add soft/hard time limit (#54)
Add best move stability (#56)
Add eval stability (#59)
🔢 Move ordering
Added a history malus, meaning a penalty, for all quiets that did not fail high. And history bonuses are adjusted by a 'gravity' formula that scales up bonuses when the fail high was unexpected, and scales them down when it was expected.
Add history malus (#64)
Add history gravity (#65)
Add MovePicker.skipQuiets (#68)
🔍 Search
Just a bunch of random, tiny tweaks to search, resulting from trying stuff out and getting lucky.
Don't do IIR in check, and only when TT move is null (#49)
Move LMP before search extensions (#50)
Allow RFP at depth 5 (#51)
Don't expand aspiration window on the side that didn't fail (#52)
Futility prune before makeMove, allow FP for checks (#53)
Use best move from partial search (#55)
Don't TT cut in PV nodes (#57)
Increase NMP reduction (#63)
Allow full LMR reduction when in check (#67)
⚡ Minor optimisations
Fix TT mate scores and optimise TT (#62)
Optimise move sorting in MovePicker (#61)
⚙️ Refactoring / Quality of life
Significantly refactor and improve UCI code (#60)
Significantly refactor history/killer/move ordering code (#66)
Add bench (#60)
How to run
Please download one of the jar files from this release. There are two release jars: calvin-chess-engine and calvin-chess-engine-no-simd. The no-simd release is specifically for CCRL testers: since ChessGUI does not support passing Java opts to a jar file, the Vector API which Calvin uses for NNUE must be disabled.
For the standard calvin-chess-engine release, Calvin can be started by running the command:
java --add-modules jdk.incubator.vector -jar path/to/calvin-chess-engine-4.1.0.jar
For the CCRL calvin-chess-engine-no-simd release, the Java opt can be ommited:
java -jar path/to/calvin-chess-engine-no-simd-4.1.0.jar
Comments
Post a Comment