From 862934d7aeed1722bfff2872f755c708416c41a7 Mon Sep 17 00:00:00 2001 From: snicolet Date: Mon, 15 May 2017 19:26:27 -0700 Subject: [PATCH] Limit king ring to eight squares In current master the size of the king ring varies abruptly from eight squares when the king is in g8, to 12 squares when it is in g7. Because the king ring is used for estimating attack strength, this may lead to an overestimation of king danger in some positions. This patch limits the king ring to eight squares in all cases. Inspired by the following forum thread: https://groups.google.com/forum/?fromgroups=#!topic/fishcooking/xrUCQ7b0ObE Passed STC: LLR: 2.97 (-2.94,2.94) [0.00,5.00] Total: 9244 W: 1777 L: 1611 D: 5856 and LTC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 87121 W: 11765 L: 11358 D: 63998 Bench: 6121121 Closes #1115 --- src/evaluate.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 3bd790bd..f93e23f6 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -88,7 +88,7 @@ namespace { // kingRing[color] is the zone around the king which is considered // by the king safety evaluation. This consists of the squares directly - // adjacent to the king, and the three (or two, for a king on an edge file) + // adjacent to the king, and (only for a king on its first rank) the // squares two ranks in front of the king. For instance, if black's king // is on g8, kingRing[BLACK] is a bitboard containing the squares f8, h8, // f7, g7, h7, f6, g6 and h6. @@ -242,7 +242,10 @@ namespace { // Init our king safety tables only if we are going to use them if (pos.non_pawn_material(Them) >= QueenValueMg) { - ei.kingRing[Us] = b | shift(b); + ei.kingRing[Us] = b; + if (relative_rank(Us, pos.square(Us)) == RANK_1) + ei.kingRing[Us] |= shift(b); + ei.kingAttackersCount[Them] = popcount(b & ei.pe->pawn_attacks(Them)); ei.kingAdjacentZoneAttacksCount[Them] = ei.kingAttackersWeight[Them] = 0; } -- 2.39.2