mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Adjust pawn span
Run as a simplification a) insures that pawn attacks are always included in the pawn span (this "fixes" the case where some outpost or reachable outpost bonus were awarded on squares controlled by enemy pawns). b) compute the full span only if not "backward" or not "blocked". By looking at "blocked" instead of "opposed", we get a nice simpli- fication and the "new" outpost detection is almost identical, except a few borderline cases on rank 4. passed STC http://tests.stockfishchess.org/tests/view/5d9950730ebc5902b6cefb90 LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 79113 W: 17168 L: 17159 D: 44786 passed LTC http://tests.stockfishchess.org/tests/view/5d99d14e0ebc5902b6cf0692 LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 41286 W: 6819 L: 6731 D: 27736 See https://github.com/official-stockfish/Stockfish/pull/2348 bench: 3812891
This commit is contained in:
parent
c78f8ddd86
commit
7264540107
1 changed files with 11 additions and 18 deletions
|
@ -72,7 +72,7 @@ namespace {
|
|||
constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH);
|
||||
|
||||
Bitboard neighbours, stoppers, support, phalanx, opposed;
|
||||
Bitboard lever, leverPush;
|
||||
Bitboard lever, leverPush, blocked;
|
||||
Square s;
|
||||
bool backward, passed, doubled;
|
||||
Score score = SCORE_ZERO;
|
||||
|
@ -83,9 +83,9 @@ namespace {
|
|||
|
||||
Bitboard doubleAttackThem = pawn_double_attacks_bb<Them>(theirPawns);
|
||||
|
||||
e->passedPawns[Us] = e->pawnAttacksSpan[Us] = 0;
|
||||
e->passedPawns[Us] = 0;
|
||||
e->kingSquares[Us] = SQ_NONE;
|
||||
e->pawnAttacks[Us] = pawn_attacks_bb<Us>(ourPawns);
|
||||
e->pawnAttacks[Us] = e->pawnAttacksSpan[Us] = pawn_attacks_bb<Us>(ourPawns);
|
||||
|
||||
// Loop through all pawns of the current color and score each pawn
|
||||
while ((s = *pl++) != SQ_NONE)
|
||||
|
@ -96,6 +96,7 @@ namespace {
|
|||
|
||||
// Flag the pawn
|
||||
opposed = theirPawns & forward_file_bb(Us, s);
|
||||
blocked = theirPawns & (s + Up);
|
||||
stoppers = theirPawns & passed_pawn_span(Us, s);
|
||||
lever = theirPawns & PawnAttacks[Us][s];
|
||||
leverPush = theirPawns & PawnAttacks[Us][s + Up];
|
||||
|
@ -105,21 +106,13 @@ namespace {
|
|||
support = neighbours & rank_bb(s - Up);
|
||||
|
||||
// A pawn is backward when it is behind all pawns of the same color on
|
||||
// the adjacent files and cannot safely advance. Phalanx and isolated
|
||||
// pawns will be excluded when the pawn is scored.
|
||||
backward = !(neighbours & forward_ranks_bb(Them, s))
|
||||
&& (stoppers & (leverPush | (s + Up)));
|
||||
// the adjacent files and cannot safely advance.
|
||||
backward = !(neighbours & forward_ranks_bb(Them, s + Up))
|
||||
&& (stoppers & (leverPush | blocked));
|
||||
|
||||
// Span of backward pawns and span behind opposing pawns are not included
|
||||
// in the pawnAttacksSpan bitboard.
|
||||
if (!backward || phalanx)
|
||||
{
|
||||
if (opposed)
|
||||
e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s) &
|
||||
~pawn_attack_span(Us, frontmost_sq(Them, opposed));
|
||||
else
|
||||
e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s);
|
||||
}
|
||||
// Compute additional span if pawn is not backward nor blocked
|
||||
if (!backward && !blocked)
|
||||
e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s);
|
||||
|
||||
// A pawn is passed if one of the three following conditions is true:
|
||||
// (a) there is no stoppers except some levers
|
||||
|
@ -128,7 +121,7 @@ namespace {
|
|||
passed = !(stoppers ^ lever)
|
||||
|| ( !(stoppers ^ leverPush)
|
||||
&& popcount(phalanx) >= popcount(leverPush))
|
||||
|| ( stoppers == square_bb(s + Up) && r >= RANK_5
|
||||
|| ( stoppers == blocked && r >= RANK_5
|
||||
&& (shift<Up>(support) & ~(theirPawns | doubleAttackThem)));
|
||||
|
||||
// Passed pawns will be properly scored later in evaluation when we have
|
||||
|
|
Loading…
Add table
Reference in a new issue