X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=28049e87dcd8dd49a4f21242c88bf8ffa1d9a1bd;hp=ac6b8608848afdf17aecd894236fbf79fc5d03d7;hb=673841301b0cc6ed78c4db3e6ec2a0b9a010c8cb;hpb=f21a66f70dce4e9d72031a13d25ac530bbafc830 diff --git a/src/search.cpp b/src/search.cpp index ac6b8608..28049e87 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -591,13 +591,13 @@ namespace { bool captureOrPromotion, doFullDepthSearch, moveCountPruning, ttCapture, singularQuietLMR, noLMRExtension; Piece movedPiece; - int moveCount, captureCount, quietCount; + int moveCount, captureCount, quietCount, bestMoveCount; // Step 1. Initialize node ss->inCheck = pos.checkers(); priorCapture = pos.captured_piece(); Color us = pos.side_to_move(); - moveCount = captureCount = quietCount = ss->moveCount = 0; + moveCount = bestMoveCount = captureCount = quietCount = ss->moveCount = 0; bestValue = -VALUE_INFINITE; maxValue = VALUE_INFINITE; @@ -1123,18 +1123,9 @@ moves_loop: // When in check, search starts here else if (singularBeta >= beta) return singularBeta; - // If the eval of ttMove is greater than beta we try also if there is another - // move that pushes it over beta, if so the position also has probably multiple - // moves giving fail highs. We will then reduce the ttMove (negative extension). + // If the eval of ttMove is greater than beta, we reduce it (negative extension) else if (ttValue >= beta) - { - ss->excludedMove = move; - value = search(pos, ss, beta - 1, beta, (depth + 3) / 2, cutNode); - ss->excludedMove = MOVE_NONE; - - if (value >= beta) - extension = -2; - } + extension = -2; } // Capture extensions for PvNodes and cutNodes @@ -1186,8 +1177,9 @@ moves_loop: // When in check, search starts here { Depth r = reduction(improving, depth, moveCount, rangeReduction > 2); - // Decrease reduction if on the PV (~1 Elo) - if (PvNode) + // Decrease reduction if on the PV (~2 Elo) + if ( PvNode + && bestMoveCount <= 3) r--; // Decrease reduction if the ttHit running average is large (~0 Elo) @@ -1340,7 +1332,10 @@ moves_loop: // When in check, search starts here update_pv(ss->pv, move, (ss+1)->pv); if (PvNode && value < beta) // Update alpha! Always alpha < beta + { alpha = value; + bestMoveCount++; + } else { assert(value >= beta); // Fail high