Evaluate mobility of pinned pieces exactly
authorChris Caino <chricainogithub@gmail.com>
Sat, 9 Nov 2013 02:06:47 +0000 (02:06 +0000)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 10 Nov 2013 10:52:38 +0000 (11:52 +0100)
Previously some squares could be "incorrectly" awarded
to a pinned piece.

e.g. in 3k4/1q6/3b4/3Q4/8/5K2/B7/8 b - - 0 1 the black
bishop get 4 squares too many and the white queen gets 6.

Passed both short TC.
LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 4871 W: 934 L: 817 D: 3120

And long TC:
LLR: 2.96 (-2.94,2.94) [0.00,6.00]
Total: 38968 W: 6113 L: 5837 D: 27018

bench: 9282549

src/bitboard.cpp
src/bitboard.h
src/evaluate.cpp

index ae653b1c2114540b997a4cb6b708a400c32a13e0..7687cbb4441cb5cf66c40277c39a5532be4f8178 100644 (file)
@@ -45,6 +45,7 @@ Bitboard AdjacentFilesBB[FILE_NB];
 Bitboard InFrontBB[COLOR_NB][RANK_NB];
 Bitboard StepAttacksBB[PIECE_NB][SQUARE_NB];
 Bitboard BetweenBB[SQUARE_NB][SQUARE_NB];
+Bitboard LineBB[SQUARE_NB][SQUARE_NB];
 Bitboard DistanceRingsBB[SQUARE_NB][8];
 Bitboard ForwardBB[COLOR_NB][SQUARE_NB];
 Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB];
@@ -225,6 +226,9 @@ void Bitboards::init() {
 
               for (Square s = s1 + delta; s != s2; s += delta)
                   BetweenBB[s1][s2] |= s;
+
+              PieceType pc = (PseudoAttacks[BISHOP][s1] & s2) ? BISHOP : ROOK;
+              LineBB[s1][s2] = (PseudoAttacks[pc][s1] & PseudoAttacks[pc][s2]) | s1 | s2;
           }
 }
 
index 3afbeedfbab42ee086000de51a4964350b34bea5..deba91d541253de36da806db84afb8cd34b27dce 100644 (file)
@@ -74,6 +74,7 @@ extern Bitboard AdjacentFilesBB[FILE_NB];
 extern Bitboard InFrontBB[COLOR_NB][RANK_NB];
 extern Bitboard StepAttacksBB[PIECE_NB][SQUARE_NB];
 extern Bitboard BetweenBB[SQUARE_NB][SQUARE_NB];
+extern Bitboard LineBB[SQUARE_NB][SQUARE_NB];
 extern Bitboard DistanceRingsBB[SQUARE_NB][8];
 extern Bitboard ForwardBB[COLOR_NB][SQUARE_NB];
 extern Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB];
index 279802387402906e969f1361eb2051a03a04efe7..dd719554e18971081f4bd3648d7cbafdec268bc8 100644 (file)
@@ -492,7 +492,7 @@ Value do_evaluate(const Position& pos) {
                             : pos.attacks_from<Piece>(s);
 
         if (ei.pinnedPieces[Us] & s)
-            b &= PseudoAttacks[QUEEN][pos.king_square(Us)];
+            b &= LineBB[pos.king_square(Us)][s];
 
         ei.attackedBy[Us][Piece] |= b;