Skip to content

Commit

Permalink
Assorted trivial cleanups June 2019
Browse files Browse the repository at this point in the history
No functional change.
  • Loading branch information
mcostalba authored and snicolet committed Jul 11, 2019
1 parent c83cbe4 commit 4ae5a7b
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 22 deletions.
10 changes: 5 additions & 5 deletions src/evaluate.cpp
Expand Up @@ -142,7 +142,7 @@ namespace {
constexpr Score KnightOnQueen = S( 16, 12);
constexpr Score LongDiagonalBishop = S( 45, 0);
constexpr Score MinorBehindPawn = S( 18, 3);
constexpr Score Outpost = S( 36, 12);
constexpr Score Outpost = S( 18, 6);
constexpr Score PawnlessFlank = S( 17, 95);
constexpr Score RestrictedPiece = S( 7, 7);
constexpr Score RookOnPawn = S( 10, 32);
Expand Down Expand Up @@ -222,7 +222,7 @@ namespace {
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
constexpr Direction Up = (Us == WHITE ? NORTH : SOUTH);
constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH);
constexpr Bitboard LowRanks = (Us == WHITE ? Rank2BB | Rank3BB: Rank7BB | Rank6BB);
constexpr Bitboard LowRanks = (Us == WHITE ? Rank2BB | Rank3BB : Rank7BB | Rank6BB);

const Square ksq = pos.square<KING>(Us);

Expand Down Expand Up @@ -305,10 +305,10 @@ namespace {
// Bonus if piece is on an outpost square or can reach one
bb = OutpostRanks & attackedBy[Us][PAWN] & ~pe->pawn_attacks_span(Them);
if (bb & s)
score += Outpost * (Pt == KNIGHT ? 2 : 1);
score += Outpost * (Pt == KNIGHT ? 4 : 2);

else if (bb & b & ~pos.pieces(Us))
score += Outpost / (Pt == KNIGHT ? 1 : 2);
score += Outpost * (Pt == KNIGHT ? 2 : 1);

// Knight and Bishop bonus for being right behind a pawn
if (shift<Down>(pos.pieces(PAWN)) & s)
Expand Down Expand Up @@ -561,7 +561,7 @@ namespace {
b &= ~attackedBy[Them][PAWN] & safe;

// Bonus for safe pawn threats on the next move
b = pawn_attacks_bb<Us>(b) & pos.pieces(Them);
b = pawn_attacks_bb<Us>(b) & nonPawnEnemies;
score += ThreatByPawnPush * popcount(b);

// Our safe or protected pawns
Expand Down
18 changes: 10 additions & 8 deletions src/pawns.cpp
Expand Up @@ -32,9 +32,9 @@ namespace {
#define S(mg, eg) make_score(mg, eg)

// Pawn penalties
constexpr Score Backward = S( 9, 24);
constexpr Score Doubled = S(11, 56);
constexpr Score Isolated = S( 5, 15);
constexpr Score Backward = S( 9, 24);
constexpr Score Doubled = S(11, 56);
constexpr Score Isolated = S( 5, 15);
constexpr Score WeakUnopposed = S( 13, 27);
constexpr Score Attacked2Unsupported = S( 0, 20);

Expand Down Expand Up @@ -108,17 +108,18 @@ namespace {
phalanx = neighbours & rank_bb(s);
support = neighbours & rank_bb(s - Up);

// A pawn is backward when it is behind all pawns of the same color
// on the adjacent files and cannot be safely advanced.
backward = !(ourPawns & pawn_attack_span(Them, s + Up))
// A pawn is backward when it is behind all pawns of the same color on
// the adjacent files and cannot safely advance. Phalanx and isolated
// pawns will be excluded when the pawn is scored.
backward = !(neighbours & forward_ranks_bb(Them, s))
&& (stoppers & (leverPush | (s + Up)));

// Passed pawns will be properly scored in evaluation because we need
// full attack info to evaluate them. Include also not passed pawns
// which could become passed after one or two pawn pushes when are
// not attacked more times than defended.
if ( !(stoppers ^ lever) ||
(!(stoppers ^ leverPush) && popcount(phalanx) >= popcount(leverPush)))
if ( !(stoppers ^ lever) ||
(!(stoppers ^ leverPush) && popcount(phalanx) >= popcount(leverPush)))
e->passedPawns[Us] |= s;

else if (stoppers == square_bb(s + Up) && r >= RANK_5)
Expand All @@ -137,6 +138,7 @@ namespace {

score += make_score(v, v * (r - 2) / 4);
}

else if (!neighbours)
score -= Isolated + WeakUnopposed * int(!opposed);

Expand Down
6 changes: 3 additions & 3 deletions src/position.cpp
Expand Up @@ -55,13 +55,13 @@ constexpr Piece Pieces[] = { W_PAWN, W_KNIGHT, W_BISHOP, W_ROOK, W_QUEEN, W_KING
// valuable attacker for the side to move, remove the attacker we just found
// from the bitboards and scan for new X-ray attacks behind it.

template<int Pt>
template<PieceType Pt>
PieceType min_attacker(const Bitboard* byTypeBB, Square to, Bitboard stmAttackers,
Bitboard& occupied, Bitboard& attackers) {

Bitboard b = stmAttackers & byTypeBB[Pt];
if (!b)
return min_attacker<Pt + 1>(byTypeBB, to, stmAttackers, occupied, attackers);
return min_attacker<PieceType(Pt + 1)>(byTypeBB, to, stmAttackers, occupied, attackers);

occupied ^= lsb(b); // Remove the attacker from occupied

Expand All @@ -77,7 +77,7 @@ PieceType min_attacker(const Bitboard* byTypeBB, Square to, Bitboard stmAttacker
// X-ray may add already processed pieces because byTypeBB[] is constant: in
// the rook example, now attackers contains _again_ rook in a7, so remove it.
attackers &= occupied;
return (PieceType)Pt;
return Pt;
}

template<>
Expand Down
5 changes: 5 additions & 0 deletions src/position.h
Expand Up @@ -108,6 +108,7 @@ class Position {
Bitboard checkers() const;
Bitboard blockers_for_king(Color c) const;
Bitboard check_squares(PieceType pt) const;
bool is_discovery_check_on_king(Color c, Move m) const;

// Attacks to/from a given square
Bitboard attackers_to(Square s) const;
Expand Down Expand Up @@ -316,6 +317,10 @@ inline Bitboard Position::check_squares(PieceType pt) const {
return st->checkSquares[pt];
}

inline bool Position::is_discovery_check_on_king(Color c, Move m) const {
return st->blockersForKing[c] & from_sq(m);
}

inline bool Position::pawn_passed(Color c, Square s) const {
return !(pieces(~c, PAWN) & passed_pawn_span(c, s));
}
Expand Down
12 changes: 6 additions & 6 deletions src/search.cpp
Expand Up @@ -739,7 +739,7 @@ namespace {
}
else if (ttHit)
{
// Never assume anything on values stored in TT
// Never assume anything about values stored in TT
ss->staticEval = eval = tte->eval();
if (eval == VALUE_NONE)
ss->staticEval = eval = evaluate(pos);
Expand Down Expand Up @@ -978,7 +978,7 @@ namespace {

// Check extension (~2 Elo)
else if ( givesCheck
&& (pos.blockers_for_king(~us) & from_sq(move) || pos.see_ge(move)))
&& (pos.is_discovery_check_on_king(~us, move) || pos.see_ge(move)))
extension = ONE_PLY;

// Castling extension
Expand Down Expand Up @@ -1013,7 +1013,7 @@ namespace {
&& !givesCheck
&& (!pos.advanced_pawn_push(move) || pos.non_pawn_material(~us) > BishopValueMg))
{
// Move count based pruning (~30 Elo)
// Move count based pruning
if (moveCountPruning)
continue;

Expand All @@ -1037,8 +1037,8 @@ namespace {
if (!pos.see_ge(move, Value(-29 * lmrDepth * lmrDepth)))
continue;
}
else if ((!givesCheck || !extension)
&& !pos.see_ge(move, -PawnValueEg * (depth / ONE_PLY))) // (~20 Elo)
else if ( (!givesCheck || !extension)
&& !pos.see_ge(move, -PawnValueEg * (depth / ONE_PLY))) // (~20 Elo)
continue;
}

Expand Down Expand Up @@ -1341,7 +1341,7 @@ namespace {
{
if (ttHit)
{
// Never assume anything on values stored in TT
// Never assume anything about values stored in TT
if ((ss->staticEval = bestValue = tte->eval()) == VALUE_NONE)
ss->staticEval = bestValue = evaluate(pos);

Expand Down

0 comments on commit 4ae5a7b

Please sign in to comment.