From: protonspring Date: Thu, 24 May 2018 16:46:38 +0000 (+0200) Subject: Simplify BlockedByPawn to one dimension X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=d5d23bfd2daecba0cb08459938a4d4806204c6d4 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 --- diff --git a/src/pawns.cpp b/src/pawns.cpp index 96a2dc0f..448c1191 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -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 @@ -208,7 +208,6 @@ Entry* probe(const Position& pos) { template 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); @@ -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;