Skip to content

Commit

Permalink
Simplify BlockedByPawn to one dimension
Browse files Browse the repository at this point in the history
I was able to get this to pass which reduces BlockedByPawn to one dimension
with NO distance from edge offset.

GOOD)  It's more simple and may provide additional clarity for further
simplifications.  Facilitates migrating unblocked to one dimension as well.

BAD) If there is indeed a distance component to BlockedStorm (may or may
not be the case), this obfuscates this component into ShelterStrength and
UnblockedStorm. This may be more convoluted. Also, it may be more convenient
to have each of the three arrays (ShelterStrength, BlockedStorm, and UnBlocked)
be the same size.

STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 96173 W: 19326 L: 19343 D: 57504
http://tests.stockfishchess.org/tests/view/5b04544d0ebc5914abc12965

LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 49818 W: 7441 L: 7363 D: 35014
http://tests.stockfishchess.org/tests/view/5b0487d50ebc5914abc12990

Closes official-stockfish#1611

Bench: 5133208
  • Loading branch information
protonspring authored and snicolet committed May 24, 2018
1 parent beaadd6 commit d5d23bf
Showing 1 changed file with 18 additions and 20 deletions.
38 changes: 18 additions & 20 deletions src/pawns.cpp
Expand Up @@ -46,26 +46,26 @@ namespace {
// Strength of pawn shelter for our king by [distance from edge][rank].
// RANK_1 = 0 is used for files where we have no pawn, or pawn is behind our king.
constexpr Value ShelterStrength[int(FILE_NB) / 2][RANK_NB] = {
{ V( 7), V(76), V(84), V( 38), V( 7), V( 30), V(-19) },
{ V(-3), V(93), V(52), V(-17), V(12), V(-22), V(-35) },
{ V(-6), V(83), V(25), V(-24), V(15), V( 22), V(-39) },
{ V(11), V(83), V(19), V( 8), V(18), V(-21), V(-30) }
{ V( 7), V(76), V( 84), V( 38), V( 7), V( 30), V(-19) },
{ V(-13), V(83), V( 42), V(-27), V( 2), V(-32), V(-45) },
{ V(-26), V(63), V( 5), V(-44), V( -5), V( 2), V(-59) },
{ V(-19), V(53), V(-11), V(-22), V(-12), V(-51), V(-60) }
};

// Danger of enemy pawns moving toward our king by [type][distance from edge][rank].
// For the unblocked case, RANK_1 = 0 is used when opponent has no pawn on the
// given file, or their pawn is behind our king.
constexpr Value StormDanger[][4][RANK_NB] = {
{ { V(25), V( 79), V(107), V( 51), V( 27) }, // UnBlocked
{ V(15), V( 45), V(131), V( 8), V( 25) },
{ V( 0), V( 42), V(118), V( 56), V( 27) },
{ V( 3), V( 54), V(110), V( 55), V( 26) } },
{ { V( 0), V( 0), V( 37), V( 5), V(-48) }, // BlockedByPawn
{ V( 0), V( 0), V( 68), V(-12), V( 13) },
{ V( 0), V( 0), V(111), V(-25), V( -3) },
{ V( 0), V( 0), V(108), V( 14), V( 21) } }
// Danger of enemy pawns moving toward our king by [distance from edge][rank].
// RANK_1 = 0 is used for files where the enemy has no pawn, or their pawn
// is behind our king.
constexpr Value UnblockedStorm[int(FILE_NB) / 2][RANK_NB] = {
{ V( 25), V( 79), V(107), V( 51), V( 27), V( 0), V( 0) },
{ V( 5), V( 35), V(121), V( -2), V( 15), V(-10), V(-10) },
{ V(-20), V( 22), V( 98), V( 36), V( 7), V(-20), V(-20) },
{ V(-27), V( 24), V( 80), V( 25), V( -4), V(-30), V(-30) }
};

// Danger of blocked enemy pawns storming our king, by rank
constexpr Value BlockedStorm[RANK_NB] =
{ V( 0), V( 0), V( 75), V(-10), V(-20), V(-20), V(-20) };

#undef S
#undef V

Expand Down Expand Up @@ -208,7 +208,6 @@ Entry* probe(const Position& pos) {
template<Color Us>
Value Entry::evaluate_shelter(const Position& pos, Square ksq) {

enum { UnBlocked, BlockedByPawn };
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH);
constexpr Bitboard BlockRanks = (Us == WHITE ? Rank1BB | Rank2BB : Rank8BB | Rank7BB);
Expand All @@ -232,10 +231,9 @@ Value Entry::evaluate_shelter(const Position& pos, Square ksq) {
int theirRank = b ? relative_rank(Us, frontmost_sq(Them, b)) : 0;

int d = std::min(f, ~f);

safety += ShelterStrength[d][ourRank];
safety -= StormDanger[ourRank && (ourRank == theirRank - 1) ? BlockedByPawn : UnBlocked]
[d][theirRank];
safety -= (ourRank && (ourRank == theirRank - 1)) ? BlockedStorm[theirRank]
: UnblockedStorm[d][theirRank];
}

return safety;
Expand Down

0 comments on commit d5d23bf

Please sign in to comment.