Skip to content

Commit

Permalink
Simplify outpost evaluation
Browse files Browse the repository at this point in the history
STC

LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 114149 W: 21986 L: 22032 D: 70131

LTC

LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 52232 W: 8468 L: 8396 D: 35368

Bench: 6716940

No functional change

Resolves #363
  • Loading branch information
lucasart authored and zamar committed Jun 7, 2015
1 parent 7b8ffe0 commit ad87d70
Showing 1 changed file with 5 additions and 47 deletions.
52 changes: 5 additions & 47 deletions src/evaluate.cpp
Expand Up @@ -124,24 +124,8 @@ namespace {
S( 94, 99), S( 96,100), S(99,111), S(99,112) }
};

// Outpost[Bishop/Knight][Square] contains bonuses for knights and bishops
// outposts, indexed by piece type and square (from white's point of view).
const Value Outpost[][SQUARE_NB] = {
{// A B C D E F G H
V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // Knights
V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0),
V(0), V(0), V(3), V(9), V(9), V(3), V(0), V(0),
V(0), V(4),V(18),V(25),V(25),V(18), V(4), V(0),
V(4), V(9),V(29),V(38),V(38),V(29), V(9), V(4),
V(2), V(9),V(19),V(15),V(15),V(19), V(9), V(2) },
{
V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // Bishops
V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0),
V(2), V(4), V(3), V(8), V(8), V(3), V(4), V(2),
V(1), V(9), V(9),V(13),V(13), V(9), V(9), V(1),
V(2), V(8),V(21),V(24),V(24),V(21), V(8), V(2),
V(0), V(4), V(6), V(6), V(6), V(6), V(4), V(0) }
};
// Outpost[knight/bishop][supported by pawn]
const Score Outpost[2][2] = {{S(28,7), S(42,11)}, {S(12,3), S(18,5)}};

// Threat[defended/weak][minor/major attacking][attacked PieceType] contains
// bonuses according to which piece type attacks which one.
Expand Down Expand Up @@ -235,33 +219,6 @@ namespace {
}


// evaluate_outpost() evaluates bishop and knight outpost squares

template<PieceType Pt, Color Us>
Score evaluate_outpost(const Position& pos, const EvalInfo& ei, Square s) {

const Color Them = (Us == WHITE ? BLACK : WHITE);

assert (Pt == BISHOP || Pt == KNIGHT);

// Initial bonus based on square
Value bonus = Outpost[Pt == BISHOP][relative_square(Us, s)];

// Increase bonus if supported by pawn, especially if the opponent has
// no minor piece which can trade with the outpost piece.
if (bonus && (ei.attackedBy[Us][PAWN] & s))
{
if ( !pos.pieces(Them, KNIGHT)
&& !(squares_of_color(s) & pos.pieces(Them, BISHOP)))
bonus += bonus + bonus / 2;
else
bonus += bonus / 2;
}

return make_score(bonus * 2, bonus / 2);
}


// evaluate_pieces() assigns bonuses and penalties to the pieces of a given color

template<PieceType Pt, Color Us, bool Trace>
Expand Down Expand Up @@ -310,8 +267,9 @@ namespace {
if (Pt == BISHOP || Pt == KNIGHT)
{
// Bonus for outpost square
if (!(pos.pieces(Them, PAWN) & pawn_attack_span(Us, s)))
score += evaluate_outpost<Pt, Us>(pos, ei, s);
if ( relative_rank(Us, s) >= RANK_4
&& !(pos.pieces(Them, PAWN) & pawn_attack_span(Us, s)))
score += Outpost[Pt == BISHOP][!!(ei.attackedBy[Us][PAWN] & s)];

// Bonus when behind a pawn
if ( relative_rank(Us, s) < RANK_5
Expand Down

0 comments on commit ad87d70

Please sign in to comment.