X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fnnue%2Fevaluate_nnue.cpp;h=4a3c206b8087fcb065ad0b9c4e595c68495701a8;hb=f193778446acc6e60d7f0f99c6eb01489f89e962;hp=97cef81480fa8033525c2ce05eaf5eb495a675f7;hpb=e8d64af1230fdac65bb0da246df3e7abe82e0838;p=stockfish diff --git a/src/nnue/evaluate_nnue.cpp b/src/nnue/evaluate_nnue.cpp index 97cef814..4a3c206b 100644 --- a/src/nnue/evaluate_nnue.cpp +++ b/src/nnue/evaluate_nnue.cpp @@ -134,7 +134,7 @@ namespace Stockfish::Eval::NNUE { } // Evaluation function. Perform differential calculation. - Value evaluate(const Position& pos) { + Value evaluate(const Position& pos, bool adjusted) { // We manually align the arrays on the stack because with gcc < 9.3 // overaligning stack variables with alignas() doesn't work correctly. @@ -158,14 +158,21 @@ namespace Stockfish::Eval::NNUE { ASSERT_ALIGNED(buffer, alignment); const std::size_t bucket = (pos.count() - 1) / 4; + const auto psqt = featureTransformer->transform(pos, transformedFeatures, bucket); + const auto output = network[bucket]->propagate(transformedFeatures, buffer); - const auto [psqt, lazy] = featureTransformer->transform(pos, transformedFeatures, bucket); - if (lazy) { - return static_cast(psqt / OutputScale); - } else { - const auto output = network[bucket]->propagate(transformedFeatures, buffer); - return static_cast((output[0] + psqt) / OutputScale); - } + int materialist = psqt; + int positional = output[0]; + + int delta_npm = abs(pos.non_pawn_material(WHITE) - pos.non_pawn_material(BLACK)); + int entertainment = (adjusted && delta_npm <= BishopValueMg - KnightValueMg ? 7 : 0); + + int A = 128 - entertainment; + int B = 128 + entertainment; + + int sum = (A * materialist + B * positional) / 128; + + return static_cast( sum / OutputScale ); } // Load eval, from a file stream or a memory stream