Merge Gary's bishop_pin patch
authorMarco Costalba <mcostalba@gmail.com>
Wed, 20 Feb 2013 11:19:19 +0000 (12:19 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 20 Feb 2013 11:39:09 +0000 (12:39 +0100)
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

1  2 
src/evaluate.cpp

diff --combined src/evaluate.cpp
index 5140c4932ab022ab53b94268188363b4404eba4b,02810b78490093f1f14f7c220897f2661f4bc63f..3ba405ccf28ff378192bed7b905ef1fc9f9686c9
@@@ -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)))
                        & ~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)