1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

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.
This commit is contained in:
Stéphane Nicolet 2018-02-27 19:10:40 +01:00
parent cccbecb6f8
commit de642f16db

View file

@ -482,22 +482,20 @@ namespace {
score -= make_score(kingDanger * kingDanger / 4096, kingDanger / 16);
}
}
Bitboard kf = KingFlank[file_of(ksq)];
// Penalty when our king is on a pawnless flank
if (!(pos.pieces(PAWN) & KingFlank[file_of(ksq)]))
if (!(pos.pieces(PAWN) & kf))
score -= PawnlessFlank;
// King tropism: firstly, find attacked squares in our king flank
b = attackedBy[Them][ALL_PIECES] & KingFlank[file_of(ksq)] & Camp;
// 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];
assert(((Us == WHITE ? b << 4 : b >> 4) & b) == 0);
assert(popcount(Us == WHITE ? b << 4 : b >> 4) == popcount(b));
// 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]);
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);