From 5c75455c8ea998bb3e60bafbc3fab850bb877187 Mon Sep 17 00:00:00 2001 From: Gary Linscott Date: Tue, 8 Apr 2014 21:50:01 +0200 Subject: [PATCH] Restrict queen mobility to safe squares Passed both STC LLR: 2.95 (-2.94,2.94) [-1.50,4.50] Total: 16188 W: 3119 L: 2971 D: 10098 and LTC LLR: 2.95 (-2.94,2.94) [0.00,6.00] Total: 6336 W: 1010 L: 882 D: 4444 bench: 7533692 --- src/evaluate.cpp | 53 +++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index ca70f2d0..e96e635c 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -119,8 +119,8 @@ namespace { { S(-17,-33), S(-11,-16), S(-5, 0), S( 1, 16), S( 7, 32), S(13, 48), // Rooks S( 18, 64), S( 22, 80), S(26, 96), S(29,109), S(31,115), S(33,119), S( 35,122), S( 36,123), S(37,124) }, - { S(-12,-20), S( -8,-13), S(-5, -7), S(-2, -1), S( 1, 5), S( 4, 11), // Queens - S( 7, 17), S( 10, 23), S(13, 29), S(16, 34), S(18, 38), S(20, 40), + { S(-12,-20), S( -8,-13), S(-5, -7), S( 0, 0), S( 6, 10), S(11, 19), // Queens + S( 13, 29), S( 18, 38), S(20, 40), S(21, 41), S(22, 41), S(22, 41), S( 22, 41), S( 23, 41), S(24, 41), S(25, 41), S(25, 41), S(25, 41), S( 25, 41), S( 25, 41), S(25, 41), S(25, 41), S(25, 41), S(25, 41), S( 25, 41), S( 25, 41), S(25, 41), S(25, 41) } @@ -213,7 +213,7 @@ namespace { template void init_eval_info(const Position& pos, EvalInfo& ei); - template + template Score evaluate_pieces(const Position& pos, EvalInfo& ei, Score* mobility); template @@ -317,8 +317,7 @@ Value do_evaluate(const Position& pos) { init_eval_info(pos, ei); // Evaluate pieces and mobility - score += evaluate_pieces(pos, ei, mobility) - - evaluate_pieces(pos, ei, mobility); + score += evaluate_pieces(pos, ei, mobility); score += apply_weight(mobility[WHITE] - mobility[BLACK], Weights[Mobility]); @@ -482,6 +481,11 @@ Value do_evaluate(const Position& pos) { ei.kingAdjacentZoneAttacksCount[Us] += popcount(bb); } + if (Pt == QUEEN) + b &= ~( ei.attackedBy[Them][KNIGHT] + | ei.attackedBy[Them][BISHOP] + | ei.attackedBy[Them][ROOK]); + int mob = Pt != QUEEN ? popcount(b & mobilityArea) : popcount(b & mobilityArea); @@ -566,28 +570,39 @@ Value do_evaluate(const Position& pos) { } - // evaluate_pieces() assigns bonuses and penalties to all the - // pieces of a given color. + // evaluate_pieces() assigns bonuses and penalties to all the pieces of both colors - template + template Score evaluate_pieces(const Position& pos, EvalInfo& ei, Score* mobility) { - const Color Them = (Us == WHITE ? BLACK : WHITE); - // Do not include in mobility squares protected by enemy pawns or occupied by our pieces - const Bitboard mobilityArea = ~(ei.attackedBy[Them][PAWN] | pos.pieces(Us, PAWN, KING)); + const Bitboard whiteMobilityArea = ~(ei.attackedBy[BLACK][PAWN] | pos.pieces(WHITE, PAWN, KING)); + const Bitboard blackMobilityArea = ~(ei.attackedBy[WHITE][PAWN] | pos.pieces(BLACK, PAWN, KING)); + + Score score; - Score score = evaluate_pieces(pos, ei, mobility, mobilityArea) - + evaluate_pieces(pos, ei, mobility, mobilityArea) - + evaluate_pieces(pos, ei, mobility, mobilityArea) - + evaluate_pieces(pos, ei, mobility, mobilityArea); + score = evaluate_pieces(pos, ei, mobility, whiteMobilityArea) + - evaluate_pieces(pos, ei, mobility, blackMobilityArea); + score += evaluate_pieces(pos, ei, mobility, whiteMobilityArea) + - evaluate_pieces(pos, ei, mobility, blackMobilityArea); + score += evaluate_pieces< ROOK, WHITE, Trace>(pos, ei, mobility, whiteMobilityArea) + - evaluate_pieces< ROOK, BLACK, Trace>(pos, ei, mobility, blackMobilityArea); + score += evaluate_pieces< QUEEN, WHITE, Trace>(pos, ei, mobility, whiteMobilityArea) + - evaluate_pieces< QUEEN, BLACK, Trace>(pos, ei, mobility, blackMobilityArea); // Sum up all attacked squares (updated in evaluate_pieces) - ei.attackedBy[Us][ALL_PIECES] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT] - | ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK] - | ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING]; + ei.attackedBy[WHITE][ALL_PIECES] = ei.attackedBy[WHITE][PAWN] | ei.attackedBy[WHITE][KNIGHT] + | ei.attackedBy[WHITE][BISHOP] | ei.attackedBy[WHITE][ROOK] + | ei.attackedBy[WHITE][QUEEN] | ei.attackedBy[WHITE][KING]; + + ei.attackedBy[BLACK][ALL_PIECES] = ei.attackedBy[BLACK][PAWN] | ei.attackedBy[BLACK][KNIGHT] + | ei.attackedBy[BLACK][BISHOP] | ei.attackedBy[BLACK][ROOK] + | ei.attackedBy[BLACK][QUEEN] | ei.attackedBy[BLACK][KING]; if (Trace) - Tracing::terms[Us][Tracing::MOBILITY] = apply_weight(mobility[Us], Weights[Mobility]); + { + Tracing::terms[WHITE][Tracing::MOBILITY] = apply_weight(mobility[WHITE], Weights[Mobility]); + Tracing::terms[BLACK][Tracing::MOBILITY] = apply_weight(mobility[BLACK], Weights[Mobility]); + } return score; } -- 2.39.2