From 94abc2a0cfa262e2e040886394c782af226bc1bd Mon Sep 17 00:00:00 2001 From: Tom Vijlbrief Date: Wed, 28 Feb 2018 13:41:24 +0100 Subject: [PATCH] Reintroduce depth 2 razoring (with additional margin) The first depth 2 margin triggers the verification quiescence search. This qsearch() result has to be better then the second lower margin, so we only skip the razoring when the qsearch gives a significant improvement. Passed STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 32133 W: 7395 L: 7101 D: 17637 http://tests.stockfishchess.org/tests/view/5a93198b0ebc590297cc8942 Passed LTC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 17382 W: 3002 L: 2809 D: 11571 http://tests.stockfishchess.org/tests/view/5a93b18c0ebc590297cc89c2 This Elo-gaining version was further simplified following a suggestion of Marco Costalba: STC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 15553 W: 3505 L: 3371 D: 8677 http://tests.stockfishchess.org/tests/view/5a964be90ebc590297cc8cc4 LTC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 13253 W: 2270 L: 2137 D: 8846 http://tests.stockfishchess.org/tests/view/5a9658880ebc590297cc8cca How to continue after this patch? Reformating the razoring code (step 7 in search()) to unify the depth 1 and depth 2 treatements seems quite possible, this could possibly lead to more simplifications. Bench: 5765806 --- src/search.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index e9afc1c5..2acca99c 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -66,8 +66,9 @@ namespace { const int SkipSize[] = { 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 }; const int SkipPhase[] = { 0, 1, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6, 7 }; - // Razoring and futility margins - const int RazorMargin = 590; + // Razor and futility margins + const int RazorMargin1 = 590; + const int RazorMargin2 = 604; Value futility_margin(Depth d) { return Value(150 * d / ONE_PLY); } // Futility and reductions lookup tables, initialized at startup @@ -680,9 +681,20 @@ namespace { // Step 7. Razoring (skipped when in check) if ( !PvNode - && depth <= ONE_PLY - && eval + RazorMargin <= alpha) - return qsearch(pos, ss, alpha, alpha+1); + && depth <= ONE_PLY) + { + if (eval + RazorMargin1 <= alpha) + return qsearch(pos, ss, alpha, alpha+1); + } + else if ( !PvNode + && depth <= 2 * ONE_PLY + && eval + RazorMargin2 <= alpha) + { + Value ralpha = alpha - RazorMargin2; + Value v = qsearch(pos, ss, ralpha, ralpha+1); + if (v <= ralpha) + return v; + } // Step 8. Futility pruning: child node (skipped when in check) if ( !rootNode -- 2.39.2