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).
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
moveOverheadatwtime/2so 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:
| Build | Non-PGO NPS | PGO NPS | Gain |
|---|---|---|---|
| avx2 | 430,760 | 449,939 | +4.5% |
| avxvnni | 420,934 | 453,464 | +7.7% |
| bmi2 | 431,490 | 453,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.
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.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-160finding: Hypersion search at tight local optimum jointly tuned for SF18 NNUE.
Bench / verification
| Test | Result |
|---|---|
| NNUE bench T1 d=13 | 1,273,328 nodes (unchanged from v3.0) |
| WAC depth-8 classical | 184/198 (project best) |
| All 3 archive variants | bench match |
| Bullet conversion test | 4/4 pass (was 3/4 in v3.0) |
Comments
Post a Comment