From: Marco Costalba Date: Thu, 25 Sep 2008 11:22:14 +0000 (+0200) Subject: Tidy up middle game specific evaluation X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=3e0dc9ee8477785cdfd7d5a70b8563ae9681992f Tidy up middle game specific evaluation Also add starting position to benchmarks. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/benchmark.cpp b/src/benchmark.cpp index 7e2628b1..d922c048 100644 --- a/src/benchmark.cpp +++ b/src/benchmark.cpp @@ -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::iterator it; diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 049a40de..19fcd5f8 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -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