From 7cb8817ef2194737140410b07997fde9f777ef32 Mon Sep 17 00:00:00 2001 From: Vizvezdenec Date: Fri, 21 Jun 2019 10:04:31 +0200 Subject: [PATCH] Rewrite "More bonus for free passed pawn" -removes wideUnsafeSquares bitboard -removes a couple of bitboard operations -removes one if operator -updates comments so they actually represent what this part of code is doing now. passed non-regression STC http://tests.stockfishchess.org/tests/view/5d0c1ae50ebc5925cf0aa8db LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 16892 W: 3865 L: 3733 D: 9294 No functional change --- src/evaluate.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index cf478909..da76de10 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -605,7 +605,6 @@ namespace { }; Bitboard b, bb, squaresToQueen, defendedSquares, unsafeSquares; - Bitboard wideUnsafeSquares; Score score = SCORE_ZERO; b = pe->passed_pawns(Us); @@ -636,11 +635,8 @@ namespace { // If the pawn is free to advance, then increase the bonus if (pos.empty(blockSq)) { - // If there is a rook or queen attacking/defending the pawn from behind, - // consider all the squaresToQueen. Otherwise consider only the squares - // in the pawn's path attacked or occupied by the enemy. - defendedSquares = unsafeSquares = squaresToQueen = forward_file_bb(Us, s); - wideUnsafeSquares = AllSquares; + defendedSquares = squaresToQueen = forward_file_bb(Us, s); + unsafeSquares = passed_pawn_span(Us, s); bb = forward_file_bb(Them, s) & pos.pieces(ROOK, QUEEN); @@ -649,14 +645,14 @@ namespace { if (!(pos.pieces(Them) & bb)) unsafeSquares &= attackedBy[Them][ALL_PIECES] | pos.pieces(Them); - - if (!unsafeSquares) - wideUnsafeSquares = (attackedBy[Them][ALL_PIECES] | pos.pieces(Them)) - & (shift(squaresToQueen) | shift(squaresToQueen)); - - // If there aren't any enemy attacks, assign a big bonus. Otherwise - // assign a smaller bonus if the block square isn't attacked. - int k = !wideUnsafeSquares ? 35 : !unsafeSquares ? 20 : !(unsafeSquares & blockSq) ? 9 : 0; + + // If there are no enemy attacks on passed pawn span, assign a big bonus. + // Otherwise assign a smaller bonus if the path to queen is not attacked + // and even smaller bonus if it is attacked but block square is not. + int k = !unsafeSquares ? 35 : + !(unsafeSquares & squaresToQueen) ? 20 : + !(unsafeSquares & blockSq) ? 9 : + 0 ; // Assign a larger bonus if the block square is defended. if (defendedSquares & blockSq) -- 2.39.2