X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=d9aae3d32bd3667a2b7daa415afeaf7c38b9380e;hp=6e33bb7215d0579e035915d20c40811dac8c8ae9;hb=471f7a1b5c4da03a712da2ce079034de45b4c35b;hpb=58c181de9a8f505e539b2e7811cf820175c73ebf;ds=sidebyside diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 6e33bb72..d9aae3d3 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -606,10 +606,11 @@ namespace { } - // evaluate_passed_pawns() evaluates the passed pawns of the given color + // evaluate_passer_pawns() evaluates the passed pawns and candidate passed + // pawns of the given color. template - Score evaluate_passed_pawns(const Position& pos, const EvalInfo& ei) { + Score evaluate_passer_pawns(const Position& pos, const EvalInfo& ei) { const Color Them = (Us == WHITE ? BLACK : WHITE); @@ -622,7 +623,6 @@ namespace { { Square s = pop_lsb(&b); - assert(pos.pawn_passed(Us, s)); assert(!(pos.pieces(PAWN) & forward_bb(Us, s))); bb = forward_bb(Us, s) & (ei.attackedBy[Them][ALL_PIECES] | pos.pieces(Them)); @@ -683,6 +683,11 @@ namespace { if (!pos.non_pawn_material(Them)) ebonus += 20; + // Scale down bonus for candidate passers which need more than one pawn + // push to become passed. + if (!pos.pawn_passed(Us, s + pawn_push(Us))) + mbonus /= 2, ebonus /= 2; + score += make_score(mbonus, ebonus) + PassedFile[file_of(s)]; } @@ -844,8 +849,8 @@ Value Eval::evaluate(const Position& pos) { - evaluate_threats(pos, ei); // Evaluate passed pawns, we need full attack information including king - score += evaluate_passed_pawns(pos, ei) - - evaluate_passed_pawns(pos, ei); + score += evaluate_passer_pawns(pos, ei) + - evaluate_passer_pawns(pos, ei); // Evaluate space for both sides, only during opening if (pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK) >= 12222)