From 153309e28702d8e5f49f4772bfb61f9f9ed965fc Mon Sep 17 00:00:00 2001 From: shane31 Date: Wed, 1 Jan 2014 07:45:20 +1100 Subject: [PATCH] Scale eval when down to only one pawn Passed both short TC LLR: 2.97 (-2.94,2.94) [-1.50,4.50] Total: 11921 W: 2346 L: 2208 D: 7367 And long TC LLR: 2.97 (-2.94,2.94) [0.00,6.00] Total: 21002 W: 3395 L: 3197 D: 14410 bench: 7602383 --- src/evaluate.cpp | 8 ++++---- src/material.cpp | 10 ++++++++++ src/types.h | 9 +++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 51d9b429..b43ab7e5 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -358,9 +358,9 @@ Value do_evaluate(const Position& pos) { // If we don't already have an unusual scale factor, check for opposite // colored bishop endgames, and use a lower scale for those. - if ( ei.mi->game_phase() < PHASE_MIDGAME - && pos.opposite_bishops() - && sf == SCALE_FACTOR_NORMAL) + if ( ei.mi->game_phase() < PHASE_MIDGAME + && pos.opposite_bishops() + && (sf == SCALE_FACTOR_NORMAL || sf == SCALE_FACTOR_ONEPAWN)) { // Ignoring any pawns, do both sides only have a single bishop and no // other pieces? @@ -375,7 +375,7 @@ Value do_evaluate(const Position& pos) { else // 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); + sf = ScaleFactor(50 * sf / SCALE_FACTOR_NORMAL); } Value v = interpolate(score, ei.mi->game_phase(), sf); diff --git a/src/material.cpp b/src/material.cpp index 62ff1a74..a1eff233 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -246,6 +246,16 @@ Entry* probe(const Position& pos, Table& entries, Endgames& endgames) { (npm_w == npm_b || npm_b < RookValueMg ? 0 : NoPawnsSF[std::min(pos.count(BLACK), 2)]); } + if (pos.count(WHITE) == 1 && npm_w - npm_b <= BishopValueMg) + { + e->factor[WHITE] = (uint8_t) SCALE_FACTOR_ONEPAWN; + } + + if (pos.count(BLACK) == 1 && npm_b - npm_w <= BishopValueMg) + { + e->factor[BLACK] = (uint8_t) SCALE_FACTOR_ONEPAWN; + } + // Compute the space weight if (npm_w + npm_b >= 2 * QueenValueMg + 4 * RookValueMg + 2 * KnightValueMg) { diff --git a/src/types.h b/src/types.h index b9fc7119..6d558de9 100644 --- a/src/types.h +++ b/src/types.h @@ -138,10 +138,11 @@ enum Phase { }; enum ScaleFactor { - SCALE_FACTOR_DRAW = 0, - SCALE_FACTOR_NORMAL = 64, - SCALE_FACTOR_MAX = 128, - SCALE_FACTOR_NONE = 255 + SCALE_FACTOR_DRAW = 0, + SCALE_FACTOR_ONEPAWN = 48, + SCALE_FACTOR_NORMAL = 64, + SCALE_FACTOR_MAX = 128, + SCALE_FACTOR_NONE = 255 }; enum Bound { -- 2.39.2