From: Leonid Pechenik Date: Mon, 16 Jun 2014 10:32:11 +0000 (+0200) Subject: Simplify unstoppable pawns X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=66c93245e08e812ea2491a12b0341fb2e270066f;hp=73ca93f3c07867d16318d469b1054c45ddca79bf Simplify unstoppable pawns Tested in no-regression mode and passed both STC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 17919 W: 3103 L: 2978 D: 11838 and LTC LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 31460 W: 4414 L: 4308 D: 22738 bench: 7709279 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 1e1e762c..1099a6e4 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -613,17 +613,14 @@ namespace { // evaluate_unstoppable_pawns() scores the most advanced among the passed and - // candidate pawns. In case opponent has no pieces but pawns, this is somewhat - // related to the possibility that pawns are unstoppable. + // candidate pawns. In case both players have no pieces but pawns, this is + // somewhat related to the possibility that pawns are unstoppable. - Score evaluate_unstoppable_pawns(const Position& pos, Color us, const EvalInfo& ei) { + Score evaluate_unstoppable_pawns(Color us, const EvalInfo& ei) { Bitboard b = ei.pi->passed_pawns(us) | ei.pi->candidate_pawns(us); - if (!b || pos.non_pawn_material(~us)) - return SCORE_ZERO; - - return Unstoppable * int(relative_rank(us, frontmost_sq(us, b))); + return b ? Unstoppable * int(relative_rank(us, frontmost_sq(us, b))) : SCORE_ZERO; } @@ -716,10 +713,10 @@ namespace { score += evaluate_passed_pawns(pos, ei) - evaluate_passed_pawns(pos, ei); - // If one side has only a king, score for potential unstoppable pawns - if (!pos.non_pawn_material(WHITE) || !pos.non_pawn_material(BLACK)) - score += evaluate_unstoppable_pawns(pos, WHITE, ei) - - evaluate_unstoppable_pawns(pos, BLACK, ei); + // If both sides have only pawns, score for potential unstoppable pawns + if (!pos.non_pawn_material(WHITE) && !pos.non_pawn_material(BLACK)) + score += evaluate_unstoppable_pawns(WHITE, ei) + - evaluate_unstoppable_pawns(BLACK, ei); // Evaluate space for both sides, only in middlegame if (ei.mi->space_weight())