mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Restore deterministic search state
Introduce helper function Search::reset() which clears all kind of search memory, in order to restore a deterministic search state. Generalize TT.clear() into Search::reset() for the following use cases: - bench: needed to guarantee deterministic bench (ie. if you call bench from interactive command line twice in a row you get the same value). - Clear Hash: restore clean search state, which is the purpose of this button. - ucinewgame: ditto. No functional change. Resolves #346
This commit is contained in:
parent
946fa47625
commit
2e86d1febc
6 changed files with 19 additions and 4 deletions
|
@ -104,7 +104,7 @@ void benchmark(const Position& current, istream& is) {
|
|||
|
||||
Options["Hash"] = ttSize;
|
||||
Options["Threads"] = threads;
|
||||
TT.clear();
|
||||
Search::reset();
|
||||
|
||||
if (limitType == "time")
|
||||
limits.movetime = stoi(limit); // movetime is in ms
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#define MOVEPICK_H_INCLUDED
|
||||
|
||||
#include <algorithm> // For std::max
|
||||
#include <cstring> // For std::memset
|
||||
|
||||
#include "movegen.h"
|
||||
#include "position.h"
|
||||
|
@ -43,6 +44,7 @@ struct Stats {
|
|||
|
||||
const T* operator[](Piece pc) const { return table[pc]; }
|
||||
T* operator[](Piece pc) { return table[pc]; }
|
||||
void clear() { std::memset(table, 0, sizeof(table)); }
|
||||
|
||||
void update(Piece pc, Square to, Move m) {
|
||||
|
||||
|
|
|
@ -181,6 +181,18 @@ void Search::init() {
|
|||
}
|
||||
|
||||
|
||||
/// Search::reset() clears all search memory, to restore a deterministic state
|
||||
|
||||
void Search::reset () {
|
||||
|
||||
TT.clear();
|
||||
History.clear();
|
||||
CounterMovesHistory.clear();
|
||||
Gains.clear();
|
||||
Countermoves.clear();
|
||||
}
|
||||
|
||||
|
||||
/// Search::perft() is our utility to verify move generation. All the leaf nodes
|
||||
/// up to the given depth are generated and counted and the sum returned.
|
||||
template<bool Root>
|
||||
|
|
|
@ -106,6 +106,7 @@ extern StateStackPtr SetupStates;
|
|||
|
||||
void init();
|
||||
void think();
|
||||
void reset();
|
||||
template<bool Root> uint64_t perft(Position& pos, Depth depth);
|
||||
|
||||
} // namespace Search
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "search.h"
|
||||
#include "thread.h"
|
||||
#include "timeman.h"
|
||||
#include "tt.h"
|
||||
#include "uci.h"
|
||||
|
||||
using namespace std;
|
||||
|
@ -181,7 +180,7 @@ void UCI::loop(int argc, char* argv[]) {
|
|||
|
||||
else if (token == "ucinewgame")
|
||||
{
|
||||
TT.clear();
|
||||
Search::reset();
|
||||
Time.availableNodes = 0;
|
||||
}
|
||||
else if (token == "isready") sync_cout << "readyok" << sync_endl;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <ostream>
|
||||
|
||||
#include "misc.h"
|
||||
#include "search.h"
|
||||
#include "thread.h"
|
||||
#include "tt.h"
|
||||
#include "uci.h"
|
||||
|
@ -34,7 +35,7 @@ UCI::OptionsMap Options; // Global object
|
|||
namespace UCI {
|
||||
|
||||
/// 'On change' actions, triggered by an option's value change
|
||||
void on_clear_hash(const Option&) { TT.clear(); }
|
||||
void on_clear_hash(const Option&) { Search::reset(); }
|
||||
void on_hash_size(const Option& o) { TT.resize(o); }
|
||||
void on_logger(const Option& o) { start_logger(o); }
|
||||
void on_threads(const Option&) { Threads.read_uci_options(); }
|
||||
|
|
Loading…
Add table
Reference in a new issue