Fix check for bishop pair in material imbalance
authorEelco de Groot <eelcogro@gmail.com>
Mon, 2 Sep 2013 20:50:32 +0000 (22:50 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 3 Sep 2013 17:40:34 +0000 (19:40 +0200)
Prefer pos.bishop_pair() to pos.count<BISHOP>(WHITE) > 1
because the first checks that the two bishops are on
different color squares.

Although the change seems to kick in only in very rare cases,
quite surprisingly it was able to pass SPRT test at short TC.

LLR: 2.95 (-2.94,2.94)
Total: 39818 W: 8174 L: 7956 D: 23688

bench: 3453941

src/material.cpp

index 0f1e19b9ee4a954f69bb84844e9227110f21709a..88882959e9eec1befbd86a874f7dbb089e8f41f8 100644 (file)
@@ -263,14 +263,14 @@ Entry* probe(const Position& pos, Table& entries, Endgames& endgames) {
       e->spaceWeight = make_score(minorPieceCount * minorPieceCount, 0);
   }
 
-  // Evaluate the material imbalance. We use PIECE_TYPE_NONE as a place holder
+  // Evaluate the material imbalance. We use NO_PIECE_TYPE as a place holder
   // for the bishop pair "extended piece", this allow us to be more flexible
   // in defining bishop pair bonuses.
   const int pieceCount[COLOR_NB][PIECE_TYPE_NB] = {
-  { pos.count<BISHOP>(WHITE) > 1, pos.count<PAWN>(WHITE), pos.count<KNIGHT>(WHITE),
-    pos.count<BISHOP>(WHITE)    , pos.count<ROOK>(WHITE), pos.count<QUEEN >(WHITE) },
-  { pos.count<BISHOP>(BLACK) > 1, pos.count<PAWN>(BLACK), pos.count<KNIGHT>(BLACK),
-    pos.count<BISHOP>(BLACK)    , pos.count<ROOK>(BLACK), pos.count<QUEEN >(BLACK) } };
+  { pos.bishop_pair(WHITE)  , pos.count<PAWN>(WHITE), pos.count<KNIGHT>(WHITE),
+    pos.count<BISHOP>(WHITE), pos.count<ROOK>(WHITE), pos.count<QUEEN >(WHITE) },
+  { pos.bishop_pair(BLACK)  , pos.count<PAWN>(BLACK), pos.count<KNIGHT>(BLACK),
+    pos.count<BISHOP>(BLACK), pos.count<ROOK>(BLACK), pos.count<QUEEN >(BLACK) } };
 
   e->value = (int16_t)((imbalance<WHITE>(pieceCount) - imbalance<BLACK>(pieceCount)) / 16);
   return e;