Merge branch 'master' into bishop_pin_clop
authorGary Linscott <glinscott@gmail.com>
Tue, 19 Feb 2013 15:31:52 +0000 (10:31 -0500)
committerGary Linscott <glinscott@gmail.com>
Tue, 19 Feb 2013 15:31:52 +0000 (10:31 -0500)
1  2 
src/evaluate.cpp

diff --combined src/evaluate.cpp
index e17a3e340b939206662d259d8f58a42259585708,8192536f38990d04217c1b6a918b9bf27d516189..02810b78490093f1f14f7c220897f2661f4bc63f
@@@ -150,8 -150,6 +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);
  
@@@ -498,7 -496,7 +498,7 @@@ Value do_evaluate(const Position& pos, 
  
      // Init king safety tables only if we are going to use them
      if (   pos.piece_count(Us, QUEEN)
-         && pos.non_pawn_material(Us) >= QueenValueMg + RookValueMg)
+         && pos.non_pawn_material(Us) > QueenValueMg + PawnValueMg)
      {
          ei.kingRing[Them] = (b | (Us == WHITE ? b >> 8 : b << 8));
          b &= ei.attackedBy[Us][PAWN];
  
          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))
 +                 score += BishopPinBonus;
 +        }
  
          // Bishop and knight outposts squares
          if (    (Piece == BISHOP || Piece == KNIGHT)
                        & ~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)