X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fsearch.cpp;h=ec443bef92d090b9b92176a4b15fccdd0ababd7d;hb=cf5d683408a2ef8a1c80be9bf7d6790a38b16277;hp=c78a71a96e3c258d6e749b973d878d0a890e0546;hpb=738a6dfd4c71c3ce11d614076117793b4cdf119e;p=stockfish diff --git a/src/search.cpp b/src/search.cpp index c78a71a9..ec443bef 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2,7 +2,7 @@ Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad - Copyright (C) 2015-2018 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad + Copyright (C) 2015-2019 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -187,6 +187,7 @@ void Search::clear() { Time.availableNodes = 0; TT.clear(); Threads.clear(); + Tablebases::init(Options["SyzygyPath"]); // Free up mapped files } @@ -387,7 +388,7 @@ void Thread::search() { if (rootDepth >= 5 * ONE_PLY) { Value previousScore = rootMoves[pvIdx].previousScore; - delta = Value(18); + delta = Value(20); alpha = std::max(previousScore - delta,-VALUE_INFINITE); beta = std::min(previousScore + delta, VALUE_INFINITE); @@ -401,9 +402,11 @@ void Thread::search() { // Start with a small aspiration window and, in the case of a fail // high/low, re-search with a bigger window until we don't fail // high/low anymore. + int failedHighCnt = 0; while (true) { - bestValue = ::search(rootPos, ss, alpha, beta, rootDepth, false); + Depth adjustedDepth = std::max(ONE_PLY, rootDepth - failedHighCnt * ONE_PLY); + bestValue = ::search(rootPos, ss, alpha, beta, adjustedDepth, false); // Bring the best move to the front. It is critical that sorting // is done with a stable algorithm because all the values but the @@ -436,12 +439,17 @@ void Thread::search() { if (mainThread) { + failedHighCnt = 0; failedLow = true; Threads.stopOnPonderhit = false; } } else if (bestValue >= beta) + { beta = std::min(bestValue + delta, VALUE_INFINITE); + if (mainThread) + ++failedHighCnt; + } else break; @@ -936,6 +944,10 @@ moves_loop: // When in check, search starts from here && pos.see_ge(move)) extension = ONE_PLY; + else if ( pos.can_castle(us) // Extension for king moves that change castling rights + && type_of(movedPiece) == KING) + extension = ONE_PLY; + // Calculate new depth for this move newDepth = depth - ONE_PLY + extension; @@ -1132,8 +1144,6 @@ moves_loop: // When in check, search starts from here break; } } - else if (PvNode && !rootNode && value == alpha) - update_pv(ss->pv, move, (ss+1)->pv); } if (move != bestMove)