Skip to content

Commit d5d23bf

Browse files
protonspringsnicolet
authored andcommitted
Simplify BlockedByPawn to one dimension
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 #1611 Bench: 5133208
1 parent beaadd6 commit d5d23bf

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed

src/pawns.cpp

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,26 +46,26 @@ namespace {
4646
// Strength of pawn shelter for our king by [distance from edge][rank].
4747
// RANK_1 = 0 is used for files where we have no pawn, or pawn is behind our king.
4848
constexpr Value ShelterStrength[int(FILE_NB) / 2][RANK_NB] = {
49-
{ V( 7), V(76), V(84), V( 38), V( 7), V( 30), V(-19) },
50-
{ V(-3), V(93), V(52), V(-17), V(12), V(-22), V(-35) },
51-
{ V(-6), V(83), V(25), V(-24), V(15), V( 22), V(-39) },
52-
{ V(11), V(83), V(19), V( 8), V(18), V(-21), V(-30) }
49+
{ V( 7), V(76), V( 84), V( 38), V( 7), V( 30), V(-19) },
50+
{ V(-13), V(83), V( 42), V(-27), V( 2), V(-32), V(-45) },
51+
{ V(-26), V(63), V( 5), V(-44), V( -5), V( 2), V(-59) },
52+
{ V(-19), V(53), V(-11), V(-22), V(-12), V(-51), V(-60) }
5353
};
5454

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

65+
// Danger of blocked enemy pawns storming our king, by rank
66+
constexpr Value BlockedStorm[RANK_NB] =
67+
{ V( 0), V( 0), V( 75), V(-10), V(-20), V(-20), V(-20) };
68+
6969
#undef S
7070
#undef V
7171

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

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

234233
int d = std::min(f, ~f);
235-
236234
safety += ShelterStrength[d][ourRank];
237-
safety -= StormDanger[ourRank && (ourRank == theirRank - 1) ? BlockedByPawn : UnBlocked]
238-
[d][theirRank];
235+
safety -= (ourRank && (ourRank == theirRank - 1)) ? BlockedStorm[theirRank]
236+
: UnblockedStorm[d][theirRank];
239237
}
240238

241239
return safety;

0 commit comments

Comments
 (0)