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:
parent
7b8ffe0f5d
commit
ad87d707ff
1 changed files with 5 additions and 47 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue