mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-24 19:16:49 +08:00
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<false>(pos);
Position p = pos;
p.flip();
assert(v == do_evaluate<false>(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
This commit is contained in:
@@ -165,7 +165,7 @@ namespace {
|
||||
value -= UnsupportedPawnPenalty;
|
||||
|
||||
if (doubled)
|
||||
value -= Doubled[f] / distance<Rank>(s, Square(lsb(doubled)));
|
||||
value -= Doubled[f] / distance<Rank>(s, frontmost_sq(Us, doubled));
|
||||
|
||||
if (backward)
|
||||
value -= Backward[opposed][f];
|
||||
|
||||
Reference in New Issue
Block a user