From f3b8a699194515e0b74f5349cf84175a97f824e8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ste=CC=81phane=20Nicolet?= Date: Sat, 18 Aug 2018 01:23:36 +0200 Subject: [PATCH] Use an affine formula to mix stats and eval Follow-up for the previous patch: we use an affine formula to mix stats and evaluation in search. The idea is to give a bonus if the previous move of the opponent was historically bad, and a malus if the previous move of the opponent was historically good. More precisely, if x is the stat score of the previous move by the opponent, we implement the following formulas to tweak the evaluation at an internal node of the tree for our pruning decisions at this node: if x = 0, use v' = eval(P) if x > 0, use v' = eval(P) - 5 - x/1024 if x < 0, use v' = eval(P) + 5 - x/1024 For reference, the previous master had this simpler rule: if x > 0, use v' = eval(P) - 10 if x <= 0, use v' = eval(P) STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 29322 W: 6359 L: 6088 D: 16875 http://tests.stockfishchess.org/tests/view/5b76a5980ebc5902bdba957f LTC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 30893 W: 5154 L: 4910 D: 20829 http://tests.stockfishchess.org/tests/view/5b76ca6d0ebc5902bdba9914 Closes https://github.com/official-stockfish/Stockfish/pull/1740 Bench: 4592766 --- src/search.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index d43a875f..3d9c718b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -722,12 +722,14 @@ namespace { } else { - ss->staticEval = eval = - (ss-1)->currentMove != MOVE_NULL ? evaluate(pos) - 10 * ((ss-1)->statScore > 0) - : -(ss-1)->staticEval + 2 * Eval::Tempo; + int p = (ss-1)->statScore; + int malus = p > 0 ? (p + 5000) / 1024 : + p < 0 ? (p - 5000) / 1024 : 0; - tte->save(posKey, VALUE_NONE, BOUND_NONE, DEPTH_NONE, MOVE_NONE, - ss->staticEval); + ss->staticEval = eval = (ss-1)->currentMove != MOVE_NULL ? evaluate(pos) - malus + : -(ss-1)->staticEval + 2 * Eval::Tempo; + + tte->save(posKey, VALUE_NONE, BOUND_NONE, DEPTH_NONE, MOVE_NONE, ss->staticEval); } // Step 7. Razoring (~2 Elo) -- 2.30.2