// BishopPawns[distance from edge] contains a file-dependent penalty for pawns on
// squares of the same color as our bishop.
constexpr Score BishopPawns[int(FILE_NB) / 2] = {
- S(3, 8), S(3, 9), S(1, 8), S(3, 7)
+ S(3, 8), S(3, 9), S(2, 8), S(3, 8)
};
// KingProtector[knight/bishop] contains penalty for each distance unit to own king
// Outpost[knight/bishop] contains bonuses for each knight or bishop occupying a
// pawn protected square on rank 4 to 6 which is also safe from a pawn attack.
- constexpr Score Outpost[] = { S(56, 34), S(31, 23) };
+ constexpr Score Outpost[] = { S(57, 38), S(31, 24) };
// PassedRank[Rank] contains a bonus according to the rank of a passed pawn
constexpr Score PassedRank[RANK_NB] = {
};
// Assorted bonuses and penalties
- constexpr Score BadOutpost = S( -7, 36);
+ constexpr Score UncontestedOutpost = S( 1, 10);
constexpr Score BishopOnKingRing = S( 24, 0);
constexpr Score BishopXRayPawns = S( 4, 5);
constexpr Score CorneredBishop = S( 50, 50);
if (Pt == BISHOP || Pt == KNIGHT)
{
// Bonus if the piece is on an outpost square or can reach one
- // Reduced bonus for knights (BadOutpost) if few relevant targets
+ // Bonus for knights (UncontestedOutpost) if few relevant targets
bb = OutpostRanks & (attackedBy[Us][PAWN] | shift<Down>(pos.pieces(PAWN)))
& ~pe->pawn_attacks_span(Them);
Bitboard targets = pos.pieces(Them) & ~pos.pieces(PAWN);
&& bb & s & ~CenterFiles // on a side outpost
&& !(b & targets) // no relevant attacks
&& (!more_than_one(targets & (s & QueenSide ? QueenSide : KingSide))))
- score += BadOutpost;
+ score += UncontestedOutpost * popcount(pos.pieces(PAWN) & (s & QueenSide ? QueenSide : KingSide));
else if (bb & s)
score += Outpost[Pt == BISHOP];
else if (Pt == KNIGHT && bb & b & ~pos.pieces(Us))
{ S(-201,-100), S(-83,-88), S(-56,-56), S(-26,-17) }
},
{ // Bishop
- { S(-53,-57), S( -5,-30), S( -8,-37), S(-23,-12) },
- { S(-15,-37), S( 8,-13), S( 19,-17), S( 4, 1) },
- { S( -7,-16), S( 21, -1), S( -5, -2), S( 17, 10) },
- { S( -5,-20), S( 11, -6), S( 25, 0), S( 39, 17) },
- { S(-12,-17), S( 29, -1), S( 22,-14), S( 31, 15) },
- { S(-16,-30), S( 6, 6), S( 1, 4), S( 11, 6) },
- { S(-17,-31), S(-14,-20), S( 5, -1), S( 0, 1) },
- { S(-48,-46), S( 1,-42), S(-14,-37), S(-23,-24) }
+ { S(-37,-40), S(-4 ,-21), S( -6,-26), S(-16, -8) },
+ { S(-11,-26), S( 6, -9), S( 13,-12), S( 3, 1) },
+ { S(-5 ,-11), S( 15, -1), S( -4, -1), S( 12, 7) },
+ { S(-4 ,-14), S( 8, -4), S( 18, 0), S( 27, 12) },
+ { S(-8 ,-12), S( 20, -1), S( 15,-10), S( 22, 11) },
+ { S(-11,-21), S( 4, 4), S( 1, 3), S( 8, 4) },
+ { S(-12,-22), S(-10,-14), S( 4, -1), S( 0, 1) },
+ { S(-34,-32), S( 1,-29), S(-10,-26), S(-16,-17) }
},
{ // Rook
{ S(-31, -9), S(-20,-13), S(-14,-10), S(-5, -9) },