Franky - UCI Chess Engine (java)
Modern C++20 UCI Chess Engine
Github:https://github.com/frankkopp/FrankyCPP/releases
Author: Frank Kopp
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)
| Opponent | Score | W/D/L | ELO ฮ |
|---|---|---|---|
| Stockfish 18 (2700) | 51–49 | 49W / 4D / 47L | +6.9 |
| FrankyCPP v1.4 | 64.5–35.5 | 46W / 37D / 17L | +103.7 |
| FrankyCPP v1.3 | 75.5–24.5 | 62W / 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;fromtypes.h - Added scoped
using namespace chess;inside namespace blocks across all headers - Created
chesscore/fwd.hwith centralized forward declarations
๐ง Search Code Refactoring
Systematic cleanup of Search::run() for maintainability:
- Extract
resetSearchState(),joinHelperThreads(),joinTimerThread() - Extract
applyTBRootOverride()andextractPonderMove()(~100 lines out ofrun()) - New
TBRootInfostruct grouping 4 loose fields withreset() - Consolidate
SearchThreadData::resetForNewSearch()/reset()replacing 44 lines of inline loops
๐️ Arena Testing Infrastructure
- Unified configuration:
testSuiteRunsformat 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--historyflag --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
Post a Comment