From: protonspring Date: Mon, 3 Jun 2019 13:16:33 +0000 (-0600) Subject: Simplify Outposts #2176 X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=09caea5cab0b6c23fea8347a740bcc00083da6ab;hp=434b2c72a44ba255c14957f519e3993ea3d5d6bc Simplify Outposts #2176 This is a functional simplification. This is NOT the exact version that was tested. Beyond the testing, an assignment was removed and a piece changes for consistency. Instead of rewarding ANY square past an opponent pawn as an "outpost," only use squares that are protected by our pawn. I believe this is more consistent with what the chess world calls an "outpost." STC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 23540 W: 5387 L: 5269 D: 12884 http://tests.stockfishchess.org/tests/view/5cf51e6d0ebc5925cf08b823 LTC LLR: 2.94 (-2.94,2.94) [-3.00,1.00] Total: 53085 W: 9271 L: 9204 D: 34610 http://tests.stockfishchess.org/tests/view/5cf5279e0ebc5925cf08b992 bench 3424592 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 8c1b0b08..30c22a8e 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -141,7 +141,7 @@ namespace { constexpr Score KnightOnQueen = S( 16, 12); constexpr Score LongDiagonalBishop = S( 45, 0); constexpr Score MinorBehindPawn = S( 18, 3); - constexpr Score Outpost = S( 9, 3); + constexpr Score Outpost = S( 36, 12); constexpr Score PawnlessFlank = S( 17, 95); constexpr Score RestrictedPiece = S( 7, 7); constexpr Score RookOnPawn = S( 10, 32); @@ -305,14 +305,12 @@ namespace { if (Pt == BISHOP || Pt == KNIGHT) { // Bonus if piece is on an outpost square or can reach one - bb = OutpostRanks & ~pe->pawn_attacks_span(Them); + bb = OutpostRanks & attackedBy[Us][PAWN] & ~pe->pawn_attacks_span(Them); if (bb & s) - score += Outpost * (Pt == KNIGHT ? 4 : 2) - * ((attackedBy[Us][PAWN] & s) ? 2 : 1); + score += Outpost * (Pt == KNIGHT ? 2 : 1); - else if (bb &= b & ~pos.pieces(Us)) - score += Outpost * (Pt == KNIGHT ? 2 : 1) - * ((attackedBy[Us][PAWN] & bb) ? 2 : 1); + else if (bb & b & ~pos.pieces(Us)) + score += Outpost / (Pt == KNIGHT ? 1 : 2); // Knight and Bishop bonus for being right behind a pawn if (shift(pos.pieces(PAWN)) & s)