1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Remove semiopenFiles in pawns and simplify space #2102

This is a functional simplification.

    1. semiopenFiles is removed in pawns and uses the piece arrays in position instead.

    2. popcount is removed in space calculations and uses pawn piece count instead.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 33327 W: 7423 L: 7324 D: 18580
http://tests.stockfishchess.org/tests/view/5cb4be090ebc5925cf018511

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 10173 W: 1774 L: 1636 D: 6763
http://tests.stockfishchess.org/tests/view/5cb4c5920ebc5925cf018696

bench 3402947
This commit is contained in:
protonspring 2019-04-16 08:09:36 -06:00 committed by Marco Costalba
parent 1594d15922
commit eb07775583
4 changed files with 8 additions and 10 deletions

View file

@ -358,8 +358,8 @@ namespace {
score += RookOnPawn * popcount(pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s]); score += RookOnPawn * popcount(pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s]);
// Bonus for rook on an open or semi-open file // Bonus for rook on an open or semi-open file
if (pe->semiopen_file(Us, file_of(s))) if (pos.semiopen_file(Us, file_of(s)))
score += RookOnFile[bool(pe->semiopen_file(Them, file_of(s)))]; score += RookOnFile[bool(pos.semiopen_file(Them, file_of(s)))];
// Penalty when trapped by the king, even more if the king cannot castle // Penalty when trapped by the king, even more if the king cannot castle
else if (mob <= 3) else if (mob <= 3)
@ -720,7 +720,7 @@ namespace {
int bonus = popcount(safe) + popcount(behind & safe); int bonus = popcount(safe) + popcount(behind & safe);
int weight = pos.count<ALL_PIECES>(Us) int weight = pos.count<ALL_PIECES>(Us)
- 2 * popcount(pe->semiopenFiles[WHITE] & pe->semiopenFiles[BLACK]); - (16 - pos.count<PAWN>()) / 4;
Score score = make_score(bonus * weight * weight / 16, 0); Score score = make_score(bonus * weight * weight / 16, 0);

View file

@ -77,7 +77,6 @@ namespace {
Bitboard theirPawns = pos.pieces(Them, PAWN); Bitboard theirPawns = pos.pieces(Them, PAWN);
e->passedPawns[Us] = e->pawnAttacksSpan[Us] = e->weakUnopposed[Us] = 0; e->passedPawns[Us] = e->pawnAttacksSpan[Us] = e->weakUnopposed[Us] = 0;
e->semiopenFiles[Us] = 0xFF;
e->kingSquares[Us] = SQ_NONE; e->kingSquares[Us] = SQ_NONE;
e->pawnAttacks[Us] = pawn_attacks_bb<Us>(ourPawns); e->pawnAttacks[Us] = pawn_attacks_bb<Us>(ourPawns);
e->pawnsOnSquares[Us][BLACK] = popcount(ourPawns & DarkSquares); e->pawnsOnSquares[Us][BLACK] = popcount(ourPawns & DarkSquares);
@ -91,7 +90,6 @@ namespace {
File f = file_of(s); File f = file_of(s);
Rank r = relative_rank(Us, s); Rank r = relative_rank(Us, s);
e->semiopenFiles[Us] &= ~(1 << f);
e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s); e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s);
// Flag the pawn // Flag the pawn

View file

@ -40,10 +40,6 @@ struct Entry {
int weak_unopposed(Color c) const { return weakUnopposed[c]; } int weak_unopposed(Color c) const { return weakUnopposed[c]; }
int passed_count() const { return passedCount; } int passed_count() const { return passedCount; }
int semiopen_file(Color c, File f) const {
return semiopenFiles[c] & (1 << f);
}
int pawns_on_same_color_squares(Color c, Square s) const { int pawns_on_same_color_squares(Color c, Square s) const {
return pawnsOnSquares[c][bool(DarkSquares & s)]; return pawnsOnSquares[c][bool(DarkSquares & s)];
} }
@ -69,7 +65,6 @@ struct Entry {
Score kingSafety[COLOR_NB]; Score kingSafety[COLOR_NB];
int weakUnopposed[COLOR_NB]; int weakUnopposed[COLOR_NB];
int castlingRights[COLOR_NB]; int castlingRights[COLOR_NB];
int semiopenFiles[COLOR_NB];
int pawnsOnSquares[COLOR_NB][COLOR_NB]; // [color][light/dark squares] int pawnsOnSquares[COLOR_NB][COLOR_NB]; // [color][light/dark squares]
int passedCount; int passedCount;
}; };

View file

@ -95,6 +95,7 @@ public:
template<PieceType Pt> int count() const; template<PieceType Pt> int count() const;
template<PieceType Pt> const Square* squares(Color c) const; template<PieceType Pt> const Square* squares(Color c) const;
template<PieceType Pt> Square square(Color c) const; template<PieceType Pt> Square square(Color c) const;
int semiopen_file(Color c, File f) const;
// Castling // Castling
int castling_rights(Color c) const; int castling_rights(Color c) const;
@ -260,6 +261,10 @@ inline Square Position::ep_square() const {
return st->epSquare; return st->epSquare;
} }
inline int Position::semiopen_file(Color c, File f) const {
return !(pieces(c, PAWN) & file_bb(f));
}
inline bool Position::can_castle(CastlingRight cr) const { inline bool Position::can_castle(CastlingRight cr) const {
return st->castlingRights & cr; return st->castlingRights & cr;
} }