4.1.0
Calvin 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.
π’ 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.
π 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
βοΈ 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