From: Stefan Geschwentner Date: Fri, 24 Jan 2014 20:52:56 +0000 (+0100) Subject: Variable null-move value based reduction X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=074c7a3c30dce46b65bc7deb15619a6a33ecf4a8;ds=sidebyside Variable null-move value based reduction Instead of a fixed reduction of ONE_PLY, now Null move dynamic reduction based on value can grow larger in case we are above beta of a value much higher then PawnValueMg. Note that now an eval returning VALUE_KNOWN_WIN makes null search to drop in qsearch. Passed both short TC: LLR: 2.95 (-2.94,2.94) [-1.50,4.50] Total: 26141 W: 4871 L: 4699 D: 16571 And long TC: LLR: 2.97 (-2.94,2.94) [0.00,6.00] Total: 33695 W: 5309 L: 5056 D: 23330 bench: 7356053 --- diff --git a/src/search.cpp b/src/search.cpp index d59fc521..93867f0f 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -628,12 +628,12 @@ namespace { { ss->currentMove = MOVE_NULL; - // Null move dynamic reduction based on depth - Depth R = 3 * ONE_PLY + depth / 4; + assert(eval - beta >= 0); - // Null move dynamic reduction based on value - if (eval - PawnValueMg > beta) - R += ONE_PLY; + // Null move dynamic reduction based on depth and value + Depth R = 3 * ONE_PLY + + depth / (2 * ONE_PLY) + + int(eval - beta) / PawnValueMg * ONE_PLY; pos.do_null_move(st); (ss+1)->skipNullMove = true; @@ -653,7 +653,8 @@ namespace { // Do verification search at high depths ss->skipNullMove = true; - Value v = search(pos, ss, alpha, beta, depth-R, false); + Value v = depth-R < ONE_PLY ? qsearch(pos, ss, alpha, beta, DEPTH_ZERO) + : search(pos, ss, alpha, beta, depth-R, false); ss->skipNullMove = false; if (v >= beta)