Zangdar - UCI chess engine (written in C++11).
Rating Chess Engines Diary CEDR=2960
Zangdar 7 - what's new?
This release covers roughly 5 months of development (Feb–Jul 2026): a substantial rework of the search (pruning, reductions, extensions, move ordering), multiple NNUE cycles retraining of the network, and significant hardening of the multi-threaded infrastructure. Each change below was individually validated by SPRT before being merged — the exact cumulative Elo isn't a simple sum of the individual results (gains overlap and interact), but the net direction across this many validated increments is solidly positive.
Search
Null Move Pruning: reduction modulated by a tactical flag (6.16), then a hindsight extension triggered when the null move fails well below beta (6.27).
LMR (Late Move Reduction): post-hoc correction of the parent's reduction using the parent→child eval drift (6.26).
Refined pruning: history-weighted SEE pruning (6.17), history pruning with skipQuiets (6.18), corrplexity-modulated RFP/SNMP (6.13), QS futility pruning with a safety clamp (6.20).
Move ordering: capture history indexed by threats (6.15), history updates extended to quiescence (6.11).
Correction History: gravity-style update formula (6.19.0), tables compacted to 16-bit (6.19.1).
Time management: new time manager (6.14).
Syzygy: root probing now plays the DTZ-optimal move directly (6.7.6).
NNUE network
King buckets 5 → 8 (6.10), then 8 → 16 (6.33) — current architecture (768×16kb → 1024)×2 → 1×8ob, SCReLU, horizontally-mirrored buckets, factorized weights.
New network in Zangdar 7 (net_20a_1000): retrained from scratch on the entire combined-and-interleaved data corpus (~10.7 billion positions, spanning every past engine generation), at full learning rate.
Several iterative bootstrap cycles over the project's history: each new engine generation regenerated training data with more accurate labels for the next network (networks net_9b → net_11b → net_13a → net_20a).
Widening the hidden layer (1024→1280) and adding dense layers were both tried and found neutral or too costly on this hardware, then abandoned — the real levers turned out to be input capacity (buckets) and full-corpus from-scratch retraining, not hidden-layer width.
Infrastructure / multi-thread robustness
Cross-thread voting for best-move selection in Lazy SMP (6.31), Stockfish-style weighted votes.
Fixes for races and crashes: unhandled double-go (6.12.0), ucinewgame clearing state without stopping an in-flight search, hash table resize during an active search.
get_best_thread clarified and hardened; internal encodings hardened (move fields, piece-indexed tables).
SPSA tuning support (via OpenBench) and datagen infrastructure for NNUE training.
Precompiled binaries
The binaries shipped with this release are Windows-only. One executable is provided per target CPU architecture, trading off compatibility against performance:
Architecture Target CPUs
sse2 older machines / VMs without AVX
avx2 2013+ standard (Intel Haswell+, AMD Zen 1/2/3)
bmi2 Intel Haswell+ and AMD Zen 3+ (hardware PEXT)
avx512 Intel Ice Lake-SP+/server, AMD Zen 4/5
Pick the binary matching your CPU; when in doubt, avx2 covers the vast majority of modern machines. Linux/macOS users need to build from source (make -j$(nproc), defaults to ARCH=native).
Results against Zangdar 6.1.1
STC
Results of Zangdar-7 vs Zangdar-6.1.1 (10+0.1, 1t, 128MB, UHO_Lichess_4852_v1.epd):
Elo: 104.87 +/- 11.53, nElo: 208.10 +/- 21.53
LOS: 100.00 %, DrawRatio: 33.40 %, PairsRatio: 9.41
Games: 1000, Wins: 406, Losses: 113, Draws: 481, Points: 646.5 (64.65 %)
Ptnml(0-2): [1, 31, 167, 276, 25], WL/DD Ratio: 0.92
Zangdar 5.00.02 vs other engines:
| Altair 7.2.1 JA | 3/6 | +0 | 6 games |
| Halogen 15.5.3 | 2/6 | -2 | 6 games |
| PlentyChess 7.0.0 | 2/6 | -2 | 6 games |
| HypnoS 1.00 | 2/6 | -2 | 6 games |
| Omega 11 | 1.5/6 | -3 | 6 games |
| CorChess 20251005 | 1.5/6 | -3 | 6 games |
| Tenax 1.0 | 3/4 | +2 | 4 games |
| Superultra 2.1 JA | 2.5/4 | +1 | 4 games |
| Alexander 6.1 | 2.5/4 | +1 | 4 games |
| Astra 6.1.1 | 2/4 | +0 | 4 games |
| RofChade 3.1 | 2/4 | +0 | 4 games |
| Dragon free | 2/4 | +0 | 4 games |
| Equisetum 1.30 JA | 2/4 | +0 | 4 games |
| Pawn 4.0.4 JA | 2/4 | +0 | 4 games |
| Slowchess 2.9 | 1.5/4 | -1 | 4 games |
| Wordfish 2.70 dev-250925 | 1.5/4 | -1 | 4 games |
| Stockfish dev-20250928 | 1/4 | -2 | 4 games |
| Revolution 2.81 021025 | 1/4 | -2 | 4 games |
| Artemis 18.6TR | 1/4 | -2 | 4 games |
| Dragon 3.3 | 1/4 | -2 | 4 games |
| ProteusSF-Aureo | 1/4 | -2 | 4 games |
Comments
Post a Comment