mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Assorted cleanups
Assorted cleanups closes https://github.com/official-stockfish/Stockfish/pull/5046 No functional change Co-Authored-By: Shahin M. Shahin <41402573+peregrineshahin@users.noreply.github.com> Co-Authored-By: cj5716 <125858804+cj5716@users.noreply.github.com>
This commit is contained in:
parent
3d5b16df7c
commit
9068fdc57b
6 changed files with 25 additions and 39 deletions
|
@ -163,7 +163,6 @@ inline Bitboard pawn_attacks_bb(Color c, Square s) {
|
||||||
inline Bitboard line_bb(Square s1, Square s2) {
|
inline Bitboard line_bb(Square s1, Square s2) {
|
||||||
|
|
||||||
assert(is_ok(s1) && is_ok(s2));
|
assert(is_ok(s1) && is_ok(s2));
|
||||||
|
|
||||||
return LineBB[s1][s2];
|
return LineBB[s1][s2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +177,6 @@ inline Bitboard line_bb(Square s1, Square s2) {
|
||||||
inline Bitboard between_bb(Square s1, Square s2) {
|
inline Bitboard between_bb(Square s1, Square s2) {
|
||||||
|
|
||||||
assert(is_ok(s1) && is_ok(s2));
|
assert(is_ok(s1) && is_ok(s2));
|
||||||
|
|
||||||
return BetweenBB[s1][s2];
|
return BetweenBB[s1][s2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +214,6 @@ template<PieceType Pt>
|
||||||
inline Bitboard attacks_bb(Square s) {
|
inline Bitboard attacks_bb(Square s) {
|
||||||
|
|
||||||
assert((Pt != PAWN) && (is_ok(s)));
|
assert((Pt != PAWN) && (is_ok(s)));
|
||||||
|
|
||||||
return PseudoAttacks[Pt][s];
|
return PseudoAttacks[Pt][s];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,7 @@ Value Eval::evaluate(const Position& pos, int optimism) {
|
||||||
v = v * (200 - shuffling) / 214;
|
v = v * (200 - shuffling) / 214;
|
||||||
|
|
||||||
// Guarantee evaluation does not hit the tablebase range
|
// Guarantee evaluation does not hit the tablebase range
|
||||||
v = std::clamp(int(v), VALUE_TB_LOSS_IN_MAX_PLY + 1, VALUE_TB_WIN_IN_MAX_PLY - 1);
|
v = std::clamp(v, VALUE_TB_LOSS_IN_MAX_PLY + 1, VALUE_TB_WIN_IN_MAX_PLY - 1);
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,7 +173,7 @@ void MovePicker::score() {
|
||||||
else if constexpr (Type == QUIETS)
|
else if constexpr (Type == QUIETS)
|
||||||
{
|
{
|
||||||
Piece pc = pos.moved_piece(m);
|
Piece pc = pos.moved_piece(m);
|
||||||
PieceType pt = type_of(pos.moved_piece(m));
|
PieceType pt = type_of(pc);
|
||||||
Square from = m.from_sq();
|
Square from = m.from_sq();
|
||||||
Square to = m.to_sq();
|
Square to = m.to_sq();
|
||||||
|
|
||||||
|
|
|
@ -252,13 +252,11 @@ inline CastlingRights Position::castling_rights(Color c) const {
|
||||||
|
|
||||||
inline bool Position::castling_impeded(CastlingRights cr) const {
|
inline bool Position::castling_impeded(CastlingRights cr) const {
|
||||||
assert(cr == WHITE_OO || cr == WHITE_OOO || cr == BLACK_OO || cr == BLACK_OOO);
|
assert(cr == WHITE_OO || cr == WHITE_OOO || cr == BLACK_OO || cr == BLACK_OOO);
|
||||||
|
|
||||||
return pieces() & castlingPath[cr];
|
return pieces() & castlingPath[cr];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Square Position::castling_rook_square(CastlingRights cr) const {
|
inline Square Position::castling_rook_square(CastlingRights cr) const {
|
||||||
assert(cr == WHITE_OO || cr == WHITE_OOO || cr == BLACK_OO || cr == BLACK_OOO);
|
assert(cr == WHITE_OO || cr == WHITE_OOO || cr == BLACK_OO || cr == BLACK_OOO);
|
||||||
|
|
||||||
return castlingRookSquare[cr];
|
return castlingRookSquare[cr];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ constexpr int futility_move_count(bool improving, Depth depth) {
|
||||||
Value to_corrected_static_eval(Value v, const Worker& w, const Position& pos) {
|
Value to_corrected_static_eval(Value v, const Worker& w, const Position& pos) {
|
||||||
auto cv = w.correctionHistory[pos.side_to_move()][pawn_structure_index<Correction>(pos)];
|
auto cv = w.correctionHistory[pos.side_to_move()][pawn_structure_index<Correction>(pos)];
|
||||||
v += cv * std::abs(cv) / 12890;
|
v += cv * std::abs(cv) / 12890;
|
||||||
return std::clamp(int(v), VALUE_TB_LOSS_IN_MAX_PLY + 1, VALUE_TB_WIN_IN_MAX_PLY - 1);
|
return std::clamp(v, VALUE_TB_LOSS_IN_MAX_PLY + 1, VALUE_TB_WIN_IN_MAX_PLY - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// History and stats update bonus, based on depth
|
// History and stats update bonus, based on depth
|
||||||
|
@ -297,9 +297,9 @@ void Search::Worker::iterative_deepening() {
|
||||||
|
|
||||||
// Reset aspiration window starting size
|
// Reset aspiration window starting size
|
||||||
Value avg = rootMoves[pvIdx].averageScore;
|
Value avg = rootMoves[pvIdx].averageScore;
|
||||||
delta = Value(9) + int(avg) * avg / 12480;
|
delta = 9 + avg * avg / 12480;
|
||||||
alpha = std::max(avg - delta, -VALUE_INFINITE);
|
alpha = std::max(avg - delta, -VALUE_INFINITE);
|
||||||
beta = std::min(avg + delta, int(VALUE_INFINITE));
|
beta = std::min(avg + delta, VALUE_INFINITE);
|
||||||
|
|
||||||
// Adjust optimism based on root move's averageScore (~4 Elo)
|
// Adjust optimism based on root move's averageScore (~4 Elo)
|
||||||
optimism[us] = 131 * avg / (std::abs(avg) + 95);
|
optimism[us] = 131 * avg / (std::abs(avg) + 95);
|
||||||
|
@ -350,7 +350,7 @@ void Search::Worker::iterative_deepening() {
|
||||||
}
|
}
|
||||||
else if (bestValue >= beta)
|
else if (bestValue >= beta)
|
||||||
{
|
{
|
||||||
beta = std::min(bestValue + delta, int(VALUE_INFINITE));
|
beta = std::min(bestValue + delta, VALUE_INFINITE);
|
||||||
++failedHighCnt;
|
++failedHighCnt;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -481,7 +481,6 @@ void Search::Worker::clear() {
|
||||||
for (auto& h : to)
|
for (auto& h : to)
|
||||||
h->fill(-71);
|
h->fill(-71);
|
||||||
|
|
||||||
|
|
||||||
for (size_t i = 1; i < reductions.size(); ++i)
|
for (size_t i = 1; i < reductions.size(); ++i)
|
||||||
reductions[i] = int((20.37 + std::log(size_t(options["Threads"])) / 2) * std::log(i));
|
reductions[i] = int((20.37 + std::log(size_t(options["Threads"])) / 2) * std::log(i));
|
||||||
}
|
}
|
||||||
|
@ -538,7 +537,7 @@ Value Search::Worker::search(
|
||||||
|
|
||||||
// Check for the available remaining time
|
// Check for the available remaining time
|
||||||
if (is_mainthread())
|
if (is_mainthread())
|
||||||
main_manager()->check_time(*this);
|
main_manager()->check_time(*thisThread);
|
||||||
|
|
||||||
// Used to send selDepth info to GUI (selDepth counts from 1, ply from 0)
|
// Used to send selDepth info to GUI (selDepth counts from 1, ply from 0)
|
||||||
if (PvNode && thisThread->selDepth < ss->ply + 1)
|
if (PvNode && thisThread->selDepth < ss->ply + 1)
|
||||||
|
@ -680,10 +679,8 @@ Value Search::Worker::search(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Value unadjustedStaticEval = VALUE_NONE;
|
|
||||||
|
|
||||||
// Step 6. Static evaluation of the position
|
// Step 6. Static evaluation of the position
|
||||||
|
Value unadjustedStaticEval = VALUE_NONE;
|
||||||
if (ss->inCheck)
|
if (ss->inCheck)
|
||||||
{
|
{
|
||||||
// Skip early pruning when in check
|
// Skip early pruning when in check
|
||||||
|
@ -820,11 +817,10 @@ Value Search::Worker::search(
|
||||||
if (cutNode && depth >= 8 && !ttMove)
|
if (cutNode && depth >= 8 && !ttMove)
|
||||||
depth -= 2;
|
depth -= 2;
|
||||||
|
|
||||||
probCutBeta = beta + 182 - 68 * improving;
|
|
||||||
|
|
||||||
// Step 11. ProbCut (~10 Elo)
|
// Step 11. ProbCut (~10 Elo)
|
||||||
// If we have a good enough capture (or queen promotion) and a reduced search returns a value
|
// If we have a good enough capture (or queen promotion) and a reduced search returns a value
|
||||||
// much above beta, we can (almost) safely prune the previous move.
|
// much above beta, we can (almost) safely prune the previous move.
|
||||||
|
probCutBeta = beta + 182 - 68 * improving;
|
||||||
if (
|
if (
|
||||||
!PvNode && depth > 3
|
!PvNode && depth > 3
|
||||||
&& std::abs(beta) < VALUE_TB_WIN_IN_MAX_PLY
|
&& std::abs(beta) < VALUE_TB_WIN_IN_MAX_PLY
|
||||||
|
@ -1285,7 +1281,6 @@ moves_loop: // When in check, search starts here
|
||||||
{
|
{
|
||||||
if (capture)
|
if (capture)
|
||||||
capturesSearched[captureCount++] = move;
|
capturesSearched[captureCount++] = move;
|
||||||
|
|
||||||
else
|
else
|
||||||
quietsSearched[quietCount++] = move;
|
quietsSearched[quietCount++] = move;
|
||||||
}
|
}
|
||||||
|
@ -1424,9 +1419,8 @@ Value Search::Worker::qsearch(Position& pos, Stack* ss, Value alpha, Value beta,
|
||||||
&& (tte->bound() & (ttValue >= beta ? BOUND_LOWER : BOUND_UPPER)))
|
&& (tte->bound() & (ttValue >= beta ? BOUND_LOWER : BOUND_UPPER)))
|
||||||
return ttValue;
|
return ttValue;
|
||||||
|
|
||||||
Value unadjustedStaticEval = VALUE_NONE;
|
|
||||||
|
|
||||||
// Step 4. Static evaluation of the position
|
// Step 4. Static evaluation of the position
|
||||||
|
Value unadjustedStaticEval = VALUE_NONE;
|
||||||
if (ss->inCheck)
|
if (ss->inCheck)
|
||||||
bestValue = futilityBase = -VALUE_INFINITE;
|
bestValue = futilityBase = -VALUE_INFINITE;
|
||||||
else
|
else
|
||||||
|
@ -1521,7 +1515,7 @@ Value Search::Worker::qsearch(Position& pos, Stack* ss, Value alpha, Value beta,
|
||||||
|
|
||||||
// If static eval is much lower than alpha and move is not winning material
|
// If static eval is much lower than alpha and move is not winning material
|
||||||
// we can prune this move. (~2 Elo)
|
// we can prune this move. (~2 Elo)
|
||||||
if (futilityBase <= alpha && !pos.see_ge(move, VALUE_ZERO + 1))
|
if (futilityBase <= alpha && !pos.see_ge(move, 1))
|
||||||
{
|
{
|
||||||
bestValue = std::max(bestValue, futilityBase);
|
bestValue = std::max(bestValue, futilityBase);
|
||||||
continue;
|
continue;
|
||||||
|
@ -1597,7 +1591,6 @@ Value Search::Worker::qsearch(Position& pos, Stack* ss, Value alpha, Value beta,
|
||||||
if (ss->inCheck && bestValue == -VALUE_INFINITE)
|
if (ss->inCheck && bestValue == -VALUE_INFINITE)
|
||||||
{
|
{
|
||||||
assert(!MoveList<LEGAL>(pos).size());
|
assert(!MoveList<LEGAL>(pos).size());
|
||||||
|
|
||||||
return mated_in(ss->ply); // Plies to mate from the root
|
return mated_in(ss->ply); // Plies to mate from the root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1615,6 +1608,10 @@ Value Search::Worker::qsearch(Position& pos, Stack* ss, Value alpha, Value beta,
|
||||||
return bestValue;
|
return bestValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Depth Search::Worker::reduction(bool i, Depth d, int mn, int delta) {
|
||||||
|
int reductionScale = reductions[d] * reductions[mn];
|
||||||
|
return (reductionScale + 1177 - delta * 776 / rootDelta) / 1024 + (!i && reductionScale > 842);
|
||||||
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
// Adjusts a mate or TB score from "plies to mate from the root"
|
// Adjusts a mate or TB score from "plies to mate from the root"
|
||||||
|
@ -1623,7 +1620,6 @@ namespace {
|
||||||
Value value_to_tt(Value v, int ply) {
|
Value value_to_tt(Value v, int ply) {
|
||||||
|
|
||||||
assert(v != VALUE_NONE);
|
assert(v != VALUE_NONE);
|
||||||
|
|
||||||
return v >= VALUE_TB_WIN_IN_MAX_PLY ? v + ply : v <= VALUE_TB_LOSS_IN_MAX_PLY ? v - ply : v;
|
return v >= VALUE_TB_WIN_IN_MAX_PLY ? v + ply : v <= VALUE_TB_LOSS_IN_MAX_PLY ? v - ply : v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1805,9 +1801,9 @@ Move Skill::pick_best(const RootMoves& rootMoves, size_t multiPV) {
|
||||||
for (size_t i = 0; i < multiPV; ++i)
|
for (size_t i = 0; i < multiPV; ++i)
|
||||||
{
|
{
|
||||||
// This is our magic formula
|
// This is our magic formula
|
||||||
int push = int((weakness * int(topScore - rootMoves[i].score)
|
int push = (weakness * int(topScore - rootMoves[i].score)
|
||||||
+ delta * (rng.rand<unsigned>() % int(weakness)))
|
+ delta * (rng.rand<unsigned>() % int(weakness)))
|
||||||
/ 128);
|
/ 128;
|
||||||
|
|
||||||
if (rootMoves[i].score + push >= maxScore)
|
if (rootMoves[i].score + push >= maxScore)
|
||||||
{
|
{
|
||||||
|
@ -1921,7 +1917,6 @@ bool RootMove::extract_ponder_from_tt(const TranspositionTable& tt, Position& po
|
||||||
bool ttHit;
|
bool ttHit;
|
||||||
|
|
||||||
assert(pv.size() == 1);
|
assert(pv.size() == 1);
|
||||||
|
|
||||||
if (pv[0] == Move::none())
|
if (pv[0] == Move::none())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
18
src/search.h
18
src/search.h
|
@ -47,7 +47,6 @@ enum NodeType {
|
||||||
class TranspositionTable;
|
class TranspositionTable;
|
||||||
class ThreadPool;
|
class ThreadPool;
|
||||||
class OptionsMap;
|
class OptionsMap;
|
||||||
class UCI;
|
|
||||||
|
|
||||||
namespace Search {
|
namespace Search {
|
||||||
|
|
||||||
|
@ -124,10 +123,12 @@ struct LimitsType {
|
||||||
// The UCI stores the uci options, thread pool, and transposition table.
|
// The UCI stores the uci options, thread pool, and transposition table.
|
||||||
// This struct is used to easily forward data to the Search::Worker class.
|
// This struct is used to easily forward data to the Search::Worker class.
|
||||||
struct SharedState {
|
struct SharedState {
|
||||||
SharedState(const OptionsMap& o, ThreadPool& tp, TranspositionTable& t) :
|
SharedState(const OptionsMap& optionsMap,
|
||||||
options(o),
|
ThreadPool& threadPool,
|
||||||
threads(tp),
|
TranspositionTable& transpositionTable) :
|
||||||
tt(t) {}
|
options(optionsMap),
|
||||||
|
threads(threadPool),
|
||||||
|
tt(transpositionTable) {}
|
||||||
|
|
||||||
const OptionsMap& options;
|
const OptionsMap& options;
|
||||||
ThreadPool& threads;
|
ThreadPool& threads;
|
||||||
|
@ -209,11 +210,7 @@ class Worker {
|
||||||
template<NodeType nodeType>
|
template<NodeType nodeType>
|
||||||
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth = 0);
|
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth = 0);
|
||||||
|
|
||||||
Depth reduction(bool i, Depth d, int mn, int delta) {
|
Depth reduction(bool i, Depth d, int mn, int delta);
|
||||||
int reductionScale = reductions[d] * reductions[mn];
|
|
||||||
return (reductionScale + 1177 - int(delta) * 776 / int(rootDelta)) / 1024
|
|
||||||
+ (!i && reductionScale > 842);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get a pointer to the search manager, only allowed to be called by the
|
// Get a pointer to the search manager, only allowed to be called by the
|
||||||
// main thread.
|
// main thread.
|
||||||
|
@ -251,7 +248,6 @@ class Worker {
|
||||||
TranspositionTable& tt;
|
TranspositionTable& tt;
|
||||||
|
|
||||||
friend class Stockfish::ThreadPool;
|
friend class Stockfish::ThreadPool;
|
||||||
friend class Stockfish::UCI;
|
|
||||||
friend class SearchManager;
|
friend class SearchManager;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue