1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

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
This commit is contained in:
snicolet 2017-05-15 19:26:27 -07:00 committed by Joona Kiiski
parent 7edd1f7ccd
commit 862934d7ae

View file

@ -88,7 +88,7 @@ namespace {
// kingRing[color] is the zone around the king which is considered // kingRing[color] is the zone around the king which is considered
// by the king safety evaluation. This consists of the squares directly // 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 // 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, // is on g8, kingRing[BLACK] is a bitboard containing the squares f8, h8,
// f7, g7, h7, f6, g6 and h6. // 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 // Init our king safety tables only if we are going to use them
if (pos.non_pawn_material(Them) >= QueenValueMg) if (pos.non_pawn_material(Them) >= QueenValueMg)
{ {
ei.kingRing[Us] = b | shift<Up>(b); ei.kingRing[Us] = b;
if (relative_rank(Us, pos.square<KING>(Us)) == RANK_1)
ei.kingRing[Us] |= shift<Up>(b);
ei.kingAttackersCount[Them] = popcount(b & ei.pe->pawn_attacks(Them)); ei.kingAttackersCount[Them] = popcount(b & ei.pe->pawn_attacks(Them));
ei.kingAdjacentZoneAttacksCount[Them] = ei.kingAttackersWeight[Them] = 0; ei.kingAdjacentZoneAttacksCount[Them] = ei.kingAttackersWeight[Them] = 0;
} }