X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fsearch.cpp;h=cff8e768a73693ec3ec29046165602aac7fd404c;hb=a24da071f0d6128c633febab7df55f14475217c3;hp=ab88142ff8fe305de9a23889afc0b772ad777efa;hpb=45dba12c5b236dd4f6d750b9793b192eaa5e6699;p=stockfish diff --git a/src/search.cpp b/src/search.cpp index ab88142f..cff8e768 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -44,7 +44,6 @@ namespace Search { Color RootColor; Time::point SearchTime; StateStackPtr SetupStates; - MovesVectPtr SetupMoves; } using std::string; @@ -294,6 +293,7 @@ namespace { Stack ss[MAX_PLY_PLUS_2]; int depth, prevBestMoveChanges; Value bestValue, alpha, beta, delta; + bool triedEasyMove = false; memset(ss, 0, 4 * sizeof(Stack)); depth = BestMoveChanges = 0; @@ -440,10 +440,12 @@ namespace { // Stop search early if one move seems to be much better than others if ( depth >= 12 && !stop + && !triedEasyMove && PVSize == 1 && ( RootMoves.size() == 1 || Time::now() - SearchTime > (TimeMgr.available_time() * 20) / 100)) { + triedEasyMove = true; Value rBeta = bestValue - 2 * PawnValueMg; (ss+1)->excludedMove = RootMoves[0].pv[0]; (ss+1)->skipNullMove = true; @@ -853,14 +855,14 @@ split_point_start: // At split points actual search starts from here newDepth = depth - ONE_PLY + ext; // Step 13. Futility pruning (is omitted in PV nodes) - if ( !captureOrPromotion + if ( !PvNode + && !captureOrPromotion && !inCheck && !dangerous && move != ttMove) { // Move count based pruning - if ( !PvNode - && depth < 16 * ONE_PLY + if ( depth < 16 * ONE_PLY && moveCount >= FutilityMoveCounts[depth] && (!threatMove || !refutes(pos, move, threatMove))) { @@ -877,7 +879,7 @@ split_point_start: // At split points actual search starts from here futilityValue = ss->staticEval + ss->evalMargin + futility_margin(predictedDepth, moveCount) + Gain[pos.piece_moved(move)][to_sq(move)]; - if (!PvNode && futilityValue < beta) + if (futilityValue < beta) { if (SpNode) splitPoint->mutex.lock(); @@ -886,7 +888,7 @@ split_point_start: // At split points actual search starts from here } // Prune moves with negative SEE at low depths - if ( predictedDepth < 2 * ONE_PLY + if ( predictedDepth < 3 * ONE_PLY && pos.see_sign(move) < 0) { if (SpNode)