mirror of
https://github.com/sockspls/badfish
synced 2025-06-28 00:19:50 +00:00
Use NNUE in low piece endgames close to the root.
This patch enforces that NNUE evaluation is used for endgame positions at shallow depth (depth <= 9). Classic evaluation will still be used for high imbalance positions when the depth is high or there are many pieces. Passed STC: https://tests.stockfishchess.org/tests/view/624c193b3a8a6ac93892dc27 LLR: 2.94 (-2.94,2.94) <0.00,2.50> Total: 255840 W: 68024 L: 67362 D: 120454 Ptnml(0-2): 1074, 27089, 70926, 27763, 1068 Passed LTC: https://tests.stockfishchess.org/tests/view/624e8675e9e7821808467f77 LLR: 2.94 (-2.94,2.94) <0.50,3.00> Total: 67088 W: 17784 L: 17454 D: 31850 Ptnml(0-2): 45, 6209, 20715, 6521, 54 closes https://github.com/official-stockfish/Stockfish/pull/3978 bench: 6602222
This commit is contained in:
parent
9f6bcb38c0
commit
19a90b45bc
3 changed files with 5 additions and 2 deletions
|
@ -1088,7 +1088,8 @@ Value Eval::evaluate(const Position& pos) {
|
||||||
// Deciding between classical and NNUE eval (~10 Elo): for high PSQ imbalance we use classical,
|
// Deciding between classical and NNUE eval (~10 Elo): for high PSQ imbalance we use classical,
|
||||||
// but we switch to NNUE during long shuffling or with high material on the board.
|
// but we switch to NNUE during long shuffling or with high material on the board.
|
||||||
if ( !useNNUE
|
if ( !useNNUE
|
||||||
|| abs(eg_value(pos.psq_score())) * 5 > (856 + pos.non_pawn_material() / 64) * (5 + pos.rule50_count()))
|
|| ((pos.this_thread()->depth > 9 || pos.count<ALL_PIECES>() > 7) &&
|
||||||
|
abs(eg_value(pos.psq_score())) * 5 > (856 + pos.non_pawn_material() / 64) * (5 + pos.rule50_count())))
|
||||||
{
|
{
|
||||||
v = Evaluation<NO_TRACE>(pos).value(); // classical
|
v = Evaluation<NO_TRACE>(pos).value(); // classical
|
||||||
useClassical = abs(v) >= 297;
|
useClassical = abs(v) >= 297;
|
||||||
|
@ -1138,6 +1139,7 @@ std::string Eval::trace(Position& pos) {
|
||||||
std::memset(scores, 0, sizeof(scores));
|
std::memset(scores, 0, sizeof(scores));
|
||||||
|
|
||||||
// Reset any global variable used in eval
|
// Reset any global variable used in eval
|
||||||
|
pos.this_thread()->depth = 0;
|
||||||
pos.this_thread()->trend = SCORE_ZERO;
|
pos.this_thread()->trend = SCORE_ZERO;
|
||||||
pos.this_thread()->bestValue = VALUE_ZERO;
|
pos.this_thread()->bestValue = VALUE_ZERO;
|
||||||
pos.this_thread()->optimism[WHITE] = VALUE_ZERO;
|
pos.this_thread()->optimism[WHITE] = VALUE_ZERO;
|
||||||
|
|
|
@ -560,6 +560,7 @@ namespace {
|
||||||
|
|
||||||
// Step 1. Initialize node
|
// Step 1. Initialize node
|
||||||
Thread* thisThread = pos.this_thread();
|
Thread* thisThread = pos.this_thread();
|
||||||
|
thisThread->depth = depth;
|
||||||
ss->inCheck = pos.checkers();
|
ss->inCheck = pos.checkers();
|
||||||
priorCapture = pos.captured_piece();
|
priorCapture = pos.captured_piece();
|
||||||
Color us = pos.side_to_move();
|
Color us = pos.side_to_move();
|
||||||
|
|
|
@ -69,7 +69,7 @@ public:
|
||||||
Position rootPos;
|
Position rootPos;
|
||||||
StateInfo rootState;
|
StateInfo rootState;
|
||||||
Search::RootMoves rootMoves;
|
Search::RootMoves rootMoves;
|
||||||
Depth rootDepth, completedDepth;
|
Depth rootDepth, completedDepth, depth;
|
||||||
Value rootDelta;
|
Value rootDelta;
|
||||||
CounterMoveHistory counterMoves;
|
CounterMoveHistory counterMoves;
|
||||||
ButterflyHistory mainHistory;
|
ButterflyHistory mainHistory;
|
||||||
|
|
Loading…
Add table
Reference in a new issue