From: Marco Costalba Date: Mon, 15 Dec 2008 15:47:30 +0000 (+0100) Subject: Do not razor while in check or value is mate X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=ecc19381b4af1938d6e07ef44462110e02c02953 Do not razor while in check or value is mate Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index cbb6ea09..017f65be 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1195,6 +1195,7 @@ namespace { if ( UseNullDrivenIID && nullValue < beta && depth > 6 * OnePly + &&!value_is_mate(nullValue) && ttMove == MOVE_NONE && ss[ply + 1].currentMove != MOVE_NONE && pos.move_is_capture(ss[ply + 1].currentMove) @@ -1236,8 +1237,10 @@ namespace { } } // Null move search not allowed, try razoring - else if ( (approximateEval < beta - RazorMargin && depth < RazorDepth) - ||(approximateEval < beta - PawnValueMidgame && depth <= OnePly)) + else if ( !isCheck + && !value_is_mate(beta) + && ( (approximateEval < beta - RazorMargin && depth < RazorDepth) + ||(approximateEval < beta - PawnValueMidgame && depth <= OnePly))) { Value v = qsearch(pos, ss, beta-1, beta, Depth(0), ply, threadID); if (v < beta) @@ -1454,12 +1457,12 @@ namespace { // Initialize a MovePicker object for the current position, and prepare // to search the moves. Because the depth is <= 0 here, only captures, // queen promotions and checks (only if depth == 0) will be generated. - MovePicker mp = MovePicker(pos, false, MOVE_NONE, EmptySearchStack, depth, &ei); + bool pvNode = (beta - alpha != 1); + MovePicker mp = MovePicker(pos, pvNode, MOVE_NONE, EmptySearchStack, depth, &ei); Move move; int moveCount = 0; Bitboard dcCandidates = mp.discovered_check_candidates(); bool isCheck = pos.is_check(); - bool pvNode = (beta - alpha != 1); bool enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame; // Loop through the moves until no moves remain or a beta cutoff