mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-24 02:57:11 +08:00
Add stealmate detection to evaluation
Currently a stealmate position is misevaluated in a negative/positive score, this leads qsearch(), that does not detects stealmates too, to return the wrong score and this yields to some kind of endgames to be completely misevaluated. With this patch is fully fixed follwing position 7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1 Also in SMP case. Correct root cause analysys by Ronald de Man. bench: 8678654
This commit is contained in:
@@ -787,6 +787,12 @@ namespace {
|
||||
sf = ScaleFactor(50 * sf / SCALE_FACTOR_NORMAL);
|
||||
}
|
||||
|
||||
// Stealmate detection
|
||||
Color stm = pos.side_to_move();
|
||||
if ( (ei.attackedBy[stm][ALL_PIECES] == ei.attackedBy[stm][KING])
|
||||
&& (!(ei.attackedBy[stm][KING] & ~ei.attackedBy[~stm][ALL_PIECES])))
|
||||
sf = SCALE_FACTOR_DRAW;
|
||||
|
||||
// Interpolate between a middlegame and a (scaled by 'sf') endgame score
|
||||
Value v = mg_value(score) * int(ei.mi->game_phase())
|
||||
+ eg_value(score) * int(PHASE_MIDGAME - ei.mi->game_phase()) * sf / SCALE_FACTOR_NORMAL;
|
||||
|
||||
Reference in New Issue
Block a user