mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
More accurate pawn attack span definition
Tweak the pawn attack span for backward pawns and the zone behind opponent opposing pawns. This is important in positional play and one of weaknesses of the engine in recent high level games. STC LLR: -2.95 (-2.94,2.94) [0.50,4.50] Total: 66843 W: 14884 L: 14717 D: 37242 http://tests.stockfishchess.org/tests/view/5d8dcb1b0ebc590f3beb2956 LTC LLR: 2.96 (-2.94,2.94) [0.00,3.50] Total: 77699 W: 12993 L: 12602 D: 52104 http://tests.stockfishchess.org/tests/view/5d8de9bc0ebc590f3beb3d00 See discussion in https://github.com/official-stockfish/Stockfish/pull/2332 Bench: 4012371
This commit is contained in:
parent
005ad170c1
commit
e6f4b5f463
2 changed files with 19 additions and 8 deletions
|
@ -135,7 +135,7 @@ namespace {
|
||||||
constexpr Score KnightOnQueen = S( 16, 12);
|
constexpr Score KnightOnQueen = S( 16, 12);
|
||||||
constexpr Score LongDiagonalBishop = S( 45, 0);
|
constexpr Score LongDiagonalBishop = S( 45, 0);
|
||||||
constexpr Score MinorBehindPawn = S( 18, 3);
|
constexpr Score MinorBehindPawn = S( 18, 3);
|
||||||
constexpr Score Outpost = S( 18, 6);
|
constexpr Score Outpost = S( 16, 5);
|
||||||
constexpr Score PassedFile = S( 11, 8);
|
constexpr Score PassedFile = S( 11, 8);
|
||||||
constexpr Score PawnlessFlank = S( 17, 95);
|
constexpr Score PawnlessFlank = S( 17, 95);
|
||||||
constexpr Score RestrictedPiece = S( 7, 7);
|
constexpr Score RestrictedPiece = S( 7, 7);
|
||||||
|
|
|
@ -71,10 +71,10 @@ namespace {
|
||||||
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
|
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
|
||||||
constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH);
|
constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH);
|
||||||
|
|
||||||
Bitboard neighbours, stoppers, support, phalanx;
|
Bitboard neighbours, stoppers, support, phalanx, opposed;
|
||||||
Bitboard lever, leverPush;
|
Bitboard lever, leverPush;
|
||||||
Square s;
|
Square s;
|
||||||
bool opposed, backward, passed, doubled;
|
bool backward, passed, doubled;
|
||||||
Score score = SCORE_ZERO;
|
Score score = SCORE_ZERO;
|
||||||
const Square* pl = pos.squares<PAWN>(Us);
|
const Square* pl = pos.squares<PAWN>(Us);
|
||||||
|
|
||||||
|
@ -94,8 +94,6 @@ namespace {
|
||||||
|
|
||||||
Rank r = relative_rank(Us, s);
|
Rank r = relative_rank(Us, s);
|
||||||
|
|
||||||
e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s);
|
|
||||||
|
|
||||||
// Flag the pawn
|
// Flag the pawn
|
||||||
opposed = theirPawns & forward_file_bb(Us, s);
|
opposed = theirPawns & forward_file_bb(Us, s);
|
||||||
stoppers = theirPawns & passed_pawn_span(Us, s);
|
stoppers = theirPawns & passed_pawn_span(Us, s);
|
||||||
|
@ -112,6 +110,17 @@ namespace {
|
||||||
backward = !(neighbours & forward_ranks_bb(Them, s))
|
backward = !(neighbours & forward_ranks_bb(Them, s))
|
||||||
&& (stoppers & (leverPush | (s + Up)));
|
&& (stoppers & (leverPush | (s + Up)));
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
// A pawn is passed if one of the three following conditions is true:
|
// A pawn is passed if one of the three following conditions is true:
|
||||||
// (a) there is no stoppers except some levers
|
// (a) there is no stoppers except some levers
|
||||||
// (b) the only stoppers are the leverPush, but we outnumber them
|
// (b) the only stoppers are the leverPush, but we outnumber them
|
||||||
|
@ -130,17 +139,19 @@ namespace {
|
||||||
// Score this pawn
|
// Score this pawn
|
||||||
if (support | phalanx)
|
if (support | phalanx)
|
||||||
{
|
{
|
||||||
int v = Connected[r] * (2 + bool(phalanx) - opposed)
|
int v = Connected[r] * (2 + bool(phalanx) - bool(opposed))
|
||||||
+ 21 * popcount(support);
|
+ 21 * popcount(support);
|
||||||
|
|
||||||
score += make_score(v, v * (r - 2) / 4);
|
score += make_score(v, v * (r - 2) / 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (!neighbours)
|
else if (!neighbours)
|
||||||
score -= Isolated + WeakUnopposed * !opposed;
|
score -= Isolated
|
||||||
|
+ WeakUnopposed * !opposed;
|
||||||
|
|
||||||
else if (backward)
|
else if (backward)
|
||||||
score -= Backward + WeakUnopposed * !opposed;
|
score -= Backward
|
||||||
|
+ WeakUnopposed * !opposed;
|
||||||
|
|
||||||
if (!support)
|
if (!support)
|
||||||
score -= Doubled * doubled
|
score -= Doubled * doubled
|
||||||
|
|
Loading…
Add table
Reference in a new issue