From: Marco Costalba Date: Sun, 6 Jan 2013 21:55:35 +0000 (+0100) Subject: Revert so called "fromNull patch" X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=edce2a8448c086a8ea2b24db7511fdc7ffe9de94 Revert so called "fromNull patch" Revert patch c581b7ea3627482 Seems a regression after testing from Gary: ELO: 7.24 +- 99%: 17.03 95%: 12.93 LOS: 97.86% Wins: 439 Losses: 381 Draws: 1962 And mine: After 5410 games at 15"+0.05 Wins: 936 Losses: 1141 Draws: 3333 ELO -13 Moreover we know that there is a regression in the range of patches which include the fromNull patch. Probably this is not the only regression since 2.3.1 and perhaps the idea under fromNull is good, but at the moment, while in deep regression hunting, better to be on the safe side and revert it entirely. My guess on why this is a regression is that using the negated evaluation of previous ply in case of null search fails to take in account the king safety asymmetry between the two colors. This is of course just a guess. bench 5503830 --- diff --git a/src/search.cpp b/src/search.cpp index 744d84f4..dc82d34d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1109,7 +1109,7 @@ split_point_start: // At split points actual search starts from here Key posKey; Move ttMove, move, bestMove; Value bestValue, value, ttValue, futilityValue, futilityBase, oldAlpha; - bool givesCheck, enoughMaterial, evasionPrunable, fromNull; + bool givesCheck, enoughMaterial, evasionPrunable; Depth ttDepth; // To flag BOUND_EXACT a node with eval above alpha and no available moves @@ -1118,7 +1118,6 @@ split_point_start: // At split points actual search starts from here ss->currentMove = bestMove = MOVE_NONE; ss->ply = (ss-1)->ply + 1; - fromNull = (ss-1)->currentMove == MOVE_NULL; // Check for an instant draw or maximum ply reached if (pos.is_draw() || ss->ply > MAX_PLY) @@ -1156,13 +1155,7 @@ split_point_start: // At split points actual search starts from here } else { - if (fromNull) - { - // Approximated score. Real one is slightly higher due to tempo - ss->staticEval = bestValue = -(ss-1)->staticEval; - ss->evalMargin = VALUE_ZERO; - } - else if (tte) + if (tte) { // Never assume anything on values stored in TT if ( (ss->staticEval = bestValue = tte->static_value()) == VALUE_NONE @@ -1206,7 +1199,6 @@ split_point_start: // At split points actual search starts from here // Futility pruning if ( !PvNode && !InCheck - && !fromNull && !givesCheck && move != ttMove && enoughMaterial