From 69ec09bd4b5bdf61f3f49f12d88224e1d656020c Mon Sep 17 00:00:00 2001 From: Stefan Geschwentner Date: Sun, 7 May 2017 20:38:03 -0700 Subject: [PATCH] Bonus for pawn scrifice which create passed pawn STC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 16752 W: 3141 L: 2944 D: 10667 LTC: LLR: 3.34 (-2.94,2.94) [0.00,5.00] Total: 33928 W: 4544 L: 4300 D: 25084 Bench: 5639223 Closes #1092 --- src/evaluate.cpp | 6 +++--- src/pawns.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index e381d6f8..92ad6e9a 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -618,7 +618,7 @@ namespace { { Square s = pop_lsb(&b); - assert(!(pos.pieces(PAWN) & forward_bb(Us, s))); + assert(!(pos.pieces(Them, PAWN) & forward_bb(Us, s + pawn_push(Us)))); bb = forward_bb(Us, s) & (ei.attackedBy[Them][ALL_PIECES] | pos.pieces(Them)); score -= HinderPassedPawn * popcount(bb); @@ -675,8 +675,8 @@ namespace { } // rr != 0 // 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))) + // pawn push to become passed or have a pawn in front of them. + if (!pos.pawn_passed(Us, s + pawn_push(Us)) || (pos.pieces(PAWN) & forward_bb(Us, s))) mbonus /= 2, ebonus /= 2; score += make_score(mbonus, ebonus) + PassedFile[file_of(s)]; diff --git a/src/pawns.cpp b/src/pawns.cpp index 17a96670..95d5fb4c 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -163,6 +163,13 @@ namespace { && popcount(phalanx) >= popcount(leverPush)) e->passedPawns[Us] |= s; + else if ( stoppers == SquareBB[s + Up] + && relative_rank(Us, s) >= RANK_5 + && (b = (shift(supported) & ~theirPawns))) + while(b) + if(!more_than_one(theirPawns & PawnAttacks[Us][pop_lsb(&b)])) + e->passedPawns[Us] |= s; + // Score this pawn if (!neighbours) score -= Isolated[opposed]; -- 2.39.2