X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=4449b1be0e2f4408bcb8b792b776221c4aa81517;hp=e64950283445f001e0e69158684d22f5aee3ac5f;hb=342c8c883c2a3c58d7670600e27baf39f5309438;hpb=2a461b4b745b2542f6e13bab8c60abdb366bc128 diff --git a/src/search.cpp b/src/search.cpp index e6495028..4449b1be 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -201,6 +201,12 @@ namespace { // Depth limit for use of dynamic threat detection Depth ThreatDepth; // heavy SMP read access + // Last seconds noise filtering (LSN) + const bool UseLSNFiltering = true; + const int LSNTime = 4000; // In milliseconds + const Value LSNValue = value_from_centipawns(200); + bool loseOnTime = false; + // Extensions. Array index 0 is used at non-PV nodes, index 1 at PV nodes. // There is heavy SMP read access on these arrays Depth CheckExtension[2], SingleReplyExtension[2], PawnPushTo7thExtension[2]; @@ -367,7 +373,10 @@ bool think(const Position& pos, bool infinite, bool ponder, int side_to_move, // Read UCI option values TT.set_size(get_option_value_int("Hash")); if (button_was_pressed("Clear Hash")) + { TT.clear(); + loseOnTime = false; // reset at the beginning of a new game + } bool PonderingEnabled = get_option_value_bool("Ponder"); MultiPV = get_option_value_int("MultiPV"); @@ -400,10 +409,6 @@ bool think(const Position& pos, bool infinite, bool ponder, int side_to_move, if (UseLogFile) LogFile.open(get_option_value_string("Search Log Filename").c_str(), std::ios::out | std::ios::app); - bool UseLSNFiltering = get_option_value_bool("LSN filtering"); - int LSNTime = get_option_value_int("LSN Time Margin (sec)") * 1000; - Value LSNValue = value_from_centipawns(get_option_value_int("LSN Value Margin")); - MinimumSplitDepth = get_option_value_int("Minimum Split Depth") * OnePly; MaxThreadsPerSplitPoint = get_option_value_int("Maximum Number of Threads per Split Point"); @@ -481,20 +486,19 @@ bool think(const Position& pos, bool infinite, bool ponder, int side_to_move, // We're ready to start thinking. Call the iterative deepening loop function - static bool looseOnTime = false; - + // // FIXME we really need to cleanup all this LSN ugliness - if (!looseOnTime) + if (!loseOnTime) { Value v = id_loop(pos, searchMoves); - looseOnTime = ( UseLSNFiltering + loseOnTime = ( UseLSNFiltering && myTime < LSNTime && myIncrement == 0 && v < -LSNValue); } else { - looseOnTime = false; // reset for next match + loseOnTime = false; // reset for next match while (SearchStartTime + myTime + 1000 > get_system_time()) ; // wait here id_loop(pos, searchMoves); // to fail gracefully @@ -1488,7 +1492,6 @@ namespace { else if (tte && tte->type() == VALUE_TYPE_EVAL) { // Use the cached evaluation score if possible - assert(tte->value() == evaluate(pos, ei, threadID)); assert(ei.futilityMargin == Value(0)); staticValue = tte->value();