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



FrankyCPP 1.6.0 - new version chess engine


Franky - UCI Chess Engine (java)
Modern C++20 UCI Chess Engine
Github:https://github.com/frankkopp/FrankyCPP/releases
Author: Frank Kopp

Franky 1.6.0 what's new?

Summary

v1.6 is a major evaluation overhaul delivering +81 ELO over v1.5 through three phases of eval feature development, plus critical search bug fixes and an aspiration window rewrite. The release adds ~25 new configurable eval parameters, a three-tier threat evaluation system, and comprehensive king safety improvements — all while keeping NPS regression within budget.

25 commits | 44 source/doc files changed | +7,235 / −493 lines


Headline Results (vs v1.5, 100 games, 300s/game)

Metricv1.5v1.6Delta
ELO vs v1.5+81.4+81 ELO
ELO vs SF18 @2700+6.9+41.9+35 ELO
Test Suites1747/2875 (60.8%)1883/2984 (63.1%)+2.3%
STS (Strategic)870/1500 (58.0%)886/1500 (59.1%)+1.1%
WAC (Tactical)~96%95.5%✅ maintained
NPS7.00M6.68M−4.6% (within budget)

Evaluation — Phase 1: Quick Eval Wins (+81 ELO)

Four new evaluation features, each configurable via EvalConfigData / ConfigRegistry:

  • Knight outpost bonus — ranks 4–6 relative, supported/unsupported variants
  • Pawn advancement bonus — non-passed pawns on ranks 4–7, rank-indexed array
  • Bad bishop detection — penalty per own pawn on bishop's color squares
  • Rook behind passed pawn — bonus for rook behind own or enemy passers

Evaluation — Phase 2: King Safety Overhaul

Three king safety features plus a PawnTT optimization:

  • Pawn storm penalty — opponent pawns advancing toward our king (midgame)
  • King open file penalty — open/semi-open files adjacent to king position
  • Safe check squares — penalty for squares where enemy can deliver check uncontested, filtered by actual piece attacks and piece existence
  • PawnTT passed pawn caching — extended PawnTT entries to cache passed pawn bitboards (16→32 bytes), eliminating redundant computation on every evaluate() call
  • Pre-computed attackedBy[] bitboards (king+pawn in evaluate, pieces in pieceEval)

Evaluation — Phase 3: Threat Evaluation

Three-tier threat evaluation with per-piece-type attack maps:

  • Tier 1: Pawn attacks on pieces (per victim type: minor/rook/queen)
  • Tier 2: Minor piece attacks on major pieces (rook/queen)
  • Tier 3: Hanging pieces (attacked by us, not defended by them)
  • Added attackedByPT[PieceType][Color] tracking infrastructure
  • 13 new config parameters (USE_THREAT_EVAL + 12 weights)

Phase 3 space/coordination features (3.1, 3.3) were implemented, tested, and disabled by default after match results confirmed a net regression. Code retained behind USE_* flags for future Texel tuning.

Evaluation — Pre-Phase 1 Improvements

  • Rank-based passed pawn bonuses (indexed by rank)
  • Bishop pair bonus value tuning (increased midgame and endgame)
  • Rook 7th rank bonus
  • King proximity to passed pawns evaluation
  • King safety attack evaluation (weighted piece attacks)
  • Eigenmann Rapid Engine Test Suite integration

Search Improvements

Aspiration Window Rewrite

  • Exponential delta widening — replaced fixed 3-step array with while(true) loop using delta += delta / divisor (~×1.33 growth)
  • Mate bypass — skip aspiration entirely when previous iteration found checkmate
  • Extreme score bypass — immediate full-window for TB win/loss range (≥4000cp)
  • UCI time gate — suppress lowerbound/upperbound score swings for first 3 seconds (like Stockfish), LOG output always emitted
  • Configurable ASP_INITIAL_DELTA and ASP_DELTA_GROWTH_DIVISOR parameters

NMP Fix

  • Null-move pruning mate clamping — clamp to beta instead of VALUE_CHECKMATE_THRESHOLD. The threshold (9871) wasn't recognized as checkmate by isCheckMate() (requires >9871), causing bogus ±98.71 scores in UCI output from TT contamination.

Bug Fixes

  • MAX_MOVES crash fix — increased from 512 to 1024. Games exceeding ~384 plies caused out-of-bounds writes on historyState[] in Position, leading to ACCESS_VIOLATION crashes on helper threads. Root cause: v1.5.1 crashed at move 256 in SF18 match.
  • Bishop pair bonus sign handling — fixed evaluation sign from both perspectives
  • Exclude tactical test configs in PROD mode — prevents non-essential test configurations from being compiled into production builds

Infrastructure

  • CMake GLOB refactor — replaced manually maintained file lists with file(GLOB CONFIGURE_DEPENDS). New source files are auto-discovered, no CMake edits needed.
  • Position setFromFen() optimization — added overloaded methods to reduce stack usage in test initialization
  • Updated all documentation, build guides, and arena configuration for v1.6

Planning / Documentation

  • PLAN_Eval_and_Strength_Improvement.md — comprehensive eval plan with per-phase validation results, benchmarks, and match data
  • PLAN_Texel_Tuning.md (v1.2) — detailed plan for automated parameter optimization targeting v1.7. Includes 8-phase implementation roadmap, module architecture, data acquisition strategy, and algorithm specification.

What's Next (v1.7)

v1.7 will focus on Texel Tuning — automated optimization of all ~85 eval parameters against millions of labeled positions. This is expected to deliver +20–50 additional ELO at zero NPS cost. See PLAN_Texel_Tuning.md for details.


Comments