From 8aecf2698184babce57ccfd2ba5948342e29c325 Mon Sep 17 00:00:00 2001 From: Vizvezdenec Date: Thu, 12 Sep 2019 06:43:04 +0300 Subject: [PATCH] Scale down complexity for almost unwinnable endgames This patch greatly scales down complexity of endgames when the following conditions are all true together: - pawns are all on one flank - stronger side king is not outflanking weaker side - no passed pawns are present This should improve stockfish evaluation of obvious draws 4 vs 3, 3 vs 2 and 2 vs 1 pawns in rook/queen/knight/bishop single flank endgames where strong side can not make progress. passed STC LLR: 2.94 (-2.94,2.94) [0.50,4.50] Total: 15843 W: 3601 L: 3359 D: 8883 passed LTC LLR: 2.96 (-2.94,2.94) [0.00,3.50] Total: 121275 W: 20107 L: 19597 D: 81571 Closes https://github.com/official-stockfish/Stockfish/pull/2298 Bench: 3954190 ========================== How to continue from there? a) This could be a powerful idea for refining some parts of the evaluation function, a bit like when we try quadratics or other equations to emphasize certain situations (xoto10). b) Some other combinaison values for this bonus can be done further, or overall retuning of weight and offset while keeping the formula simple. --- src/evaluate.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index cb1ad1f4..73e2144c 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -725,12 +725,17 @@ namespace { bool pawnsOnBothFlanks = (pos.pieces(PAWN) & QueenSide) && (pos.pieces(PAWN) & KingSide); + bool almostUnwinnable = !pe->passed_count() + && outflanking < 0 + && !pawnsOnBothFlanks; + // Compute the initiative bonus for the attacking side int complexity = 9 * pe->passed_count() + 11 * pos.count() + 9 * outflanking + 18 * pawnsOnBothFlanks + 49 * !pos.non_pawn_material() + - 36 * almostUnwinnable -103 ; // Now apply the bonus: note that we find the attacking side by extracting -- 2.39.2