From: Marco Costalba Date: Sat, 7 Apr 2012 10:34:22 +0000 (+0100) Subject: Revert "Penalty for undefended rook" X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=f30f384757499508ebc670a1c58b99737e2449db Revert "Penalty for undefended rook" After extensive test Gary says: "So, after 16k games at 10"+1" on an i7, the undefended rook test looks to be not good (albeit by a very small margin). 3063 - 3093 - 9844 (-1). I doubt that is causing the regression, but even so, it looks like it's not worth keeping, and we can go back to the simpler undefended minors check." Signed-off-by: Marco Costalba --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 9806b34b..849185b6 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -167,8 +167,8 @@ namespace { // happen in Chess960 games. const Score TrappedBishopA1H1Penalty = make_score(100, 100); - // Penalty for BNR that is not defended by anything - const Score UndefendedPiecePenalty = make_score(25, 10); + // Penalty for an undefended bishop or knight + const Score UndefendedMinorPenalty = make_score(25, 10); // The SpaceMask[Color] contains the area of the board which is considered // by the space evaluation. In the middle game, each side is given a bonus @@ -676,18 +676,17 @@ Value do_evaluate(const Position& pos, Value& margin) { const Color Them = (Us == WHITE ? BLACK : WHITE); - Bitboard b, undefended, undefendedMinors, weakEnemies; + Bitboard b, undefendedMinors, weakEnemies; Score score = SCORE_ZERO; - // Undefended pieces get penalized even if not under attack - undefended = pos.pieces(Them) & ~ei.attackedBy[Them][0]; - undefendedMinors = undefended & (pos.pieces(BISHOP) | pos.pieces(KNIGHT)); + // Undefended minors get penalized even if not under attack + undefendedMinors = pos.pieces(Them) + & (pos.pieces(BISHOP) | pos.pieces(KNIGHT)) + & ~ei.attackedBy[Them][0]; if (undefendedMinors) - score += single_bit(undefendedMinors) ? UndefendedPiecePenalty - : UndefendedPiecePenalty * 2; - if (undefended & pos.pieces(ROOK)) - score += UndefendedPiecePenalty; + score += single_bit(undefendedMinors) ? UndefendedMinorPenalty + : UndefendedMinorPenalty * 2; // Enemy pieces not defended by a pawn and under our attack weakEnemies = pos.pieces(Them)