mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33:09 +00:00
Give a small penalty for bishop for each pawn on the same colored square
This commit is contained in:
parent
fe72c93141
commit
3e4dfb49a7
5 changed files with 16 additions and 1 deletions
|
@ -63,6 +63,8 @@ extern Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB];
|
||||||
extern Bitboard AttackSpanMask[COLOR_NB][SQUARE_NB];
|
extern Bitboard AttackSpanMask[COLOR_NB][SQUARE_NB];
|
||||||
extern Bitboard PseudoAttacks[PIECE_TYPE_NB][SQUARE_NB];
|
extern Bitboard PseudoAttacks[PIECE_TYPE_NB][SQUARE_NB];
|
||||||
|
|
||||||
|
const Bitboard WhiteSquares = 0x55AA55AA55AA55AAULL;
|
||||||
|
const Bitboard BlackSquares = 0xAA55AA55AA55AA55ULL;
|
||||||
|
|
||||||
/// Overloads of bitwise operators between a Bitboard and a Square for testing
|
/// Overloads of bitwise operators between a Bitboard and a Square for testing
|
||||||
/// whether a given bit is set in a bitboard, and for setting and clearing bits.
|
/// whether a given bit is set in a bitboard, and for setting and clearing bits.
|
||||||
|
|
|
@ -582,6 +582,10 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
&& !more_than_one(BetweenBB[s][pos.king_square(Them)] & pos.pieces()))
|
&& !more_than_one(BetweenBB[s][pos.king_square(Them)] & pos.pieces()))
|
||||||
score += BishopPinBonus;
|
score += BishopPinBonus;
|
||||||
|
|
||||||
|
// Penalty for bishop with same coloured pawns
|
||||||
|
if (Piece == BISHOP)
|
||||||
|
score -= make_score(4, 4) * ei.pi->same_colored_pawn_count(s, Us);
|
||||||
|
|
||||||
// Bishop and knight outposts squares
|
// Bishop and knight outposts squares
|
||||||
if ( (Piece == BISHOP || Piece == KNIGHT)
|
if ( (Piece == BISHOP || Piece == KNIGHT)
|
||||||
&& !(pos.pieces(Them, PAWN) & attack_span_mask(Us, s)))
|
&& !(pos.pieces(Them, PAWN) & attack_span_mask(Us, s)))
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace {
|
||||||
const Value RedundantRookPenalty = Value(554);
|
const Value RedundantRookPenalty = Value(554);
|
||||||
|
|
||||||
// pair pawn knight bishop rook queen
|
// pair pawn knight bishop rook queen
|
||||||
const int LinearCoefficients[6] = { 1617, -162, -1172, -190, 105, 26 };
|
const int LinearCoefficients[6] = { 1617, -162, -1172, -62, 105, 26 };
|
||||||
|
|
||||||
const int QuadraticCoefficientsSameColor[][PIECE_TYPE_NB] = {
|
const int QuadraticCoefficientsSameColor[][PIECE_TYPE_NB] = {
|
||||||
// pair pawn knight bishop rook queen
|
// pair pawn knight bishop rook queen
|
||||||
|
|
|
@ -176,6 +176,12 @@ namespace {
|
||||||
value += CandidateBonus[relative_rank(Us, s)];
|
value += CandidateBonus[relative_rank(Us, s)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e->pawnsOnWhiteSquaresCount[Us] = popcount<Max15>(ourPawns & WhiteSquares);
|
||||||
|
e->pawnsOnWhiteSquaresCount[Them] = popcount<Max15>(theirPawns & WhiteSquares);
|
||||||
|
|
||||||
|
e->pawnsOnBlackSquaresCount[Us] = popcount<Max15>(ourPawns & BlackSquares);
|
||||||
|
e->pawnsOnBlackSquaresCount[Them] = popcount<Max15>(theirPawns & BlackSquares);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct Entry {
|
||||||
int file_is_half_open(Color c, File f) const { return halfOpenFiles[c] & (1 << int(f)); }
|
int file_is_half_open(Color c, File f) const { return halfOpenFiles[c] & (1 << int(f)); }
|
||||||
int has_open_file_to_left(Color c, File f) const { return halfOpenFiles[c] & ((1 << int(f)) - 1); }
|
int has_open_file_to_left(Color c, File f) const { return halfOpenFiles[c] & ((1 << int(f)) - 1); }
|
||||||
int has_open_file_to_right(Color c, File f) const { return halfOpenFiles[c] & ~((1 << int(f+1)) - 1); }
|
int has_open_file_to_right(Color c, File f) const { return halfOpenFiles[c] & ~((1 << int(f+1)) - 1); }
|
||||||
|
int same_colored_pawn_count(Square s, Color c) const { return (BlackSquares & s) ? pawnsOnBlackSquaresCount[c] : pawnsOnWhiteSquaresCount[c]; }
|
||||||
|
|
||||||
template<Color Us>
|
template<Color Us>
|
||||||
Score king_safety(const Position& pos, Square ksq) {
|
Score king_safety(const Position& pos, Square ksq) {
|
||||||
|
@ -63,6 +64,8 @@ struct Entry {
|
||||||
Score value;
|
Score value;
|
||||||
int halfOpenFiles[COLOR_NB];
|
int halfOpenFiles[COLOR_NB];
|
||||||
Score kingSafety[COLOR_NB];
|
Score kingSafety[COLOR_NB];
|
||||||
|
int pawnsOnWhiteSquaresCount[COLOR_NB];
|
||||||
|
int pawnsOnBlackSquaresCount[COLOR_NB];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef HashTable<Entry, 16384> Table;
|
typedef HashTable<Entry, 16384> Table;
|
||||||
|
|
Loading…
Add table
Reference in a new issue