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



Zangdar 7 - new version chess engine


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 JA3/6+06 games
Halogen 15.5.32/6-26 games
PlentyChess 7.0.02/6-26 games
HypnoS 1.002/6-26 games
Omega 111.5/6-36 games
CorChess 202510051.5/6-36 games
Tenax 1.03/4+24 games
Superultra 2.1 JA2.5/4+14 games
Alexander 6.12.5/4+14 games
Astra 6.1.12/4+04 games
RofChade 3.12/4+04 games
Dragon free2/4+04 games
Equisetum 1.30 JA2/4+04 games
Pawn 4.0.4 JA2/4+04 games
Slowchess 2.91.5/4-14 games
Wordfish 2.70 dev-2509251.5/4-14 games
Stockfish dev-202509281/4-24 games
Revolution 2.81 0210251/4-24 games
Artemis 18.6TR1/4-24 games
Dragon 3.31/4-24 games
ProteusSF-Aureo1/4-24 games


Successes of the Zangdar engine in our tournaments:




Comments