- // Penalty according to number of pawns on the same color square as the bishop
- score -= BishopPawns * pe->pawns_on_same_color_squares(Us, s);
+ // Penalty according to number of pawns on the same color square as the
+ // bishop, bigger when the center files are blocked with pawns.
+ Bitboard blocked = pos.pieces(Us, PAWN) & shift<Down>(pos.pieces());
+
+ score -= BishopPawns * pe->pawns_on_same_color_squares(Us, s)
+ * (1 + popcount(blocked & CenterFiles));