From 452e5154cf29ee46aa35a12dfb54bd24e4ed61de Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Nicolet?= Date: Mon, 2 Oct 2017 00:41:06 +0200 Subject: [PATCH] Good bishops on the main diagonals Bonus in midgame for bishops on long diagonals when the central squares are not occupied by pawns. Author: ElbertoOne Passed STC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 10801 W: 1955 L: 1786 D: 7060 http://tests.stockfishchess.org/tests/view/59cf5c1d0ebc5916ff64b9da and LTC: LLR: 2.97 (-2.94,2.94) [0.00,5.00] Total: 83978 W: 10685 L: 10303 D: 62990 http://tests.stockfishchess.org/tests/view/59cf6f6c0ebc5916ff64b9e4 Bench: 5620312 --- src/evaluate.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 031b8034..f34c01b6 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -31,6 +31,16 @@ namespace { + const Bitboard LongDiagonals = 0x8142241818244281ULL; // A1..H8 | H1..A8 + const Bitboard Center = (FileDBB | FileEBB) & (Rank4BB | Rank5BB); + const Bitboard QueenSide = FileABB | FileBBB | FileCBB | FileDBB; + const Bitboard CenterFiles = FileCBB | FileDBB | FileEBB | FileFBB; + const Bitboard KingSide = FileEBB | FileFBB | FileGBB | FileHBB; + + const Bitboard KingFlank[FILE_NB] = { + QueenSide, QueenSide, QueenSide, CenterFiles, CenterFiles, KingSide, KingSide, KingSide + }; + namespace Trace { enum Tracing {NO_TRACE, TRACE}; @@ -204,6 +214,7 @@ namespace { // Assorted bonuses and penalties used by evaluation const Score MinorBehindPawn = S( 16, 0); const Score BishopPawns = S( 8, 12); + const Score LongRangedBishop = S( 22, 0); const Score RookOnPawn = S( 8, 24); const Score TrappedRook = S( 92, 0); const Score WeakQueen = S( 50, 10); @@ -338,10 +349,18 @@ namespace { && (pos.pieces(PAWN) & (s + pawn_push(Us)))) score += MinorBehindPawn; - // Penalty for pawns on the same color square as the bishop if (Pt == BISHOP) + { + // Penalty for pawns on the same color square as the bishop score -= BishopPawns * pe->pawns_on_same_color_squares(Us, s); + // Bonus for bishop on a long diagonal without pawns in the center + if ( (LongDiagonals & s) + && !(attackedBy[Them][PAWN] & s) + && !(Center & PseudoAttacks[BISHOP][s] & pos.pieces(PAWN))) + score += LongRangedBishop; + } + // An important Chess960 pattern: A cornered bishop blocked by a friendly // pawn diagonally in front of it is a very serious problem, especially // when that pawn is also blocked. @@ -396,14 +415,6 @@ namespace { // evaluate_king() assigns bonuses and penalties to a king of a given color - const Bitboard QueenSide = FileABB | FileBBB | FileCBB | FileDBB; - const Bitboard CenterFiles = FileCBB | FileDBB | FileEBB | FileFBB; - const Bitboard KingSide = FileEBB | FileFBB | FileGBB | FileHBB; - - const Bitboard KingFlank[FILE_NB] = { - QueenSide, QueenSide, QueenSide, CenterFiles, CenterFiles, KingSide, KingSide, KingSide - }; - template template Score Evaluation::evaluate_king() { -- 2.39.2