1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Simplify outpost evaluation

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
This commit is contained in:
lucasart 2015-06-07 09:49:01 +01:00 committed by Joona Kiiski
parent 7b8ffe0f5d
commit ad87d707ff

View file

@ -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.
@ -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>
@ -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