Pawns count imbalance table
authorjoergoster <osterj165@googlemail.com>
Fri, 17 Mar 2017 21:41:08 +0000 (14:41 -0700)
committerJoona Kiiski <joona@zoox.com>
Fri, 17 Mar 2017 21:41:08 +0000 (14:41 -0700)
Instead of having a continuous increasing bonus for our number of pawns when calculating imbalance, use a separate lookup array with tuned values.
Idea by GuardianRM.

STC
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 16155 W: 2980 L: 2787 D: 10388

LTC
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 100478 W: 13055 L: 12615 D: 74808

Bench: 6128779

Closes #1030

src/material.cpp

index 7f760ee..498ef33 100644 (file)
@@ -35,7 +35,7 @@ namespace {
     //            OUR PIECES
     // pair pawn knight bishop rook queen
     {1667                               }, // Bishop pair
-    {  40,    2                         }, // Pawn
+    {  40,    0                         }, // Pawn
     {  32,  255,  -3                    }, // Knight      OUR PIECES
     {   0,  104,   4,    0              }, // Bishop
     { -26,   -2,  47,   105,  -149      }, // Rook
@@ -53,6 +53,11 @@ namespace {
     { 101,  100, -37,   141,  268,    0 }  // Queen
   };
 
+  // PawnsSet[count] contains a bonus/malus indexed by number of pawns
+  const int PawnsSet[9] = { 
+     24, -32, 107, -51, 117, -9, -126, -21, 31
+  };
+
   // Endgame evaluation and scaling functions are accessed directly and not through
   // the function maps because they correspond to more than one material hash key.
   Endgame<KXK>    EvaluateKXK[] = { Endgame<KXK>(WHITE),    Endgame<KXK>(BLACK) };
@@ -89,7 +94,7 @@ namespace {
 
     const Color Them = (Us == WHITE ? BLACK : WHITE);
 
-    int bonus = 0;
+    int bonus = PawnsSet[pieceCount[Us][PAWN]];
 
     // Second-degree polynomial material imbalance by Tord Romstad
     for (int pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1)