X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=f2c5cf7f7488cf1b5cca75cca41bbe4bbdb894d1;hp=563e707ffe48df1c01d0e65dd5b4cbb7fb03e2f9;hb=ad87d707fffeeac9aa1ae3e3e8d6fa2449ea1df9;hpb=7b8ffe0f5d89784c6b360331a7781604305371d9 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