Skip to content

4.1.0

Compare
Choose a tag to compare
@kelseyde kelseyde released this 04 Sep 18:40
· 314 commits to main since this release

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.

  • 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