From be641e881fdfdf3354453381f832fe7822e7c731 Mon Sep 17 00:00:00 2001 From: Lucas Braesch Date: Thu, 3 Apr 2014 21:31:42 +0800 Subject: [PATCH] Remove QueenOn7th and QueenOnPawn Small simplification. Passed SPRT(-3,1) both at STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 17051 W: 3132 L: 3005 D: 10914 and LTC: LLR: 4.55 (-2.94,2.94) [-3.00,1.00] Total: 24890 W: 3842 L: 3646 D: 17402 The rationale behind this is that I've never managed to add a Queen on 7th rank bonus in DiscoCheck, because it never showed to be positive (evne slightly) in testing. The only thing that worked is Rook on 7th rank. In terms of SF code, it seemed natural to group it with QueenOnPawn as well as those are done together. I know you're against groupping in general, but when it comes to non regression test, you are being more conservative by groupping. If the group passes SPRT(-3,1) it's safer to commit, than test every component in SPRT(-3,1) and end up with the risk of commiting several -1 elo regression instead of just one -1 elo regression. In chess terms, perhaps it's just easier to manouver a Queen (which can more also diagonaly) than a Rook. Therefore you can let the search do its job without needing eval ad-hoc terms to guide it. For the Rook which takes more moves to manouver such eval terms can be (marginally) useful. bench: 7473314 --- src/evaluate.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index b4e86f3b..28fd8341 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -162,9 +162,7 @@ namespace { const Score Tempo = make_score(24, 11); const Score RookOn7th = make_score(11, 20); - const Score QueenOn7th = make_score( 3, 8); const Score RookOnPawn = make_score(10, 28); - const Score QueenOnPawn = make_score( 4, 20); const Score RookOpenFile = make_score(43, 21); const Score RookSemiopenFile = make_score(19, 10); const Score BishopPawns = make_score( 8, 12); @@ -514,23 +512,21 @@ Value do_evaluate(const Position& pos) { score += MinorBehindPawn; } - if ( (Pt == ROOK || Pt == QUEEN) - && relative_rank(Us, s) >= RANK_5) + if (Pt == ROOK) { - // Major piece on 7th rank and enemy king trapped on 8th + // Rook on 7th rank and enemy king trapped on 8th if ( relative_rank(Us, s) == RANK_7 && relative_rank(Us, pos.king_square(Them)) == RANK_8) - score += Pt == ROOK ? RookOn7th : QueenOn7th; + score += RookOn7th; - // Major piece attacking enemy pawns on the same rank/file - Bitboard pawns = pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s]; - if (pawns) - score += popcount(pawns) * (Pt == ROOK ? RookOnPawn : QueenOnPawn); - } + // Rook piece attacking enemy pawns on the same rank/file + if (relative_rank(Us, s) >= RANK_5) + { + Bitboard pawns = pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s]; + if (pawns) + score += popcount(pawns) * RookOnPawn; + } - // Special extra evaluation for rooks - if (Pt == ROOK) - { // Give a bonus for a rook on a open or semi-open file if (ei.pi->semiopen(Us, file_of(s))) score += ei.pi->semiopen(Them, file_of(s)) ? RookOpenFile : RookSemiopenFile; -- 2.39.2