mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Use a set to store SearchMoves
We just need to verify if a legal move is among the SearchMoves, so we don't need a vector for this. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
a1076cc68a
commit
a29dd88f75
6 changed files with 28 additions and 29 deletions
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
@ -121,7 +122,7 @@ void benchmark(int argc, char* argv[]) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Threads.start_thinking(pos, limits, vector<Move>(), false);
|
Threads.start_thinking(pos, limits, set<Move>(), false);
|
||||||
nodes += RootPosition.nodes_searched();
|
nodes += RootPosition.nodes_searched();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace Search {
|
||||||
|
|
||||||
volatile SignalsType Signals;
|
volatile SignalsType Signals;
|
||||||
LimitsType Limits;
|
LimitsType Limits;
|
||||||
std::vector<Move> SearchMoves;
|
std::set<Move> SearchMoves;
|
||||||
Position RootPosition;
|
Position RootPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,6 +282,7 @@ void Search::think() {
|
||||||
|
|
||||||
static Book book; // Defined static to initialize the PRNG only once
|
static Book book; // Defined static to initialize the PRNG only once
|
||||||
|
|
||||||
|
Move bm;
|
||||||
Position& pos = RootPosition;
|
Position& pos = RootPosition;
|
||||||
Chess960 = pos.is_chess960();
|
Chess960 = pos.is_chess960();
|
||||||
elapsed_time(true);
|
elapsed_time(true);
|
||||||
|
@ -293,18 +294,24 @@ void Search::think() {
|
||||||
// Populate RootMoves with all the legal moves (default) or, if a SearchMoves
|
// Populate RootMoves with all the legal moves (default) or, if a SearchMoves
|
||||||
// is given, with the subset of legal moves to search.
|
// is given, with the subset of legal moves to search.
|
||||||
for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
|
for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
|
||||||
if (SearchMoves.empty() || count(SearchMoves.begin(), SearchMoves.end(), ml.move()))
|
if (SearchMoves.empty() || SearchMoves.count(ml.move()))
|
||||||
RootMoves.push_back(RootMove(ml.move()));
|
RootMoves.push_back(RootMove(ml.move()));
|
||||||
|
|
||||||
if (Options["OwnBook"])
|
if (RootMoves.empty())
|
||||||
{
|
{
|
||||||
Move bookMove = book.probe(pos, Options["Book File"], Options["Best Book Move"]);
|
cout << "info depth 0 score "
|
||||||
|
<< score_to_uci(pos.in_check() ? -VALUE_MATE : VALUE_DRAW) << endl;
|
||||||
|
|
||||||
if (bookMove && count(RootMoves.begin(), RootMoves.end(), bookMove))
|
RootMoves.push_back(MOVE_NONE);
|
||||||
{
|
goto finalize;
|
||||||
std::swap(RootMoves[0], *find(RootMoves.begin(), RootMoves.end(), bookMove));
|
}
|
||||||
goto finalize;
|
|
||||||
}
|
if ( Options["OwnBook"]
|
||||||
|
&& (bm = book.probe(pos, Options["Book File"], Options["Best Book Move"])) != MOVE_NONE
|
||||||
|
&& count(RootMoves.begin(), RootMoves.end(), bm))
|
||||||
|
{
|
||||||
|
std::swap(RootMoves[0], *find(RootMoves.begin(), RootMoves.end(), bm));
|
||||||
|
goto finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read UCI options: GUI could change UCI parameters during the game
|
// Read UCI options: GUI could change UCI parameters during the game
|
||||||
|
@ -375,9 +382,9 @@ void Search::think() {
|
||||||
|
|
||||||
finalize:
|
finalize:
|
||||||
|
|
||||||
// When we reach max depth we arrive here even without a StopRequest, but if
|
// When we reach max depth we arrive here even without Signals.stop is raised,
|
||||||
// we are pondering or in infinite search, we shouldn't print the best move
|
// but if we are pondering or in infinite search, we shouldn't print the best
|
||||||
// before we are told to do so.
|
// move before we are told to do so.
|
||||||
if (!Signals.stop && (Limits.ponder || Limits.infinite))
|
if (!Signals.stop && (Limits.ponder || Limits.infinite))
|
||||||
Threads.wait_for_stop_or_ponderhit();
|
Threads.wait_for_stop_or_ponderhit();
|
||||||
|
|
||||||
|
@ -406,16 +413,6 @@ namespace {
|
||||||
bestValue = delta = -VALUE_INFINITE;
|
bestValue = delta = -VALUE_INFINITE;
|
||||||
ss->currentMove = MOVE_NULL; // Hack to skip update gains
|
ss->currentMove = MOVE_NULL; // Hack to skip update gains
|
||||||
|
|
||||||
// Handle the special case of a mated/stalemate position
|
|
||||||
if (RootMoves.empty())
|
|
||||||
{
|
|
||||||
cout << "info depth 0 score "
|
|
||||||
<< score_to_uci(pos.in_check() ? -VALUE_MATE : VALUE_DRAW) << endl;
|
|
||||||
|
|
||||||
RootMoves.push_back(MOVE_NONE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterative deepening loop until requested to stop or target depth reached
|
// Iterative deepening loop until requested to stop or target depth reached
|
||||||
while (!Signals.stop && ++depth <= MAX_PLY && (!Limits.maxDepth || depth <= Limits.maxDepth))
|
while (!Signals.stop && ++depth <= MAX_PLY && (!Limits.maxDepth || depth <= Limits.maxDepth))
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#define SEARCH_H_INCLUDED
|
#define SEARCH_H_INCLUDED
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <vector>
|
#include <set>
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ struct SignalsType {
|
||||||
|
|
||||||
extern volatile SignalsType Signals;
|
extern volatile SignalsType Signals;
|
||||||
extern LimitsType Limits;
|
extern LimitsType Limits;
|
||||||
extern std::vector<Move> SearchMoves;
|
extern std::set<Move> SearchMoves;
|
||||||
extern Position RootPosition;
|
extern Position RootPosition;
|
||||||
|
|
||||||
extern void init();
|
extern void init();
|
||||||
|
|
|
@ -431,7 +431,7 @@ void Thread::main_loop() {
|
||||||
// the search to finish.
|
// the search to finish.
|
||||||
|
|
||||||
void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limits,
|
void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limits,
|
||||||
const std::vector<Move>& searchMoves, bool asyncMode) {
|
const std::set<Move>& searchMoves, bool asyncMode) {
|
||||||
Thread& main = threads[0];
|
Thread& main = threads[0];
|
||||||
|
|
||||||
lock_grab(&main.sleepLock);
|
lock_grab(&main.sleepLock);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#define THREAD_H_INCLUDED
|
#define THREAD_H_INCLUDED
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
#include "lock.h"
|
#include "lock.h"
|
||||||
#include "material.h"
|
#include "material.h"
|
||||||
|
@ -120,7 +121,7 @@ public:
|
||||||
void wait_for_stop_or_ponderhit();
|
void wait_for_stop_or_ponderhit();
|
||||||
void stop_thinking();
|
void stop_thinking();
|
||||||
void start_thinking(const Position& pos, const Search::LimitsType& limits,
|
void start_thinking(const Position& pos, const Search::LimitsType& limits,
|
||||||
const std::vector<Move>& searchMoves, bool asyncMode);
|
const std::set<Move>& searchMoves, bool asyncMode);
|
||||||
|
|
||||||
template <bool Fake>
|
template <bool Fake>
|
||||||
Value split(Position& pos, Search::Stack* ss, Value alpha, Value beta, Value bestValue,
|
Value split(Position& pos, Search::Stack* ss, Value alpha, Value beta, Value bestValue,
|
||||||
|
|
|
@ -201,7 +201,7 @@ namespace {
|
||||||
|
|
||||||
string token;
|
string token;
|
||||||
Search::LimitsType limits;
|
Search::LimitsType limits;
|
||||||
std::vector<Move> searchMoves;
|
std::set<Move> searchMoves;
|
||||||
int time[] = { 0, 0 }, inc[] = { 0, 0 };
|
int time[] = { 0, 0 }, inc[] = { 0, 0 };
|
||||||
|
|
||||||
while (is >> token)
|
while (is >> token)
|
||||||
|
@ -228,7 +228,7 @@ namespace {
|
||||||
is >> limits.maxTime;
|
is >> limits.maxTime;
|
||||||
else if (token == "searchmoves")
|
else if (token == "searchmoves")
|
||||||
while (is >> token)
|
while (is >> token)
|
||||||
searchMoves.push_back(move_from_uci(pos, token));
|
searchMoves.insert(move_from_uci(pos, token));
|
||||||
}
|
}
|
||||||
|
|
||||||
limits.time = time[pos.side_to_move()];
|
limits.time = time[pos.side_to_move()];
|
||||||
|
|
Loading…
Add table
Reference in a new issue