From: Stéphane Nicolet Date: Mon, 24 Oct 2016 20:09:09 +0000 (+0200) Subject: Endgame malus for having a king in a pawnless flank X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=818b4a126d16a209112fd64308447ba37071900d Endgame malus for having a king in a pawnless flank Original idea by "ElbertoOne", while "FauziAkram" suggested to put a small midgame penalty too. STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 71808 W: 13038 L: 12610 D: 46160 LTC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 150874 W: 19828 L: 19221 D: 111825 Bench: 6077005 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index d1799d60..c37bd26f 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -198,6 +198,7 @@ namespace { const Score Hanging = S(48, 27); const Score ThreatByPawnPush = S(38, 22); const Score Unstoppable = S( 0, 20); + const Score PawnlessFlank = S(20, 80); // Penalty for a bishop on a1/h1 (a8/h8 for black) which is trapped by // a friendly pawn on b2/g2 (b7/g7 for black). This can obviously only @@ -482,7 +483,8 @@ namespace { } // King tropism: firstly, find squares that opponent attacks in our king flank - b = ei.attackedBy[Them][ALL_PIECES] & KingFlank[Us][file_of(ksq)]; + File kf = file_of(ksq); + b = ei.attackedBy[Them][ALL_PIECES] & KingFlank[Us][kf]; assert(((Us == WHITE ? b << 4 : b >> 4) & b) == 0); assert(popcount(Us == WHITE ? b << 4 : b >> 4) == popcount(b)); @@ -494,6 +496,10 @@ namespace { score -= CloseEnemies * popcount(b); + // Penalty when our king is on a pawnless flank + if (!(pos.pieces(PAWN) & (KingFlank[WHITE][kf] | KingFlank[BLACK][kf]))) + score -= PawnlessFlank; + if (DoTrace) Trace::add(KING, Us, score);