mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33:09 +00:00
Remove razoring
has become ineffective now. STC https://tests.stockfishchess.org/tests/view/5fe653403932f79192d3981a LLR: 2.95 (-2.94,2.94) {-1.25,0.25} Total: 63448 W: 5965 L: 5934 D: 51549 Ptnml(0-2): 230, 4738, 21769, 4745, 242 LTC https://tests.stockfishchess.org/tests/view/5fe6f0f03932f79192d39856 LLR: 2.93 (-2.94,2.94) {-0.75,0.25} Total: 65368 W: 2485 L: 2459 D: 60424 Ptnml(0-2): 33, 2186, 28230, 2192, 43 closes https://github.com/official-stockfish/Stockfish/pull/3278 bench: 4493379
This commit is contained in:
parent
8985c210a1
commit
8ec97d161e
1 changed files with 14 additions and 21 deletions
|
@ -62,8 +62,7 @@ namespace {
|
|||
constexpr uint64_t TtHitAverageWindow = 4096;
|
||||
constexpr uint64_t TtHitAverageResolution = 1024;
|
||||
|
||||
// Razor and futility margins
|
||||
constexpr int RazorMargin = 510;
|
||||
// Futility margin
|
||||
Value futility_margin(Depth d, bool improving) {
|
||||
return Value(234 * (d - improving));
|
||||
}
|
||||
|
@ -822,12 +821,6 @@ namespace {
|
|||
thisThread->mainHistory[~us][from_to((ss-1)->currentMove)] << bonus;
|
||||
}
|
||||
|
||||
// Step 7. Razoring (~1 Elo)
|
||||
if ( !rootNode // The required rootNode PV handling is not available in qsearch
|
||||
&& depth == 1
|
||||
&& eval <= alpha - RazorMargin)
|
||||
return qsearch<NT>(pos, ss, alpha, beta);
|
||||
|
||||
// Set up improving flag that is used in various pruning heuristics
|
||||
// We define position as improving if static evaluation of position is better
|
||||
// Than the previous static evaluation at our turn
|
||||
|
@ -836,14 +829,14 @@ namespace {
|
|||
? ss->staticEval > (ss-4)->staticEval || (ss-4)->staticEval == VALUE_NONE
|
||||
: ss->staticEval > (ss-2)->staticEval;
|
||||
|
||||
// Step 8. Futility pruning: child node (~50 Elo)
|
||||
// Step 7. Futility pruning: child node (~50 Elo)
|
||||
if ( !PvNode
|
||||
&& depth < 9
|
||||
&& eval - futility_margin(depth, improving) >= beta
|
||||
&& eval < VALUE_KNOWN_WIN) // Do not return unproven wins
|
||||
return eval;
|
||||
|
||||
// Step 9. Null move search with verification search (~40 Elo)
|
||||
// Step 8. Null move search with verification search (~40 Elo)
|
||||
if ( !PvNode
|
||||
&& (ss-1)->currentMove != MOVE_NULL
|
||||
&& (ss-1)->statScore < 22977
|
||||
|
@ -895,7 +888,7 @@ namespace {
|
|||
|
||||
probCutBeta = beta + 194 - 49 * improving;
|
||||
|
||||
// Step 10. ProbCut (~10 Elo)
|
||||
// Step 9. ProbCut (~10 Elo)
|
||||
// If we have a good enough capture and a reduced search returns a value
|
||||
// much above beta, we can (almost) safely prune the previous move.
|
||||
if ( !PvNode
|
||||
|
@ -968,7 +961,7 @@ namespace {
|
|||
ss->ttPv = ttPv;
|
||||
}
|
||||
|
||||
// Step 11. If the position is not in TT, decrease depth by 2
|
||||
// Step 10. If the position is not in TT, decrease depth by 2
|
||||
if ( PvNode
|
||||
&& depth >= 6
|
||||
&& !ttMove)
|
||||
|
@ -997,7 +990,7 @@ moves_loop: // When in check, search starts from here
|
|||
// Mark this node as being searched
|
||||
ThreadHolding th(thisThread, posKey, ss->ply);
|
||||
|
||||
// Step 12. Loop through all pseudo-legal moves until no moves remain
|
||||
// Step 11. Loop through all pseudo-legal moves until no moves remain
|
||||
// or a beta cutoff occurs.
|
||||
while ((move = mp.next_move(moveCountPruning)) != MOVE_NONE)
|
||||
{
|
||||
|
@ -1035,7 +1028,7 @@ moves_loop: // When in check, search starts from here
|
|||
// Calculate new depth for this move
|
||||
newDepth = depth - 1;
|
||||
|
||||
// Step 13. Pruning at shallow depth (~200 Elo)
|
||||
// Step 12. Pruning at shallow depth (~200 Elo)
|
||||
if ( !rootNode
|
||||
&& pos.non_pawn_material(us)
|
||||
&& bestValue > VALUE_TB_LOSS_IN_MAX_PLY)
|
||||
|
@ -1083,7 +1076,7 @@ moves_loop: // When in check, search starts from here
|
|||
}
|
||||
}
|
||||
|
||||
// Step 14. Extensions (~75 Elo)
|
||||
// Step 13. Extensions (~75 Elo)
|
||||
|
||||
// Singular extension search (~70 Elo). If all moves but one fail low on a
|
||||
// search of (alpha-s, beta-s), and just one fails high on (alpha, beta),
|
||||
|
@ -1155,10 +1148,10 @@ moves_loop: // When in check, search starts from here
|
|||
[movedPiece]
|
||||
[to_sq(move)];
|
||||
|
||||
// Step 15. Make the move
|
||||
// Step 14. Make the move
|
||||
pos.do_move(move, st, givesCheck);
|
||||
|
||||
// Step 16. Reduced depth search (LMR, ~200 Elo). If the move fails high it will be
|
||||
// Step 15. Reduced depth search (LMR, ~200 Elo). If the move fails high it will be
|
||||
// re-searched at full depth.
|
||||
if ( depth >= 3
|
||||
&& moveCount > 1 + 2 * rootNode
|
||||
|
@ -1258,7 +1251,7 @@ moves_loop: // When in check, search starts from here
|
|||
didLMR = false;
|
||||
}
|
||||
|
||||
// Step 17. Full depth search when LMR is skipped or fails high
|
||||
// Step 16. Full depth search when LMR is skipped or fails high
|
||||
if (doFullDepthSearch)
|
||||
{
|
||||
value = -search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode);
|
||||
|
@ -1285,12 +1278,12 @@ moves_loop: // When in check, search starts from here
|
|||
std::min(maxNextDepth, newDepth), false);
|
||||
}
|
||||
|
||||
// Step 18. Undo move
|
||||
// Step 17. Undo move
|
||||
pos.undo_move(move);
|
||||
|
||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||
|
||||
// Step 19. Check for a new best move
|
||||
// Step 18. Check for a new best move
|
||||
// Finished searching the move. If a stop occurred, the return value of
|
||||
// the search cannot be trusted, and we return immediately without
|
||||
// updating best move, PV and TT.
|
||||
|
@ -1367,7 +1360,7 @@ moves_loop: // When in check, search starts from here
|
|||
return VALUE_DRAW;
|
||||
*/
|
||||
|
||||
// Step 20. Check for mate and stalemate
|
||||
// Step 19. Check for mate and stalemate
|
||||
// All legal moves have been searched and if there are no legal moves, it
|
||||
// must be a mate or a stalemate. If we are in a singular extension search then
|
||||
// return a fail low score.
|
||||
|
|
Loading…
Add table
Reference in a new issue