From: lucasart Date: Sun, 7 Jun 2015 08:49:01 +0000 (+0100) Subject: Simplify outpost evaluation X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=ad87d707fffeeac9aa1ae3e3e8d6fa2449ea1df9 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 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 563e707f..f2c5cf7f 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -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 - 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 @@ -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(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