Skip to content

Commit

Permalink
Good bishops on the main diagonals
Browse files Browse the repository at this point in the history
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
  • Loading branch information
snicolet authored and mcostalba committed Oct 2, 2017
1 parent 07b5a28 commit 452e515
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions src/evaluate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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<Tracing T> template<Color Us>
Score Evaluation<T>::evaluate_king() {

Expand Down

1 comment on commit 452e515

@ElbertoOne
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.