Tidy up middle game specific evaluation
authorMarco Costalba <mcostalba@gmail.com>
Thu, 25 Sep 2008 11:22:14 +0000 (13:22 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 26 Sep 2008 03:54:49 +0000 (05:54 +0200)
Also add starting position to benchmarks.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/benchmark.cpp
src/evaluate.cpp

index 7e2628b1ea77e7d82b38547bd8cdb8d0d64e751c..d922c048c9adb8ad251a8ea6b97c2bc90a719b01 100644 (file)
@@ -34,7 +34,8 @@
 //// Variables
 ////
 
-const std::string BenchmarkPositions[15] = {
+const std::string BenchmarkPositions[16] = {
+  "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
   "r4rk1/1b2qppp/p1n1p3/1p6/1b1PN3/3BRN2/PP3PPP/R2Q2K1 b - - 7 16",
   "4r1k1/ppq3pp/3b4/2pP4/2Q1p3/4B1P1/PP5P/R5K1 b - - 0 20",
   "4rrk1/pp1n3p/3q2pQ/2p1pb2/2PP4/2P3N1/P2B2PP/4RRK1 b - - 7 19",
@@ -116,7 +117,7 @@ void benchmark(const std::string& commandLine) {
       }
       fenFile.close();
   } else
-      for (int i = 0; i < 15; i++)
+      for (int i = 0; i < 16; i++)
           positions.push_back(std::string(BenchmarkPositions[i]));
 
   std::vector<std::string>::iterator it;
index 049a40deacd3de78f18023a0df22c45e338048b4..19fcd5f815c68b7822696a8ad04bb1f6623220d9 100644 (file)
@@ -419,36 +419,26 @@ Value evaluate(const Position &pos, EvalInfo &ei, int threadID) {
       && (   (factor[WHITE] == SCALE_FACTOR_NORMAL && ei.egValue > Value(0))
           || (factor[BLACK] == SCALE_FACTOR_NORMAL && ei.egValue < Value(0))))
   {
-    if (pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK) == 2*BishopValueMidgame)
-    {
-      // Only the two bishops
-      if (pos.pawn_count(WHITE) + pos.pawn_count(BLACK) == 1)
+      ScaleFactor sf;
+
+      // Only the two bishops ?
+      if (   pos.non_pawn_material(WHITE) == BishopValueMidgame
+          && pos.non_pawn_material(BLACK) == BishopValueMidgame)
       {
-        // KBP vs KB with only a single pawn; almost certainly a draw.
-        if (factor[WHITE] == SCALE_FACTOR_NORMAL)
-            factor[WHITE] = ScaleFactor(8);
-        if (factor[BLACK] == SCALE_FACTOR_NORMAL)
-            factor[BLACK] = ScaleFactor(8);
+          // Check for KBP vs KB with only a single pawn that is almost
+          // certainly a draw or at least two pawns.
+          bool one_pawn = (pos.pawn_count(WHITE) + pos.pawn_count(BLACK) == 1);
+          sf = one_pawn ? ScaleFactor(8) : ScaleFactor(32);
       }
       else
-      {
-        // At least two pawns
-        if (factor[WHITE] == SCALE_FACTOR_NORMAL)
-            factor[WHITE] = ScaleFactor(32);
-        if (factor[BLACK] == SCALE_FACTOR_NORMAL)
-            factor[BLACK] = ScaleFactor(32);
-      }
-    }
-    else
-    {
-      // Endgame with opposite-colored bishops, but also other pieces.
-      // Still a bit drawish, but not as drawish as with only the two
-      // bishops.
+          // Endgame with opposite-colored bishops, but also other pieces. Still
+          // a bit drawish, but not as drawish as with only the two bishops.
+           sf = ScaleFactor(50);
+
       if (factor[WHITE] == SCALE_FACTOR_NORMAL)
-          factor[WHITE] = ScaleFactor(50);
+          factor[WHITE] = sf;
       if (factor[BLACK] == SCALE_FACTOR_NORMAL)
-          factor[BLACK] = ScaleFactor(50);
-    }
+          factor[BLACK] = sf;
   }
 
   // Interpolate between the middle game and the endgame score, and