From 9dc6d270fc207d6715578b57a1cdf655527ec5fe Mon Sep 17 00:00:00 2001 From: Vizvezdenec Date: Sun, 2 Dec 2018 20:18:14 +0100 Subject: [PATCH] Introduce concept of double pawn protection. Exclude doubly protected by pawns squares when calculating attackers on king ring. Idea of this patch is not to count attackers if they attack only squares that are protected by two pawns. STC LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 70040 W: 15476 L: 15002 D: 39562 http://tests.stockfishchess.org/tests/view/5c0354860ebc5902bcee1106 LTC LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 16530 W: 2795 L: 2607 D: 11128 http://tests.stockfishchess.org/tests/view/5c0385080ebc5902bcee14b5 This is third king safety patch in recent times so we probably need retuning of king safety parameters. Bench: 3057978 --- src/bitboard.h | 10 ++++++++++ src/evaluate.cpp | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/bitboard.h b/src/bitboard.h index 559c70f6..c6dbc647 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -177,6 +177,16 @@ constexpr Bitboard pawn_attacks_bb(Bitboard b) { } +/// double_pawn_attacks_bb() returns the pawn attacks for the given color +/// from the squares in the given bitboard. + +template +constexpr Bitboard double_pawn_attacks_bb(Bitboard b) { + return C == WHITE ? shift(b) & shift(b) + : shift(b) & shift(b); +} + + /// adjacent_files_bb() returns a bitboard representing all the squares on the /// adjacent files of the given one. diff --git a/src/evaluate.cpp b/src/evaluate.cpp index f1bb861d..d6239594 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -309,7 +309,7 @@ namespace { attackedBy[Us][Pt] |= b; attackedBy[Us][ALL_PIECES] |= b; - if (b & kingRing[Them]) + if (b & kingRing[Them] & ~double_pawn_attacks_bb(pos.pieces(Them, PAWN))) { kingAttackersCount[Us]++; kingAttackersWeight[Us] += KingAttackWeights[Pt]; -- 2.39.2