X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=c692baf5a72e3db774b2e728f25e1c91e93b3b31;hp=f3e9c15d58776c8b79ae5e1565469763ab3bfd50;hb=3a558a3d8b1400e0bafe0ba5c368c65542462a36;hpb=34c7f1387d514176996144020ac6ac0c603fca4b diff --git a/src/search.cpp b/src/search.cpp index f3e9c15d..c692baf5 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -162,7 +162,10 @@ namespace { // Step 6. Razoring + // Maximum depth for razoring const Depth RazorDepth = 4 * OnePly; + + // Dynamic razoring margin based on depth inline Value razor_margin(Depth d) { return Value(0x200 + 0x10 * d); } // Step 8. Null move search with verification search @@ -171,8 +174,12 @@ namespace { // evaluation of the position is more than NullMoveMargin below beta. const Value NullMoveMargin = Value(0x200); + // Maximum depth for use of dynamic threat detection when null move fails low + const Depth ThreatDepth = 5 * OnePly; + // Step 9. Internal iterative deepening + // Minimum depth for use of internal iterative deepening const Depth IIDDepthAtPVNodes = 5 * OnePly; const Depth IIDDepthAtNonPVNodes = 8 * OnePly; @@ -188,6 +195,7 @@ namespace { Depth CheckExtension[2], SingleEvasionExtension[2], PawnPushTo7thExtension[2]; Depth PassedPawnExtension[2], PawnEndgameExtension[2], MateThreatExtension[2]; + // Minimum depth for use of singular extension const Depth SingularExtensionDepthAtPVNodes = 6 * OnePly; const Depth SingularExtensionDepthAtNonPVNodes = 8 * OnePly; @@ -197,6 +205,7 @@ namespace { // Step 12. Futility pruning + // Futility margin for quiescence search const Value FutilityMarginQS = Value(0x80); // Futility lookup tables (initialized at startup) and their getter functions @@ -215,7 +224,7 @@ namespace { inline Depth pv_reduction(Depth d, int mn) { return (Depth) PVReductionMatrix[Min(d / 2, 63)][Min(mn, 63)]; } inline Depth nonpv_reduction(Depth d, int mn) { return (Depth) NonPVReductionMatrix[Min(d / 2, 63)][Min(mn, 63)]; } - + // Step. Common adjustments // Search depth at iteration 1 const Depth InitialDepth = OnePly; @@ -224,17 +233,15 @@ namespace { // better than the second best move. const Value EasyMoveMargin = Value(0x200); - /// Variables initialized by UCI options - - // Depth limit for use of dynamic threat detection - Depth ThreatDepth; - // 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; + + /// Global variables + // Iteration counters int Iteration; @@ -429,8 +436,6 @@ bool think(const Position& pos, bool infinite, bool ponder, int side_to_move, MateThreatExtension[1] = Depth(get_option_value_int("Mate Threat Extension (PV nodes)")); MateThreatExtension[0] = Depth(get_option_value_int("Mate Threat Extension (non-PV nodes)")); - ThreatDepth = get_option_value_int("Threat Depth") * OnePly; - Chess960 = get_option_value_bool("UCI_Chess960"); ShowCurrentLine = get_option_value_bool("UCI_ShowCurrLine"); UseLogFile = get_option_value_bool("Use Search Log"); @@ -1435,7 +1440,7 @@ namespace { // Loop through all legal moves until no moves remain or a beta cutoff occurs // Initialize a MovePicker object for the current position - MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); + MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply], beta); CheckInfo ci(pos); while ( bestValue < beta @@ -2588,7 +2593,7 @@ namespace { DWORD WINAPI init_thread(LPVOID threadID) { TM.idle_loop(*(int*)threadID, NULL); - return NULL; + return 0; } #endif @@ -2994,9 +2999,6 @@ namespace { if (ActiveThreads == 1) return; - for (int i = 1; i < ActiveThreads; i++) - assert(threads[i].state == THREAD_SLEEPING); - #if !defined(_MSC_VER) pthread_mutex_lock(&WaitLock); pthread_cond_broadcast(&WaitCond);