From: Marco Costalba Date: Wed, 20 Feb 2013 11:19:19 +0000 (+0100) Subject: Merge Gary's bishop_pin patch X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=9a1d5f0f1d8a12a85b198688d4f1d636a146eb7a;hp=-c Merge Gary's bishop_pin patch Give a bonus if a bishop can pin a piece or can give a discovered check through an x-ray attack. Seems good after 24000 games at 15"+0.05 (single thread): ELO: 12.30 +- 99%: 5.79 95%: 4.40 LOS: 100.00% Total: 24000 W: 4931 L: 4082 D: 14987 bench: 4917064 --- 9a1d5f0f1d8a12a85b198688d4f1d636a146eb7a diff --combined src/evaluate.cpp index 5140c493,02810b78..3ba405cc --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@@ -1,7 -1,7 +1,7 @@@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2012 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2008-2013 Marco Costalba, Joona Kiiski, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@@ -150,6 -150,8 +150,8 @@@ namespace #undef S + const Score BishopPinBonus = make_score(66, 11); + // Bonus for having the side to move (modified by Joona Kiiski) const Score Tempo = make_score(24, 11); @@@ -577,23 -579,16 +579,18 @@@ Value do_evaluate(const Position& pos, 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.pieces(); - - assert(b); - - if (!more_than_one(b) && (b & pos.pieces(Them))) - score += ThreatBonus[Piece][type_of(pos.piece_on(lsb(b)))]; - } - // 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) score -= ThreatenedByPawnPenalty[Piece]; - else if (Piece == BISHOP && (PseudoAttacks[Piece][pos.king_square(Them)] & s)) { - const Bitboard between = BetweenBB[s][pos.king_square(Them)] & pos.pieces(); - if (!more_than_one(between)) + ++ // Otherwise give a bonus if we are a bishop and can pin a piece or ++ // can give a discovered check through an x-ray attack. ++ else if ( Piece == BISHOP ++ && (PseudoAttacks[Piece][pos.king_square(Them)] & s) ++ && !more_than_one(BetweenBB[s][pos.king_square(Them)] & pos.pieces())) + score += BishopPinBonus; - } + // Bishop and knight outposts squares if ( (Piece == BISHOP || Piece == KNIGHT) && !(pos.pieces(Them, PAWN) & attack_span_mask(Us, s))) @@@ -699,8 -694,7 +696,7 @@@ & ~ei.attackedBy[Them][0]; if (undefendedMinors) - score += more_than_one(undefendedMinors) ? UndefendedMinorPenalty * 2 - : UndefendedMinorPenalty; + score += UndefendedMinorPenalty; // Enemy pieces not defended by a pawn and under our attack weakEnemies = pos.pieces(Them)