X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fsearch.cpp;h=ec443bef92d090b9b92176a4b15fccdd0ababd7d;hb=cf5d683408a2ef8a1c80be9bf7d6790a38b16277;hp=2678f7d5d9bae66685e3a108ec1868bdfde5d014;hpb=4a0db9ea3c34d7663a039c40ce810ba9cb743cca;p=stockfish diff --git a/src/search.cpp b/src/search.cpp index 2678f7d5..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 } @@ -368,7 +369,6 @@ void Thread::search() { size_t pvFirst = 0; pvLast = 0; - Depth adjustedDepth = rootDepth; // MultiPV loop. We perform a full root search for each PV line for (pvIdx = 0; pvIdx < multiPV && !Threads.stop; ++pvIdx) @@ -405,7 +405,7 @@ void Thread::search() { int failedHighCnt = 0; while (true) { - adjustedDepth = std::max(ONE_PLY, rootDepth - failedHighCnt * ONE_PLY); + 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 @@ -428,7 +428,7 @@ void Thread::search() { && multiPV == 1 && (bestValue <= alpha || bestValue >= beta) && Time.elapsed() > 3000) - sync_cout << UCI::pv(rootPos, adjustedDepth, alpha, beta) << sync_endl; + sync_cout << UCI::pv(rootPos, rootDepth, alpha, beta) << sync_endl; // In case of failing low/high increase aspiration window and // re-search, otherwise exit the loop. @@ -463,15 +463,15 @@ void Thread::search() { if ( mainThread && (Threads.stop || pvIdx + 1 == multiPV || Time.elapsed() > 3000)) - sync_cout << UCI::pv(rootPos, adjustedDepth, alpha, beta) << sync_endl; + sync_cout << UCI::pv(rootPos, rootDepth, alpha, beta) << sync_endl; } if (!Threads.stop) - completedDepth = adjustedDepth; + completedDepth = rootDepth; if (rootMoves[0].pv[0] != lastBestMove) { lastBestMove = rootMoves[0].pv[0]; - lastBestMoveDepth = adjustedDepth; + lastBestMoveDepth = rootDepth; } // Have we found a "mate in x"? @@ -944,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;