From: Marco Costalba Date: Mon, 25 May 2009 14:48:47 +0000 (+0100) Subject: Passed pawns evaluation tweak X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=738bf66a2d04d27ce8c5481fef52dc3adc3cafe1;ds=sidebyside Passed pawns evaluation tweak Do not penalize if in our adavncing pawn's path there are non-pawns enemy pieces. Especially if they can be attacked by us. Patch is mine, but original idea and also fixing of a first, wrong, version of the patch is from Eelco de Groot. Tests with Joona framework seems to confirm patch is good Results for patch 'disabled' based on 5776 games: Win percentage: 41.309 (+- 0.526) [+- 1.053] Results for patch 'enabled' based on 6400 games: Win percentage: 42.422 (+- 0.500) [+- 1.000] Signed-off-by: Marco Costalba --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 9fd4040e..372313b7 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -933,29 +933,23 @@ namespace { && (squares_behind(us, s) & pos.rooks_and_queens(them))) b3 = b2; - if ((b2 & pos.pieces_of_color(them)) == EmptyBoardBB) - { - // There are no enemy pieces in the pawn's path! Are any of the - // squares in the pawn's path attacked by the enemy? - if (b3 == EmptyBoardBB) - // No enemy attacks, huge bonus! - ebonus += Value(tr * (b2 == b4 ? 17 : 15)); - else - // OK, there are enemy attacks. Are those squares which are - // attacked by the enemy also attacked by us? If yes, big bonus - // (but smaller than when there are no enemy attacks), if no, - // somewhat smaller bonus. - ebonus += Value(tr * ((b3 & b4) == b3 ? 13 : 8)); - } + // Squares attacked or occupied by enemy pieces + b3 |= (b2 & pos.pieces_of_color(them)); + + // There are no enemy pawns in the pawn's path + assert((b2 & pos.pieces_of_color_and_type(them, PAWN)) == EmptyBoardBB); + + // Are any of the squares in the pawn's path attacked or occupied by the enemy? + if (b3 == EmptyBoardBB) + // No enemy attacks or pieces, huge bonus! + ebonus += Value(tr * (b2 == b4 ? 17 : 15)); else - { - // There are some enemy pieces in the pawn's path. While this is - // sad, we still assign a moderate bonus if all squares in the path - // which are either occupied by or attacked by enemy pieces are - // also attacked by us. - if (((b3 | (b2 & pos.pieces_of_color(them))) & ~b4) == EmptyBoardBB) - ebonus += Value(tr * 6); - } + // OK, there are enemy attacks or pieces (but not pawns). Are those + // squares which are attacked by the enemy also attacked by us? + // If yes, big bonus (but smaller than when there are no enemy attacks), + // if no, somewhat smaller bonus. + ebonus += Value(tr * ((b3 & b4) == b3 ? 13 : 8)); + // At last, add a small bonus when there are no *friendly* pieces // in the pawn's path. if ((b2 & pos.pieces_of_color(us)) == EmptyBoardBB)