mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Tweak hybrid treshold.
Increase the first hybrid threshold with more material. Rewrite the hybrid rules for clarity. STC: LLR: 2.94 (-2.94,2.94) {-0.25,1.25} Total: 24416 W: 3039 L: 2848 D: 18529 Ptnml(0-2): 135, 2136, 7503, 2271, 163 https://tests.stockfishchess.org/tests/view/5f6451efbb0cae038ca8f4dc LTC; LLR: 2.95 (-2.94,2.94) {0.25,1.25} Total: 65016 W: 3702 L: 3455 D: 57859 Ptnml(0-2): 66, 2991, 26157, 3218, 76 https://tests.stockfishchess.org/tests/view/5f64b143bb0cae038ca8f51f closes https://github.com/official-stockfish/Stockfish/pull/3140 Bench: 3973739
This commit is contained in:
parent
8559c43914
commit
16b4578cc1
1 changed files with 21 additions and 13 deletions
|
@ -1015,20 +1015,28 @@ make_v:
|
||||||
|
|
||||||
Value Eval::evaluate(const Position& pos) {
|
Value Eval::evaluate(const Position& pos) {
|
||||||
|
|
||||||
// Use classical eval if there is a large imbalance
|
Value v;
|
||||||
// If there is a moderate imbalance, use classical eval with probability (1/8),
|
|
||||||
// as derived from the node counter.
|
|
||||||
bool useClassical = abs(eg_value(pos.psq_score())) * 16 > NNUEThreshold1 * (16 + pos.rule50_count());
|
|
||||||
bool classical = !Eval::useNNUE
|
|
||||||
|| useClassical
|
|
||||||
|| (abs(eg_value(pos.psq_score())) > PawnValueMg / 4 && !(pos.this_thread()->nodes & 0xB));
|
|
||||||
Value v = classical ? Evaluation<NO_TRACE>(pos).value()
|
|
||||||
: NNUE::evaluate(pos) * 5 / 4 + Tempo;
|
|
||||||
|
|
||||||
if ( useClassical
|
if (!Eval::useNNUE)
|
||||||
&& Eval::useNNUE
|
v = Evaluation<NO_TRACE>(pos).value();
|
||||||
&& abs(v) * 16 < NNUEThreshold2 * (16 + pos.rule50_count()))
|
else
|
||||||
v = NNUE::evaluate(pos) * 5 / 4 + Tempo;
|
{
|
||||||
|
// scale and shift NNUE for compatibility with search and classical evaluation
|
||||||
|
auto adjusted_NNUE = [&](){ return NNUE::evaluate(pos) * 5 / 4 + Tempo; };
|
||||||
|
|
||||||
|
// if there is PSQ imbalance use classical eval, with small probability if it is small
|
||||||
|
Value psq = Value(abs(eg_value(pos.psq_score())));
|
||||||
|
int r50 = 16 + pos.rule50_count();
|
||||||
|
bool largePsq = psq * 16 > (NNUEThreshold1 + pos.non_pawn_material() / 64) * r50;
|
||||||
|
bool classical = largePsq || (psq > PawnValueMg / 4 && !(pos.this_thread()->nodes & 0xB));
|
||||||
|
|
||||||
|
v = classical ? Evaluation<NO_TRACE>(pos).value() : adjusted_NNUE();
|
||||||
|
|
||||||
|
// if the classical eval is small and imbalance large, use NNUE nevertheless.
|
||||||
|
if ( largePsq
|
||||||
|
&& abs(v) * 16 < NNUEThreshold2 * r50)
|
||||||
|
v = adjusted_NNUE();
|
||||||
|
}
|
||||||
|
|
||||||
// Damp down the evaluation linearly when shuffling
|
// Damp down the evaluation linearly when shuffling
|
||||||
v = v * (100 - pos.rule50_count()) / 100;
|
v = v * (100 - pos.rule50_count()) / 100;
|
||||||
|
|
Loading…
Add table
Reference in a new issue