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 configuration: testSuiteRuns 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

Popular posts from this blog

Torch-4 UCI v 1.01 - new version chess engine

Reckless 0.9.0 - new version super strong chess engine

Reckless 0.10.0 - new version super strong chess engine

We already have the new Fritz 20 program - what does it look like and how does it work?