-
released this
2025-09-25 18:11:43 +02:00 | 60 commits to master since this releaseNothing to see here, move along
Greetings! This release exists mostly to address a nasty bug caused by incorrect score clamping that would make heimdall find non-existent M127 lines in positions with a very high evaluation
What changed
- The aforementioned bug has been fixed
- All of heimdall's parameters were tuned to account for the addition of correction history
- The TT score is used in place of the static eval in RFP when possible
Strength
Nothing particularly interesting here, I'm just adding this section for completeness
UHO_Lichess_4852_v1.epd
STC:
Elo | 4.34 +- 7.76 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2002 W: 453 L: 428 D: 1121 Penta | [4, 229, 512, 250, 6]https://kelseyde.pythonanywhere.com/test/1688/
LTC:
Elo | 1.56 +- 5.48 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2002 W: 160 L: 151 D: 1691 Penta | [0, 123, 748, 128, 2]https://kelseyde.pythonanywhere.com/test/1693/
No 8moves_v3 testing this release: the gains are already insignificant enough with an UHO book so I'm not going to waste additional compute on balanced book testing for it to tell me the elo change is near-zero.
Also, we purple now boy! As of version 1.4.1, Heimdall has officially broken the 3600 Elo barrier in the CCRL Blitz list. Exciting!
See you for 1.5!
Downloads
-
released this
2025-09-03 19:25:32 +02:00 | 84 commits to master since this releaseCorrhistdall is here. Please do not panic.
Hewwo, not much has changed since the last release... except for the fact I finally managed to get correction history to work! Turns out when your A/B isn't broken, stuff gains. Go figure
What changed
- Added the following correction histories:
- Pawn
- Non-pawn
- Minor piece
- Major Piece
- Multi-cut pruning is now implemented
- Heimdall will now be more pedantic when it comes to pondering: a
go pondercommand sent without checking thePonderoption will cause the engine to complain on screen and resign - Added a few options to generate training data via UCI (check the commits for more info)
Strength
Not groundbreaking, but corrhist and multicut were a decent chunk of Elo nonetheless
UHO_Lichess_4852_v1.epd
STC:
Elo | 19.46 +- 8.28 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2002 W: 532 L: 420 D: 1050 Penta | [7, 200, 490, 282, 22]https://kelseyde.pythonanywhere.com/test/1374/
LTC:
Elo | 33.11 +- 7.72 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 567 L: 377 D: 1056 Penta | [7, 146, 504, 336, 7]https://kelseyde.pythonanywhere.com/test/1376/
8moves_v3.epd
STC:
Elo | 16.92 +- 7.03 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2014 W: 290 L: 192 D: 1532 Penta | [12, 121, 644, 217, 13]https://kelseyde.pythonanywhere.com/test/1375/
LTC:
Elo | 14.43 +- 5.62 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 200 L: 117 D: 1683 Penta | [0, 88, 750, 153, 9]https://kelseyde.pythonanywhere.com/test/1385/
Given that Heimdall 1.4 hasn't yet been tested on the CCRL Blitz list, its estimated rating is likely going to be wrong, but still: this should put Heimdall at around ~3659 (UHO) and ~3616 (balanced) Elo, hopefully finally breaking through the 3600 Elo mark (outside of error bars, of course)
See ya for Heimdall 1.5!
Downloads
- Added the following correction histories:
-
released this
2025-07-28 09:43:15 +02:00 | 99 commits to master since this releaseOr did I?
Well, actually it was @__arandomnoob. After a LONG time, I'm finally releasing a new version of Heimdall
What better way to start the release notes than showing off this BEAUTIFUL bugfix test?
Elo | 89.69 +- 12.09 (95%) SPRT | 8.0+0.08s Threads=1 Hash=16MB LLR | 2.92 (-2.25, 2.89) [0.00, 3.00] Games | N: 978 W: 363 L: 116 D: 499 Penta | [2, 37, 187, 238, 25]https://chess.n9x.co/test/3266/
What changed
- Fixed a critical bug in the alpha-beta implementation of both PVS and Quiescence where a beta cutoff would not be considered an alpha raise, causing the best move not to be stored (see test above)
- Merged a slightly improved neural network trained on the new data from mistilteinn-v2 using a training schedule cooked up by @ciekce, thanks!
- Implemented ttpv tracking: nodes that were previously part of a principal variation are now reduced less aggresively
- Some fixes to time management which should hopefully address the time loss issues in high concurrency environments at fast time controls (bullet) like at CCC (Thanks Andrew for the precious debugging help and time on the chesscom machines!)
- Both RFP and NMP are now avoided in nodes that were previously in the principal variation
- History depth is now increased if bestScore beats beta by some threshold
- Added threat indexing to capture history
- Added support for static contempt with the
ContemptUCI option - TT scores are now used in qsearch standpat cutoffs when possible
- The
ShowWDLoption was renamed toUCI_ShowWDLto comply with the UCI specification - Tweaked the initial size of the aspiration window
- Improving is no longer
trueif we were in check 2 plies ago - The evaluation is now immediately cached to the TT if we didn't get a hit in the current node
- Separated the weights used for material scaling from the ones used for SEE and made both sets tunable
- Parameterized RFP to allow tuning the improving margin separately
- Implemented mate distance pruning
- Search is reduced less when improving is
true - Futility pruning is now more aggressive
- Fixed an overflow bug when handling mated TT scores
- Fixed some rare PV reporting bugs and optimize clearing the triangular table
- The position's static evaluation is now returned instead of 0 when hitting the ply limit
- When SIMD is available (in the avx2 and avx512 targets), it's used to speed up refreshes and finny table updates
- SEE is not re-run for known good/bad moves in qsearch
- All captures are now ordered by their MVV score, not just losing ones
- Killer and counter moves are reduced less aggressively
- Captures are reduced far less aggressively (reduction is halved)
- A bunch of internal code changes. Refactoring, cleanup, etc.
- The neural network is now embedded in the engine in a way that avoids weight duplication even across multiple, independent processes
- A healthy dose of SPSA tuning
So, yeah, a lot of stuff. Although now that Heimdall's search is no longer broken, I expect many things to gain. Correction history in Heimdall 1.5? Who knows. Time will tell...
Strength
This is the first triple digit improvement after a long Elo drought. Exciting!
UHO_Lichess_4852_v1.epd
STC:
Elo | 99.70 +- 8.95 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2012 W: 807 L: 245 D: 960 Penta | [5, 73, 363, 485, 80]https://chess.n9x.co/test/3538/
LTC:
Elo | 117.55 +- 8.24 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 841 L: 189 D: 970 Penta | [0, 48, 320, 564, 68]https://chess.n9x.co/test/3544/
8moves_v3.epd
STC:
Elo | 88.92 +- 8.62 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2000 W: 621 L: 120 D: 1259 Penta | [3, 60, 453, 401, 83]https://chess.n9x.co/test/3539/
LTC:
Elo | 93.57 +- 7.40 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 569 L: 43 D: 1388 Penta | [0, 22, 485, 438, 55]https://chess.n9x.co/test/3545/
Extrapolating from the CCRL Blitz rating of Heimdall 1.3.0 (3509) and using the LTC result for consistency, this puts Heimdall's estimated Elo at ~3626 (UHO) and 3602 (balanced), respectively. As always, expect big rating swings for the first few days/weeks post-release, as it takes a while for ratings to stabilize on most continually updated lists. I also expect compression to start hitting Heimdall MUCH harder on CCRL (especially 40/15, but Blitz is also very compressed around the 3600 Elo mark). Oh, by the way, for those interested I have become a CCRL tester and started a DFRC rating list using a book of unbalanced openings. Come check it out! Thanks a lot to Bastii and Graham Banks for the support :)
P.S.: The next major Heimdall release, 1.5, will feature a multi-layer network. Such tech, much SIMD, very OwO.
See you all very soon. Can't stop me now :3
P.P.S.: The release binaries now contain the version number for Heimdall, since some
catspeople complained about that :)P.P.P.S.: The AVX512 binary for windows is coming soon!
Downloads
-
released this
2025-04-01 14:08:18 +02:00 | 221 commits to master since this releaseHappy April Fools!
This release is not a joke though! I have noticed some issues in the new SMP system relating to the way state is (not) reset after
ucinewgame, leading to all sorts of weird behavior and incorrect node/nps reporting. This release addresses thatPSA: The executables have been temporarily removed due to a minor issue with startup time when using many threads. The issue has been fixed and the release binaries will be available shortly
PSA 2: The issue has been fixed and the new executables are now available. To make sure you have the correct version, please download them again
What changed
Even less stuff compared to the release of 1.3.1, actually:
- Quiescence search now skips pruning for recapturing moves
- Implemented a new idea by @cj regarding LMR in previous plies
- lmrDepth is now used in PVS SEE pruning
- Quiet moves are now reduced more in LMR
- Fix bookkeeping of reduction offsets in the search stack (bugfix for child node LMR extensions)
- If SE search fails high, reductions are also applied at expected cut nodes
- The thread pool now gets properly reset (but not restarted!) upon receiving
ucinewgame
Strength
As for the previous bugfix release, I do not expect Heimdall's balanced opening rating to have changed much, so I'll be providing UHO results only. These tests have been ran against version 1.3 as that is the one I have the best outside strength references for
STC:
Elo | 17.72 +- 8.41 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2002 W: 505 L: 403 D: 1094 Penta | [14, 194, 490, 282, 21]https://chess.n9x.co/test/1206/
LTC (I accidentally ran an SPRT instead of a fixed game test :P):
Elo | 22.28 +- 8.37 (95%) SPRT | 8.0+0.08s Threads=1 Hash=16MB LLR | 2.01 (-2.25, 2.89) [0.00, 3.00] Games | N: 2186 W: 609 L: 469 D: 1108 Penta | [14, 222, 498, 328, 31] https://chess.n9x.co/test/1207/Here follows the latest 2v1 scaling test to ensure the new thread pool fix is working as intended: from +68 to +80!
Elo | 80.17 +- 11.41 (95%) SPRT | 8.0+0.08s Threads=2 Hash=32MB LLR | 2.91 (-2.25, 2.89) [0.00, 3.00] Games | N: 1032 W: 360 L: 126 D: 546 Penta | [2, 38, 224, 228, 24]https://chess.n9x.co/test/1202/
Scaling test after fixing the startup slowdowns:
Elo | 78.60 +- 11.69 (95%) SPRT | 8.0+0.08s Threads=2 Hash=32MB LLR | 2.89 (-2.25, 2.89) [0.00, 3.00] Games | N: 1016 W: 343 L: 117 D: 556 Penta | [0, 49, 207, 229, 23]https://chess.n9x.co/test/1213/
P.S.: Windows executables coming soon!
Downloads
-
released this
2025-03-19 18:40:43 +01:00 | 238 commits to master since this releaseBugs, bugs everywhere...
Greetings! Today I'm releasing a bugfix version of Heimdall that fixes the pondering issues introduced in the previous release. Thanks to RBB (Discord) and @FischerRandomChess in the TCEC twitch chat for reporting the issue to me! :)
⚠️ Multithreading has some issues in this version. Please wait for the next release to run any SMP testing!
What changed
Honestly, not a lot strenght-wise, but still:
- UCI option names and values are now case insensitive in accordance with the spec
- Pondering is now fixed and behaves as expected
- "Fail mid" is now implemented in reverse futility pruning
- 4-ply continuation history
- A slightly improved neural network
- A completely new SMP system that uses a custom thread pool and no longer wastes time spawning threads at each
gocommand - The UCI command loop now also uses a persistent worker thread instead of creating one each time
- Triple extensions (after singular search result)
- Child node LMR extensions
- TT initialization is now multithreaded: Heimdall will use as many workers as configured by
Threads - TT prefetching in quiescence search
- Support for the mimalloc allocator has been dropped
- Use "fail-medium" in stand-pat cutoffs in quiescence search
- Improvements and fixes to repetition detection
- Many small fixes (OOB errors, safety, etc.)
- Refactored many helpers to be branchless
- Fix bugs related to
EnableWeirdTCs - Fix a bug that caused crashes when parsing FENs without full-move numbers
- PV nodes are reduced if the TT probe result suggests a cutoff
- Development/beta builds will now feature the commit hash in the version string even on Windows
Strength
This release isn't that much stronger than the previous one (it is a bugfix, after all), but there have been some gainers still. I won't be publishing numbers with balanced books, as this kind of testing already takes a lot of time and I only want to bother with it for strength-significant releases, so these tests were run with the usual UHO_Lichess_4852_v1.epd book:
STC:
Elo | 15.76 +- 8.81 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2008 W: 537 L: 446 D: 1025 Penta | [20, 207, 465, 286, 26]https://chess.n9x.co/test/1130/
LTC:
Elo | 6.25 +- 7.76 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 447 L: 411 D: 1142 Penta | [4, 218, 527, 240, 11]https://chess.n9x.co/test/1131/
Here also follows a test showing the scaling for the new SMP system (2v1 went from +55 to +68!):
Elo | 68.32 +- 11.03 (95%) SPRT | 8.0+0.08s Threads=2 Hash=16MB LLR | 2.92 (-2.25, 2.89) [0.00, 3.00] Games | N: 1128 W: 363 L: 144 D: 621 Penta | [2, 54, 256, 227, 25]https://chess.n9x.co/test/794/
See you at the next release!
P.S.: Windows releases coming soon™️ as always
Downloads
-
Heimdall 1.3 - Ahoy! Stable
released this
2025-02-01 16:52:47 +01:00 | 301 commits to master since this releaseLong time no see
Hello there! Today I'm releasing a new version of Heimdall with lots of exciting new changes
⚠️ Pondering is bugged in this version! Please don't use it. I'll fix it ASAP
What changed
- SEE has been completely
stolen from Stormphraxahem, I mean rewritten, to use a faster, more efficient iterative algorithm - Heimdall now caches accumulator refreshes (aka "finny tables")
- A healthy dose of LTC SPSA tuning
- LMR is increased if the current move is quiet while the hash move is a capture
- The network architecture has changed: the L1 is now 1536 neurons long instead of 1280
- Heimdall's networks now use merged king planes, allowing for a nice 8% FT size reduction at no cost
- Futility pruning now uses base LMR depth for its limit condition
- History LMR divisors have been separated (and tuned) for noisy vs quiet moves
- A lot of cleanup in subcommand parsing/handling
- Various cosmetic fixes and addition to the pretty logs
- Heimdall can now generate standard chess data (the new network was trained with a mix of standard and dfrc data)
- Added a new, experimental data filtering tool
- Node TM was actually fixed this time (for realsies tho)
- The TT now only stores partial zobrist keys
- NMP now features verification search
- MAX_DEPTH is now respected exactly in search (it was off by one)
- Quiescence search now stores a lower bound score to the TT before stand-pat cutoffs
- NMP now uses TT information in its condition
- Various minor fixes to many parts of the codebase
- Improving is now used in RFP
- NMP reduction is now increased based on static eval and beta
Also many many thanks to @Ciekce for adding AVX512 support!
Strength
Wow, that was a lot huh? Elo is getting harder and harder to get, but we still have some nice gains here.
Since it was requested to me by the author of the ipmanchess list, I will now be providing both STC and LTC progtests played with a balanced book (8moves_v3.epd) alongside the usual ones with the UHO_Lichess one. The estimated Elo will still always be
based on the UHO results, as I feel those are more representative of engine strength (you are free to disagree :))UHO_Lichess_4852_v1.epd
STC:
Elo | 86.08 +- 9.36 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2014 W: 774 L: 285 D: 955 Penta | [3, 114, 366, 439, 85]https://chess.n9x.co/test/699/
LTC:
Elo | 72.61 +- 8.36 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 704 L: 292 D: 1004 Penta | [2, 105, 413, 439, 41]https://chess.n9x.co/test/701/
8moves_v3.epd
STC:
Elo | 68.67 +- 8.49 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 2004 W: 547 L: 156 D: 1301 Penta | [4, 91, 480, 364, 63]https://chess.n9x.co/test/709/
LTC:
Elo | 57.14 +- 7.39 (95%) Conf | 40.0+0.40s Threads=1 Hash=64MB Games | N: 2000 W: 431 L: 105 D: 1464 Penta | [1, 70, 569, 322, 38]https://chess.n9x.co/test/710/
Using the CCRL Blitz rating of Heimdall 1.2.2 (3476) and using the LTC result for consistency, this puts Heimdall's estimated Elo at ~3548!
Notes
In the interest of delivering the best performance to as many machines as possible and increasing transparency, the way binaries are named has changed. The
-core2builds are now the lowest common denominator, with-haswell(previously-modern) being a more modern alternative (only works on supported CPUs, just try it) and-zen2being the most performant option that is still somewhat generic. There's also-avx512binaries that should work on recent CPUs (AMD Zen 4/Intel Kaby Lake or later) and can net a substantial speedup depending on the underlying hardware implementation. To get the best possible performing binary, please build it on your machine with themake nativecommandDownloads
- SEE has been completely
-
Heimdall 1.2.2 - SMP Fixes Stable
released this
2024-12-13 11:01:50 +01:00 | 369 commits to master since this releaseUpsie
This release addresses a bug that I had inadvertently introduced while refactoring Heimdall's SMP functionality. For simplicity (and my own sanity), I have reverted the change and switched back to the old way of spawning threads, which means they are re-created at every
gocommand (inefficient, but at least it works!)Please refer to 1.2's release notes for an accurate changelog and strength improvements
SMP Scaling
Here follows the results of a 2v1 threads test I ran to verify that I had indeed fixed my multithreading support:
Elo | 55.14 +- 10.85 (95%) SPRT | 8.0+0.08s Threads=2 Hash=16MB LLR | 2.89 (-2.25, 2.89) [0.00, 3.00] Games | N: 1328 W: 419 L: 210 D: 699 Penta | [4, 94, 288, 245, 33] https://chess.n9x.co/test/475/I would've ran a 4v2 test as well, but my workers choke with that many threads so no dice :(
P.S.: Windows binaries coming soon™️
Downloads
-
released this
2024-12-12 21:56:41 +01:00 | 373 commits to master since this releaseI bring thee great news
⚠️ ⚠️ Notes for testers ⚠️ ⚠️
SMP is currently broken in this version, so please don't test it with anything other than
Threads=1! I will fix this ASAP and release version 1.2.2 soon!Hello again! A few things have changed since the release of Heimdall 1.2
What changed
- The crashing issues have been resolved. Many thanks to all the folks who helped in the Nim discord server, but especially @tsoj for finding the actual bug!
- Heimdall now implements eval normalization (displayed scores are now anchored such that +1 means a 50% win probability, similarly to Stockfish) as well as WDL estimation (with the
ShowWDLoption). Many thanks to the developers who created the WDL model! - Negative extensions are now more aggressive
- The second killer move has been simplified out
- The Makefile can now be used to build release-ready binaries on all supported platforms (Windows, Linux)
- The search has been refactored to be faster and nicer to develop for in general (+15 STC Elo!)
P.S.: Heimdall's search rewrite is now officially on hold (since the original goal was to address some pain points in the search, which I have done with the refactor, and fix the crashing which is no longer a problem)
P.P.S.: Eval normalization can be turned on or off with the
NormalizeScoreoption, which istrueby default (if you care about raw engine unit values, for some reason, the option is there. Weirdo.)Progtest
Here follow the STC progtest against the previous version using the UHO_Lichess_4852_v1 book:
Elo | 9.36 +- 12.33 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 1002 W: 249 L: 222 D: 531 Penta | [11, 105, 244, 128, 13] https://chess.n9x.co/test/472/This places this version's estimated Elo at around 3500!
Downloads
-
released this
2024-12-06 16:36:41 +01:00 | 390 commits to master since this releaseWell well well
Hiya! After much work, here comes a brand spanking new version of Heimdall.
What Changed
go matenow works as intended- The clock is now started as soon as the
gocommand is parsed, so Heimdall should hopefully behave correctly at tournaments like CCC - The neural network now has 4 times more buckets than before (from 4 to 16) and the hidden layer is now 1280 neurons instead of 1024. That comes out to roughly 6 times more weights than the previous version!
- Implemented negative and double extensions
- Fix marlinformat serialization reporting the wrong score (turns out it's supposed to be white-relative!)
- Twofold repetition is now used whenever possible, speeding things up significantly in drawn positions
- Minor tweaks and fixes
Progtests
As usual, here follow the STC and LTC progtests against the previous version using the UHO_Lichess_4852_v1 book:
STC:
Elo | 99.89 +- 14.64 (95%) Conf | 8.0+0.08s Threads=1 Hash=16MB Games | N: 1022 W: 453 L: 167 D: 402 Penta | [6, 53, 167, 219, 66] https://chess.n9x.co/test/433/LTC:
Elo | 87.26 +- 12.69 (95%) Conf | 40.0+0.40s Threads=1 Hash=16MB Games | N: 1000 W: 408 L: 162 D: 430 Penta | [7, 41, 177, 249, 26] https://chess.n9x.co/test/435/This puts 1.2's estimated Elo at around 3490! (top 50 maybe? who knows!)
Notes
In recent testing I've noticed some rare crashes that I have been unable to reproduce. If you do encounter a crash, please report it to me with the PGN of the offending game so I can track the issue down! Hopefully this issue will just disappear with version 1.3, which I plan to be a complete search rewrite
Downloads
-
Heimdall 1.1.1 - Oopsie! Stable
released this
2024-10-20 22:24:24 +02:00 | 427 commits to master since this releaseWell, that's embarassing
What changed
This is a hotfix for Heimdall 1.1 that addresses a bug in the implementation of node time management worth about 53 SPRT Elo at LTC (40+0.4). For more info see https://chess.n9x.co/test/359/
The same rules for picking a binary apply as for Heimdall 1.1, please refer to that release for a more complete changelog and other info
Downloads