io-chess
UCI chess engine
Loading...
Searching...
No Matches
UCI.h
Go to the documentation of this file.
1#pragma once
2
10
11#include "UciOptions.h"
12
13#include "../Types.h"
15
16#include "../eval/Evaluator.h"
17#include "../search/ISearch.h"
18#include "../search/MCTS.h"
19#include "../search/Negamax.h"
21#include "../search/TT.h"
23#include <atomic>
24#include <memory>
25#include <mutex>
26#include <sstream>
27#include <string>
28#include <thread>
29
30// Engine constant for versioning
31static constexpr const char *ENGINE_VERSION = "1.0";
32
41private:
42 // Engine name and author
43 static constexpr const char *ENGINE_NAME = "io-chess-engine";
44 static constexpr const char *ENGINE_AUTHOR = "Alessandro Gobbetti!";
45
46 // Persistent Resources (loaded once)
47 std::vector<std::unique_ptr<Evaluator>> evaluators_;
48 std::vector<std::unique_ptr<IEvaluator>> evalCtxs_;
50 std::unique_ptr<PolyglotBook> book_;
51
52 // Threading and Search State
53 std::vector<std::thread> threadPool_;
54 std::shared_ptr<SearchSharedData> searchData_;
55
56 // The active search algorithm
57 std::unique_ptr<ISearch> searcher_;
58 std::thread searchThread_;
59 std::atomic<bool> searchRunning_{false};
60 std::atomic<bool> searchMayRunForever_{false};
61 std::atomic<bool> pondering_{false};
62 std::atomic<bool> ponderResultReady_{false};
66 std::mutex ponderMutex_;
67
68 // Current position
70
71 // Options
73 std::unique_ptr<PolyglotBook> book2_;
75 static constexpr int MAX_BOOK_MISSES = 3;
76
77 std::string pendingTTLoadFile_;
78 uint64_t ttSnapshotCounter_ = 0;
79
80 // Per-search metric baselines (used to report deltas in info lines)
82 uint64_t searchBaseTbHits_ = 0;
83 uint64_t searchBaseTtHits_ = 0;
84
85public:
89 explicit UciProtocol(const std::string &modelPath, bool useSimpleEval = false,
90 const std::string &tbPath = "",
91 const std::string &bookPath = "",
92 const std::string &bookPath2 = "", int evalThreads = 0);
94
98 void loop();
99
100 // Callbacks for options
101 void resizeHash(size_t mb);
102 void updateThreads(int numThreads);
103 void reinitEngine();
104 void updateEvalContexts();
105 void initTablebase();
106 void loadBooks();
107 void setTTDisabled(bool disable);
108 void setPendingTTLoadFile(const std::string& file) { pendingTTLoadFile_ = file; }
109
110private:
111 // UCI command handlers
112 void handleUci();
113 void handleIsReady();
114 void handleSetOption(std::istringstream &is);
115 void handleUciNewGame();
116 void handlePosition(std::istringstream &is);
117 void handleGo(std::istringstream &is);
118 void handlePonderHit();
119 void handleStop();
120 void handleQuit();
121 void handleEval();
122
123 // Helper functions
124 void initializeEngine();
125 static std::string formatScore(int score);
126 void sendInfo(int depth, int score, int nodes, int nps,
127 const std::vector<Move> &pv, const Board &board);
128 void sendBestMove(Move move, Move ponderMove = Move(Move::NO_MOVE));
129 void saveTTSnapshotForMove(const std::string &moveUci);
130 static std::string sanitizeForFilename(const std::string &value);
131};
Runtime evaluator manager.
Search interface and shared data structures.
Monte Carlo Tree Search implementation.
Alpha-Beta search implementation with enhancements.
Transposition Table implementation using a 3+1 Cluster Architecture.
Syzygy tablebase probing via Fathom.
Sophisticated time allocation and management for the chess engine.
Common type definitions and constants for the chess engine.
chess::Move Move
Alias for chess::Move.
Definition Types.h:15
chess::Board Board
Alias for chess::Board.
Definition Types.h:14
static constexpr const char * ENGINE_VERSION
Definition UCI.h:31
Management of UCI engine options.
The main Transposition Table.
Definition TT.h:145
uint64_t ttSnapshotCounter_
Definition UCI.h:78
void handleIsReady()
Definition UCI.cpp:195
uint64_t searchBaseTtHits_
Definition UCI.h:83
void handlePosition(std::istringstream &is)
Definition UCI.cpp:229
SearchParams ponderParams_
Time params from go ponder for ponderhit use.
Definition UCI.h:65
void handleUci()
Definition UCI.cpp:188
void saveTTSnapshotForMove(const std::string &moveUci)
Definition UCI.cpp:920
void initializeEngine()
Definition UCI.cpp:740
std::string pendingTTLoadFile_
Definition UCI.h:77
void handleEval()
Definition UCI.cpp:969
std::vector< std::thread > threadPool_
Definition UCI.h:53
void sendBestMove(Move move, Move ponderMove=Move(Move::NO_MOVE))
Definition UCI.cpp:906
~UciProtocol()
Definition UCI.cpp:69
uint64_t searchBaseTbHits_
Definition UCI.h:82
std::atomic< bool > ponderResultReady_
Definition UCI.h:62
void handleSetOption(std::istringstream &is)
Definition UCI.cpp:206
uint64_t searchBaseFullRebuilds_
Definition UCI.h:81
void resizeHash(size_t mb)
Definition UCI.cpp:988
std::atomic< bool > pondering_
Definition UCI.h:61
void updateEvalContexts()
Definition UCI.cpp:1004
void setPendingTTLoadFile(const std::string &file)
Definition UCI.h:108
std::unique_ptr< ISearch > searcher_
Definition UCI.h:57
void updateThreads(int numThreads)
Definition UCI.cpp:992
std::vector< std::unique_ptr< IEvaluator > > evalCtxs_
Definition UCI.h:48
int consecutiveBookMisses_
Definition UCI.h:74
void sendInfo(int depth, int score, int nodes, int nps, const std::vector< Move > &pv, const Board &board)
Definition UCI.cpp:852
std::atomic< bool > searchMayRunForever_
Definition UCI.h:60
UciProtocol(const std::string &modelPath, bool useSimpleEval=false, const std::string &tbPath="", const std::string &bookPath="", const std::string &bookPath2="", int evalThreads=0)
Constructs the UCI Protocol handler.
Definition UCI.cpp:40
std::shared_ptr< SearchSharedData > searchData_
Definition UCI.h:54
static std::string sanitizeForFilename(const std::string &value)
Definition UCI.cpp:955
static constexpr const char * ENGINE_NAME
Definition UCI.h:43
void loop()
The main blocking loop that reads commands from standard input.
Definition UCI.cpp:77
void handleStop()
Definition UCI.cpp:725
std::vector< std::unique_ptr< Evaluator > > evaluators_
Definition UCI.h:47
std::atomic< bool > searchRunning_
Definition UCI.h:59
static constexpr const char * ENGINE_AUTHOR
Definition UCI.h:44
std::unique_ptr< PolyglotBook > book2_
Definition UCI.h:73
void reinitEngine()
Definition UCI.cpp:998
void handlePonderHit()
Definition UCI.cpp:638
Board currentBoard_
Definition UCI.h:69
void loadBooks()
Definition UCI.cpp:1019
void handleQuit()
Definition UCI.cpp:738
std::thread searchThread_
Definition UCI.h:58
static std::string formatScore(int score)
Definition UCI.cpp:827
void setTTDisabled(bool disable)
Definition UCI.cpp:1035
void initTablebase()
Definition UCI.cpp:1013
void handleGo(std::istringstream &is)
Definition UCI.cpp:267
std::mutex ponderMutex_
Definition UCI.h:66
static constexpr int MAX_BOOK_MISSES
Definition UCI.h:75
UciOptions options_
Definition UCI.h:72
void handleUciNewGame()
Definition UCI.cpp:223
std::unique_ptr< PolyglotBook > book_
Definition UCI.h:50
Move ponderResultMove_
Definition UCI.h:63
Move ponderMove_
Expected opponent reply (2nd move in PV).
Definition UCI.h:64
TranspositionTable tt_
Definition UCI.h:49
Polyglot opening book parser and probe utility.
Parameters defining the constraints for a search operation.
Definition ISearch.h:125
Holds all configurable engine parameters.
Definition UciOptions.h:19