From cf0561d31a177454e1c16db21677da20348b0124 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 25 Feb 2012 12:45:34 +0100 Subject: [PATCH] Introduce pinning bonus Add a bonus if a slider is pinning an enemy piece. Idea from Critter. After 27443 games at 2"+0.05 Mod vs Orig 5900 - 5518 - 16025 ELO +4 (+- 2.7) Signed-off-by: Marco Costalba --- src/evaluate.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 50240031..83a0c912 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -493,10 +493,8 @@ namespace { else assert(false); - // Update attack info ei.attackedBy[Us][Piece] |= b; - // King attacks if (b & ei.kingRing[Them]) { ei.kingAttackersCount[Us]++; @@ -506,12 +504,23 @@ namespace { ei.kingAdjacentZoneAttacksCount[Us] += popcount(bb); } - // Mobility mob = (Piece != QUEEN ? popcount(b & mobilityArea) : popcount(b & mobilityArea)); mobility += MobilityBonus[Piece][mob]; + // Add a bonus if a slider is pinning an enemy piece + if ( (Piece == BISHOP || Piece == ROOK || Piece == QUEEN) + && (PseudoAttacks[Piece][pos.king_square(Them)] & s)) + { + b = BetweenBB[s][pos.king_square(Them)] & pos.occupied_squares(); + + assert(b); + + if (!(b & (b - 1)) && (b & pos.pieces(Them))) + score += ThreatBonus[Piece][type_of(pos.piece_on(first_1(b)))] / 2; + } + // Decrease score if we are attacked by an enemy pawn. Remaining part // of threat evaluation must be done later when we have full attack info. if (ei.attackedBy[Them][PAWN] & s) -- 2.39.2