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



KiyEngine 6.0.0 - new version chess engine




KiyEngine - UCI chess engine
Author: Kiy-Khoi

KiyEngine V3 is a high-performance UCI chess engine written in Rust. It combines a Mamba-MoE (Mixture of Experts) Neural Network for evaluation with a classic Alpha-Beta Search enhanced by a Massive Transposition Table.

A major release bringing Static Exchange Evaluation, full PV tracking, advanced extensions, NNUE infrastructure, and comprehensive search optimizations.

Highlights

MetricValue
NPS~1.93M nodes/sec (4 threads)
Search Depth15-19 ply in 60s+1s time control
PV OutputFull multi-move principal variation lines
NNUEInfrastructure ready (accumulator, features, SIMD eval)

Benchmark (depth 20, 4 threads)

Position: 3r2k1/pp3pp1/2p1bn1p/8/4P3/2N2N2/PPP2PPP/3R2K1 w

Version     Nodes         NPS          Wall Time
-------     ----------    ----------   ---------
v5.2.0      33,900,000    2,180,000    ~15.6s
v6.0.0      23,358,906    1,931,426    ~12.1s

New Features

Static Exchange Evaluation (SEE)

  • Full exchange analysis with x-ray sliding attack support
  • all_attackers_to() computes attackers through removed pieces (x-ray discovery)
  • see_score() returns material gain/loss via negamax walk-back
  • Handles promotions, king safety, and cheapest-attacker ordering

SEE Integration

  • Main search pruning: depth-scaled thresholds (-20×depth for captures, -50×depth for quiets)
  • Quiescence pruning: skip all captures with SEE < 0
  • LMR adjustment: captures with negative SEE get +1 additional reduction
  • Replaces crude attacker-vs-victim heuristic with proper exchange evaluation

Triangular PV Table

  • pv_table[ply][i] tracks full principal variation across all plies
  • PV copied from child to parent on alpha improvement
  • Full multi-move PV lines in UCI info output (was single-move only)

New Extensions

  • Recapture extension: +1 depth when capturing on the same square as previous move
  • Passed pawn push extension: +1 depth for pawns pushed to 6th or 7th rank

Improved Lazy SMP

  • Helper threads use varied depth offsets (1, 2, or 3) based on thread index
  • Better exploration diversity across the search tree (Stockfish-inspired)

NNUE Evaluation Infrastructure

  • (768 → 512)×2 → SCReLU → 1024 → 1 architecture
  • AVX2 SIMD evaluate with Lizard SCReLU trick
  • Incremental accumulator updates (zero-copy split_at_mut)
  • Binary format with i16 quantized weights (385.5 KB)
  • Training pipeline with knowledge distillation + self-play RL

Search Tuning

  • More aggressive LMR table (ln(d)×ln(m)/2.25)
  • Tighter aspiration windows (δ=12, start at depth ≥ 5)
  • Null move reduction R = 4 + depth/6
  • Reverse futility pruning extended to depth ≤ 9
  • Futility pruning extended to depth ≤ 8
  • Late move pruning extended to depth ≤ 8
  • Gentler history aging (3/4 decay instead of 1/2)
  • Queen promotions added to quiescence search
  • IIR at depth ≥ 3 for non-PV nodes
  • Multi-cut after singular extension failure

Other Changes

  • Stockfish-inspired time management (soft/hard bounds, stability, falling eval)
  • Repetition detection (search path + game history, zero-allocation)
  • Enhanced static evaluation (bishop pair, rook files, passed/doubled/isolated pawns)
  • Continuation history, countermove heuristic, capture history
  • Incremental move picking (avoids sorting pruned moves)
  • Docker support (Dockerfile + docker-compose.yml)
  • Updated ARCHITECTURE.md, DOCUMENTATION.md, CHANGELOG.md, README.md


Comments