From: GuardianRM Date: Fri, 24 Feb 2017 05:26:59 +0000 (-0800) Subject: Pieces protecting king X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=9f48e1ec15b8bec038338e2c4404a234af8c6364 Pieces protecting king Initial protective idea by Snicolet for knight, for other pieces too Patch add penalties and bonuses for pieces, depending on the distance from the own king STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 21192 W: 3919 L: 3704 D: 13569 LTC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 26177 W: 3642 L: 3435 D: 19100 Bench : 6687377 Closes #1012 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 6180c482..84c83269 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -180,6 +180,16 @@ namespace { S( 9, 10), S( 2, 10), S( 1, -8), S(-20,-12), S(-20,-12), S( 1, -8), S( 2, 10), S( 9, 10) }; + + // Protector[PieceType][distance] contains a protecting bonus for our king, + // indexed by piece type and distance between the piece and the king. + const Score Protector[PIECE_TYPE_NB][8] = { + {}, {}, + { S(0, 0), S( 7, 9), S( 7, 1), S( 1, 5), S(-10,-4), S( -1,-4), S( -7,-3), S(-16,-10) }, // Knight + { S(0, 0), S(11, 8), S(-7,-1), S(-1,-2), S( -1,-7), S(-11,-3), S( -9,-1), S(-16, -1) }, // Bishop + { S(0, 0), S(10, 0), S(-2, 2), S(-5, 4), S( -6, 2), S(-14,-3), S( -2,-9), S(-12, -7) }, // Rook + { S(0, 0), S( 3,-5), S( 2,-5), S(-4, 0), S( -9,-6), S(-4, 7), S(-13,-7), S(-10, -7) } // Queen + }; // Assorted bonuses and penalties used by evaluation const Score MinorBehindPawn = S(16, 0); @@ -294,6 +304,9 @@ namespace { int mob = popcount(b & ei.mobilityArea[Us]); mobility[Us] += MobilityBonus[Pt][mob]; + + // Bonus for this piece as a king protector + score += Protector[Pt][distance(s, pos.square(Us))]; if (Pt == BISHOP || Pt == KNIGHT) {