From: Eelco de Groot Date: Mon, 16 Jun 2014 19:46:42 +0000 (+0200) Subject: Don't special case for abs(beta) >= VALUE_MATE_IN_MAX_PLY X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=55a3e0af8d0d1e169cc8b16541ffeb41e157b66e Don't special case for abs(beta) >= VALUE_MATE_IN_MAX_PLY Remove from the search this special case and apply null search and razoring also in mate positions. Tested in no-regression mode and passed both STC LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 65431 W: 10860 L: 10810 D: 43761 and LTC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 34928 W: 4814 L: 4713 D: 25401 This patch kicks in only in mate positions and in these cases it seems beneficial in finding mates faster as Yery Spark measured on the Chest mate suite: Total number of positions 6425 Fixed nodes 200K per position master: 1049 new: 1154 And also the 5446 'hard' positions again with 2000K nodes (those not found by both engines in 200K nodes): master: 1069 new: 1395 bench: 7710548 --- diff --git a/src/search.cpp b/src/search.cpp index e24d264d..acd042c0 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -566,7 +566,6 @@ namespace { && depth < 4 * ONE_PLY && eval + razor_margin(depth) <= alpha && ttMove == MOVE_NONE - && abs(beta) < VALUE_MATE_IN_MAX_PLY && !pos.pawn_on_7th(pos.side_to_move())) { if ( depth <= ONE_PLY @@ -594,7 +593,6 @@ namespace { && !ss->skipNullMove && depth >= 2 * ONE_PLY && eval >= beta - && abs(beta) < VALUE_MATE_IN_MAX_PLY && pos.non_pawn_material(pos.side_to_move())) { ss->currentMove = MOVE_NULL; @@ -604,7 +602,8 @@ namespace { // Null move dynamic reduction based on depth and value Depth R = 3 * ONE_PLY + depth / 4 - + int(eval - beta) / PawnValueMg * ONE_PLY; + + (abs(beta) < VALUE_KNOWN_WIN ? int(eval - beta) / PawnValueMg * ONE_PLY + : DEPTH_ZERO); pos.do_null_move(st); (ss+1)->skipNullMove = true; @@ -619,7 +618,7 @@ namespace { if (nullValue >= VALUE_MATE_IN_MAX_PLY) nullValue = beta; - if (depth < 12 * ONE_PLY) + if (depth < 12 * ONE_PLY && abs(beta) < VALUE_KNOWN_WIN) return nullValue; // Do verification search at high depths @@ -699,6 +698,7 @@ moves_loop: // When in check and at SpNode search starts from here singularExtensionNode = !RootNode && !SpNode && depth >= 8 * ONE_PLY + && abs(beta) < VALUE_KNOWN_WIN && ttMove != MOVE_NONE && !excludedMove // Recursive singular search is not allowed && (tte->bound() & BOUND_LOWER) @@ -764,8 +764,7 @@ moves_loop: // When in check and at SpNode search starts from here if ( singularExtensionNode && move == ttMove && !ext - && pos.legal(move, ci.pinned) - && abs(ttValue) < VALUE_KNOWN_WIN) + && pos.legal(move, ci.pinned)) { assert(ttValue != VALUE_NONE);