Franky - UCI Chess Engine (java)
Modern C++20 UCI Chess Engine
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)
| Metric | v1.5 | v1.6 | Delta |
|---|---|---|---|
| ELO vs v1.5 | — | +81.4 | +81 ELO |
| ELO vs SF18 @2700 | +6.9 | +41.9 | +35 ELO |
| Test Suites | 1747/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 |
| NPS | 7.00M | 6.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
while(true) loop using delta += delta / divisor (~×1.33 growth)ASP_INITIAL_DELTA and ASP_DELTA_GROWTH_DIVISOR parametersNMP 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.
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
historyState[] in Position, leading to ACCESS_VIOLATION crashes on helper threads. Root cause: v1.5.1 crashed at move 256 in SF18 match.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
file(GLOB CONFIGURE_DEPENDS). New source files are auto-discovered, no CMake edits needed.setFromFen() optimization — added overloaded methods to reduce stack usage in test initializationPlanning / Documentation
PLAN_Eval_and_Strength_Improvement.md — comprehensive eval plan with per-phase validation results, benchmarks, and match dataPLAN_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.
PLAN_Eval_and_Strength_Improvement.md — comprehensive eval plan with per-phase validation results, benchmarks, and match dataPLAN_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
Post a Comment