X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=ca5a107ea2853df9b3648eeb3f4e56bb23c039b6;hp=87c87757bfee7eb912f02d6b5182b4c644dc2fbf;hb=71cc01c2ef45bab91bdcd72c699f66e19dd518b3;hpb=4c57cf0ead29536504ca452b876d350a8e2edbdc diff --git a/src/search.cpp b/src/search.cpp index 87c87757..ca5a107e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -67,7 +67,7 @@ namespace { const int SkipPhase[] = { 0, 1, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6, 7 }; // Razoring and futility margins - const int RazorMargin = 600; + const int RazorMargin = 590; Value futility_margin(Depth d) { return Value(150 * d / ONE_PLY); } // Futility and reductions lookup tables, initialized at startup @@ -667,17 +667,9 @@ namespace { // Step 7. Razoring (skipped when in check) if ( !PvNode - && depth < 4 * ONE_PLY + && depth <= ONE_PLY && eval + RazorMargin <= alpha) - { - if (depth <= ONE_PLY) - return qsearch(pos, ss, alpha, alpha+1); - - Value ralpha = alpha - RazorMargin; - Value v = qsearch(pos, ss, ralpha, ralpha+1); - if (v <= ralpha) - return v; - } + return qsearch(pos, ss, alpha, alpha+1); // Step 8. Futility pruning: child node (skipped when in check) if ( !rootNode @@ -750,7 +742,18 @@ namespace { assert(depth >= 5 * ONE_PLY); pos.do_move(move, st); - value = -search(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false); + + // Perform a preliminary search at depth 1 to verify that the move holds. + // We will only do this search if the depth is not 5, thus avoiding two + // searches at depth 1 in a row. + if (depth != 5 * ONE_PLY) + value = -search(pos, ss+1, -rbeta, -rbeta+1, ONE_PLY, !cutNode, true); + + // If the first search was skipped or was performed and held, perform + // the regular search. + if (depth == 5 * ONE_PLY || value >= rbeta) + value = -search(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false); + pos.undo_move(move); if (value >= rbeta) return value; @@ -766,6 +769,7 @@ namespace { search(pos, ss, alpha, beta, d, cutNode, true); tte = TT.probe(posKey, ttHit); + ttValue = ttHit ? value_from_tt(tte->value(), ss->ply) : VALUE_NONE; ttMove = ttHit ? tte->move() : MOVE_NONE; } @@ -1172,8 +1176,8 @@ moves_loop: // When in check, search starts from here // Transposition table lookup posKey = pos.key(); tte = TT.probe(posKey, ttHit); - ttMove = ttHit ? tte->move() : MOVE_NONE; ttValue = ttHit ? value_from_tt(tte->value(), ss->ply) : VALUE_NONE; + ttMove = ttHit ? tte->move() : MOVE_NONE; if ( !PvNode && ttHit