Since you’re here...

We hope you will consider supporting us today. We need your support to continue to exist, because good entries are more and more work time. Every reader contribution, however big or small, is so valuable. Support "Chess Engines Diary" even a small amount– and it only takes a minute. Thank you.
============================== My email: jotes@go2.pl



Hypersion 3.1 - new version chess engine


Hypersion a free, open-source UCI chess engine.
Hypersion uses an NNUE network for evaluation (Stockfish 18 SFNNv10 architecture: HalfKAv2_hm features + FullThreats, big network 1024-d FT, small network 128-d FT) on top of an alpha-beta search with PVS, transposition table, aspiration windows, late-move reductions, singular extensions, ProbCut, futility/razoring/SEE pruning, and lazy-SMP infrastructure (single-threaded by default — multi-thread is currently unstable).
Author: RenCopp

Hypersion 3.1 what's new?

Hypersion 3.1 — drop-in upgrade over v3.0 with this session's improvements baked in. Same NNUE network (SF18 SFNNv10), same bench (1,273,328 nodes T1 d=13), AVX-VNNI-PGO build now the recommended download.

What's new vs v3.0

Bullet TC fixes (commits 74d5b49, 15d7f2a)

The "engine panics at <2s remaining" issue is resolved. Two-part time-manager fix:

  • Cap moveOverhead at wtime/2 so the engine always has at least half its remaining time after overhead.
  • SF18-style mtg scaling under 1s: mtg = max(2, remaining/20) so very-low-time positions get proportionally more per move.

K+R+P vs K+P conversion test went from 1207ms/move (80% of clock) to 184ms/move (12%) — should noticeably reduce lichess bullet flag-outs.

KQK Syzygy hang fixed (commit b6e44df)

Specific KQK positions (kings on same file, e.g. 8/8/8/4k3/8/8/8/Q3K3 w - - 0 1) hung the engine indefinitely when Syzygy was loaded — a Fathom-library probe_dtz recursion bug. Workaround in src/syzygy.cpp::probe_root_dtz: skip root DTZ probe for KX-vs-K with ≤4 pieces and no pawns (the regular search trivially finds the win in <1s). WDL probes at internal nodes still fire.

After fix: all 4 test_bullet_conversion.py scenarios pass (was 3/4).

Cross-session opening variety (commit f31f6a5)

Ported from Kirin V8's OpeningBook. The bot tracks its last 16 first-moves played at startpos across sessions in hypersion_recent_openings.txt. Book probe at startpos filters out recently-played moves with progressive window shrink. Bot now rotates through e2e4 / d2d4 / c2c4 / g1f3 naturally instead of repeating one opening every game.

PGO release builds (this session)

All 3 architecture variants now ship as PGO builds. NPS gains on Alder Lake i7:

BuildNon-PGO NPSPGO NPSGain
avx2430,760449,939+4.5%
avxvnni420,934453,464+7.7%
bmi2431,490453,141+5.0%

PGO is gated to single-instance production use (lichess-bot, analysis). Don't use for high-concurrency SPRT testing — i-cache pressure causes PGO to regress at concurrency ≥ 4.

Classical eval expansion (R20-R37, commits 3bbe494 + apply)

Classical eval grew from 14 to 145 tunable scalars across 16 feature rounds, tuned on a 16M-position master-game dataset:

  • R20 Mop-up eval (drives lone king to corner)
  • R21 OCB scaling (opposite-colour-bishop drawish recognition)
  • R22 Initiative bonus (SF7-style, joint-tuned via --new-only)
  • R23 KBNK mating drive (Push-To-Corners by bishop colour)
  • R25 Drawish endgame scaling (wrong-bishop rook-pawn, KNP)
  • R26 KPK bitbase (24KB retrograde-built lookup, probed at eval)
  • R27-R31 Knight rim, Pawn islands, Bishop-pair openness, Rook on 8th, Queen tropism
  • R32-R37 ConnectedPasser, TradeDown, BadBishopBlocked, RookTrappedByKing, BackwardOnHalfOpen, Imbalance polynomial (in code, disabled-at-0 — master-game MSE optimum regressed WAC tactically)

Project-best WAC depth-8 classical: 184/198 (92.9%) — up from 177 at session start.

Lichess-bot config additions

  • Draw offer/accept: offer_draw_enabled=true, offer_draw_score=50 (was 0 — never fired). Bot now offers/accepts draws when |score| ≤ 50 cp for 10 consecutive moves with ≤10 pieces on board.
  • Takebacks: max_takebacks_accepted=3 (was 0). Bot auto-accepts up to 3 takebacks per game.

Tombstones (failed experiments)

Documented in source comments + CHANGELOG.md:

  • T1.1 material-aware draw contempt — bench shifted, WAC dropped
  • Tactical-aligned Texel re-tune (WAC anchor) — overfit, WAC -10
  • R22 widened-ceiling re-tune — WAC -3
  • R32-R37 master-game tuned values — WAC -3 to -8
  • Joint A+B SPSA (RFP+LMR+SEE+FUTIL+NMP+ProbCut, 7 params, 300 iters) — -20.9 ± 41.9 ELO @ SPRT 200g. Confirms history.h:103-160 finding: Hypersion search at tight local optimum jointly tuned for SF18 NNUE.

Bench / verification

TestResult
NNUE bench T1 d=131,273,328 nodes (unchanged from v3.0)
WAC depth-8 classical184/198 (project best)
All 3 archive variantsbench match
Bullet conversion test4/4 pass (was 3/4 in v3.0)



Comments