Heimdall - UCI chess engine written in Nim.
Author: Mattia Giambirtone
More info
Heimdall is available on Lichess under its old name (Nimfish), feel free to challenge it! I try to keep the engine running on there always up to date with the changes on the master branch
More info
Heimdall is available on Lichess under its old name (Nimfish), feel free to challenge it! I try to keep the engine running on there always up to date with the changes on the master branch
Heimdall 1.4.3 what's new?
Greetings! After much silence, here comes a new version of the 'dall; 1.4.3 is a larger release than the version number suggests. The engine has picked up a redesigned terminal UI, replay tooling, several search and evaluation changes, a newer network, and a good pile of correctness and build fixes since 1.4.2. I'm not calling this 1.5 because I said 1.5 would be using a multilayer network and I'm procrastinating that HARD (oops)
What changed
- Added a (shamelessly vibecoded) terminal UI with analysis, play/setup/replay flows, board rendering, eval/move arrows, user arrows, mate finding, annotations, PGN importing/exporting, and more; see here for details
- Made UCI move parsing reject illegal moves more reliably
- Improved command parsing so valid
positionandgocommands embedded in otherwise malformed input can still be handled per the UCI spec - Switched to
laevateinn-v2-verbatimnetwork - Added Transparent Huge Pages support for aligned memory where available (detected at build time, not runtime)
- Implemented a simplified ProbCut
- Implemented fractional LMR and made the LMR base table tunable
- Added continuation correction history and 2-ply continuation correction history
- Tuned all search parameters
- Fixed evaluation clamping and mate-score handling issues
- Fixed the long-standing incorrect definition of
improving - Tightened singular-extension and futility-pruning margins
- Ensured NMP does not return false mates
- Reduced false sharing and contention by changing how search parameters and worker state are copied/aligned
- Used relaxed ordering for atomic operations where appropriate
- Moved more objects to managed references and aligned more search-manager fields
- Compressed moves into 16 bits
Strength
Pretty chunky gains across the board, honestly was not expecting them to be this high nor this consistent across opening books and time controls. A welcome surprise for sure!
UHO_Lichess_4852_v1.epd
STC:
Elo | 92.04 +- 12.86 (95%)
Conf | 8.0+0.08s Threads=1 Hash=16MB
Games | N: 1012 W: 408 L: 146 D: 458
Penta | [0, 43, 207, 207, 49]LTC:
Elo | 83.57 +- 11.72 (95%)
Conf | 40.0+0.40s Threads=1 Hash=64MB
Games | N: 1000 W: 386 L: 150 D: 464
Penta | [0, 41, 208, 225, 26]
8moves_v3.epd
STC:
Elo | 77.59 +- 12.28 (95%)
Conf | 8.0+0.08s Threads=1 Hash=16MB
Games | N: 1006 W: 290 L: 69 D: 647
Penta | [4, 36, 234, 193, 36]
LTC:
Elo | 54.89 +- 9.67 (95%)
Conf | 40.0+0.40s Threads=1 Hash=64MB
Games | N: 1002 W: 192 L: 35 D: 775
Penta | [1, 24, 307, 155, 14]Heimdall 1.3.0 vs other engines:
| Horsie 1.0.6 JA | 1.5/12 | -9 | 12 Games |
| Viridithas 16.0.0 | 1/8 | -6 | 8 Games |
| Sting Black Hole 9 | 6/6 | +6 | 6 Games |
| Deep HIARCS 15.4u | 4/6 | +2 | 6 Games |
| Ethereal 14.25 | 2/6 | -2 | 6 Games |
| Chess-System-Tal-2 | 2/6 | -2 | 6 Games |
| Caissa 1.21 | 2/6 | -2 | 6 Games |
| Alexandria 7.0.14 JA | 2/6 | -2 | 6 Games |
| Revenge 4.0 | 2/6 | -2 | 6 Games |
| Motor 0.8.0 JA | 2/6 | -2 | 6 Games |
| Lizard 11.2.0 | 1.5/6 | -3 | 6 Games |
| PlentyChess 4.0.1 | 1.5/6 | -3 | 6 Games |
| Clover 8.1 JA | 1.5/6 | -3 | 6 Games |
| HypnoS ++ 1.01 | 1.5/6 | -3 | 6 Games |
| Artemis 7TR | 1.5/6 | -3 | 6 Games |
| Dragon 3.3 | 1.5/6 | -3 | 6 Games |
| Velvet 8.1.1 JA | 1/6 | -4 | 6 Games |
| Obsidian 15.01 SE | 1/6 | -4 | 6 Games |
| Starzix 6.0 | 1/6 | -4 | 6 Games |
| Igel 3.6.0 JA | 1/6 | -4 | 6 Games |
| Stockfish dev-20250202 | 0.5/6 | -5 | 6 Games |
Github: https://github.com/nocturn9x/heimdall

Comments
Post a Comment