From: Marco Costalba Date: Thu, 20 Nov 2014 11:13:00 +0000 (+0100) Subject: Fix doubled pawns asymmetry X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=84408e5cd68a9323292ddababec4d1183abeef2e;hp=79232be02a03a5e2225b30f843e9597fd85951dc Fix doubled pawns asymmetry When evaluating double pawns we use always lsb() to extract the frontmost square. This breaks evaluation color symmetry as is possible to verify with an instrumented evaluate() Value evaluate(const Position& pos) { Value v = do_evaluate(pos); Position p = pos; p.flip(); assert(v == do_evaluate(p)); return v; } Passed no regression test: STC LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 21035 W: 4244 L: 4122 D: 12669 LTC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 39839 W: 6662 L: 6572 D: 26605 bench: 8255966 --- diff --git a/src/pawns.cpp b/src/pawns.cpp index 1099c5a4..fe989e9b 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -165,7 +165,7 @@ namespace { value -= UnsupportedPawnPenalty; if (doubled) - value -= Doubled[f] / distance(s, Square(lsb(doubled))); + value -= Doubled[f] / distance(s, frontmost_sq(Us, doubled)); if (backward) value -= Backward[opposed][f];