mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
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 https://github.com/official-stockfish/Stockfish/pull/1611 Bench: 5133208
This commit is contained in:
parent
beaadd6547
commit
d5d23bfd2d
1 changed files with 18 additions and 20 deletions
|
@ -47,25 +47,25 @@ namespace {
|
||||||
// RANK_1 = 0 is used for files where we have no pawn, or pawn is behind our king.
|
// 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] = {
|
constexpr Value ShelterStrength[int(FILE_NB) / 2][RANK_NB] = {
|
||||||
{ V( 7), V(76), V( 84), V( 38), V( 7), V( 30), V(-19) },
|
{ 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(-13), V(83), V( 42), V(-27), V( 2), V(-32), V(-45) },
|
||||||
{ V(-6), V(83), V(25), V(-24), V(15), V( 22), V(-39) },
|
{ V(-26), V(63), V( 5), V(-44), V( -5), V( 2), V(-59) },
|
||||||
{ V(11), V(83), V(19), V( 8), V(18), V(-21), V(-30) }
|
{ 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].
|
// Danger of enemy pawns moving toward our king by [distance from edge][rank].
|
||||||
// For the unblocked case, RANK_1 = 0 is used when opponent has no pawn on the
|
// RANK_1 = 0 is used for files where the enemy has no pawn, or their pawn
|
||||||
// given file, or their pawn is behind our king.
|
// is behind our king.
|
||||||
constexpr Value StormDanger[][4][RANK_NB] = {
|
constexpr Value UnblockedStorm[int(FILE_NB) / 2][RANK_NB] = {
|
||||||
{ { V(25), V( 79), V(107), V( 51), V( 27) }, // UnBlocked
|
{ V( 25), V( 79), V(107), V( 51), V( 27), V( 0), V( 0) },
|
||||||
{ V(15), V( 45), V(131), V( 8), V( 25) },
|
{ V( 5), V( 35), V(121), V( -2), V( 15), V(-10), V(-10) },
|
||||||
{ V( 0), V( 42), V(118), V( 56), V( 27) },
|
{ V(-20), V( 22), V( 98), V( 36), V( 7), V(-20), V(-20) },
|
||||||
{ V( 3), V( 54), V(110), V( 55), V( 26) } },
|
{ V(-27), V( 24), V( 80), V( 25), V( -4), V(-30), V(-30) }
|
||||||
{ { 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 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 S
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
|
@ -208,7 +208,6 @@ Entry* probe(const Position& pos) {
|
||||||
template<Color Us>
|
template<Color Us>
|
||||||
Value Entry::evaluate_shelter(const Position& pos, Square ksq) {
|
Value Entry::evaluate_shelter(const Position& pos, Square ksq) {
|
||||||
|
|
||||||
enum { UnBlocked, BlockedByPawn };
|
|
||||||
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
|
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
|
||||||
constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH);
|
constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH);
|
||||||
constexpr Bitboard BlockRanks = (Us == WHITE ? Rank1BB | Rank2BB : Rank8BB | Rank7BB);
|
constexpr Bitboard BlockRanks = (Us == WHITE ? Rank1BB | Rank2BB : Rank8BB | Rank7BB);
|
||||||
|
@ -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 theirRank = b ? relative_rank(Us, frontmost_sq(Them, b)) : 0;
|
||||||
|
|
||||||
int d = std::min(f, ~f);
|
int d = std::min(f, ~f);
|
||||||
|
|
||||||
safety += ShelterStrength[d][ourRank];
|
safety += ShelterStrength[d][ourRank];
|
||||||
safety -= StormDanger[ourRank && (ourRank == theirRank - 1) ? BlockedByPawn : UnBlocked]
|
safety -= (ourRank && (ourRank == theirRank - 1)) ? BlockedStorm[theirRank]
|
||||||
[d][theirRank];
|
: UnblockedStorm[d][theirRank];
|
||||||
}
|
}
|
||||||
|
|
||||||
return safety;
|
return safety;
|
||||||
|
|
Loading…
Add table
Reference in a new issue