From: Stéphane Nicolet Date: Tue, 27 Feb 2018 18:10:40 +0000 (+0100) Subject: Simplify tropism computation X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=de642f16db0c443de2dc0ddf7b06c0a7d1c5b8b7 Simplify tropism computation Simplification. Tests show that the "shift-and-superpose" trick is no longer necessary. The speed benefit of avoiding a popcount is no longer relevant on modern machines. Passed STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 41675 W: 9168 L: 9086 D: 23421 http://tests.stockfishchess.org/tests/view/5a840bcc0ebc590297cc80b5 Passed LTC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 117728 W: 19875 L: 19911 D: 77942 http://tests.stockfishchess.org/tests/view/5a8444800ebc590297cc80ca No functional change. --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 8e6d827e..0ee89e4d 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -482,22 +482,20 @@ namespace { score -= make_score(kingDanger * kingDanger / 4096, kingDanger / 16); } } - // Penalty when our king is on a pawnless flank - if (!(pos.pieces(PAWN) & KingFlank[file_of(ksq)])) - score -= PawnlessFlank; - // King tropism: firstly, find attacked squares in our king flank - b = attackedBy[Them][ALL_PIECES] & KingFlank[file_of(ksq)] & Camp; + Bitboard kf = KingFlank[file_of(ksq)]; - assert(((Us == WHITE ? b << 4 : b >> 4) & b) == 0); - assert(popcount(Us == WHITE ? b << 4 : b >> 4) == popcount(b)); + // Penalty when our king is on a pawnless flank + if (!(pos.pieces(PAWN) & kf)) + score -= PawnlessFlank; - // Secondly, add the squares which are attacked twice in that flank and - // which are not defended by our pawns. - b = (Us == WHITE ? b << 4 : b >> 4) - | (b & attackedBy2[Them] & ~attackedBy[Us][PAWN]); + // Find the squares that opponent attacks in our king flank, and the squares + // which are attacked twice in that flank but not defended by our pawns. + b1 = attackedBy[Them][ALL_PIECES] & kf & Camp; + b2 = b1 & attackedBy2[Them] & ~attackedBy[Us][PAWN]; - score -= CloseEnemies * popcount(b); + // King tropism, to anticipate slow motion attacks on our king + score -= CloseEnemies * (popcount(b1) + popcount(b2)); if (T) Trace::add(KING, Us, score);