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.5.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.5.0 what's new?


TT Buckets, Best Thread Selection, SMP Hardening & Arena Improvements
+103.7 ELO vs v1.4 · +331 cumulative vs v1.1


Match Results (4 threads, 300s/game, 100 games each)

OpponentScoreW/D/LELO ฮ”
Stockfish 18 (2700)51–4949W / 4D / 47L+6.9
FrankyCPP v1.464.5–35.546W / 37D / 17L+103.7
FrankyCPP v1.375.5–24.562W / 27D / 11L+195.5

Test suites: 1747/2875 (60.7%)


What's New

♟️ Transposition Table: 4-Way Bucket Refactor

  • Refactored TT from single-entry per slot to 4-way associative buckets, improving hit rates and reducing collision evictions
  • Hardened SMP probe safety for concurrent access
  • Updated default TT size to 256 MB, new default pawn TT size

๐Ÿงต Best Thread Selection for Lazy SMP (+11.2 ELO)

  • Best-thread selection: after search completes, picks the best result across all SMP threads instead of always using thread 0
  • Depth+score heuristic with configurable BEST_THREAD_SCORE_MARGIN (default 50cp) — deeper threads win unless a shallower thread has a significantly better score
  • Final UCI info line correction when a non-main thread is selected
  • Guards for hard-limited searches, TB root probing, and mate detection edge cases
  • New UCI options: USE_BEST_THREAD_SELECTION (bool), BEST_THREAD_SCORE_MARGIN (int)

๐Ÿ—️ Namespace Refactor (Complete)

  • Removed transitional using namespace chess; from types.h
  • Added scoped using namespace chess; inside namespace blocks across all headers
  • Created chesscore/fwd.h with centralized forward declarations

๐Ÿ”ง Search Code Refactoring

Systematic cleanup of Search::run() for maintainability:

  • Extract resetSearchState()joinHelperThreads()joinTimerThread()
  • Extract applyTBRootOverride() and extractPonderMove() (~100 lines out of run())
  • New TBRootInfo struct grouping 4 loose fields with reset()
  • Consolidate SearchThreadData::resetForNewSearch() / reset() replacing 44 lines of inline loops

๐ŸŸ️ Arena Testing Infrastructure

  • Unified configurationtestSuiteRuns format with per-suite overrides (timePerMove, maxDepth)
  • Tag system: tag field on all config types, propagated through runners to result JSON
  • Engine summary (--summary): aggregated results per engine with --history flag
  • --show-config: query engine UCI options from Arena CLI
  • Bug fixes: duplicate/phantom engine entries, engine name inconsistency across result sources
  • 42 new baseline test result JSON files (v1.1–v1.5, FrankyGo, Stockfish)


Comments