From 062eb074c8a7353f151aa324a21d5d25bc33e431 Mon Sep 17 00:00:00 2001 From: candirufish Date: Thu, 21 Jun 2018 10:20:31 +0200 Subject: [PATCH] Tuned values after 505k games Various king and pawn tuned eval values after 505k 60 sec 600 nodes time SPSA games. Adjusted passed rank and file values to be symmetrical. Passed LTC (after passed rank/file adjustment): LLR: 2.95 (-2.94,2.94) [0.00,4.00] Total: 37906 W: 6953 L: 6668 D: 24285 http://tests.stockfishchess.org/tests/view/5b2790960ebc5902b8d17ba1 A previous, very similar version with raw tuned values passed STC and LTC: STC: LLR: 2.95 (-2.94,2.94) [0.00,4.00] Total: 39515 W: 9227 L: 8900 D: 21388 http://tests.stockfishchess.org/tests/view/5b277e3e0ebc5902b8d17ac9 LTC: LLR: 2.95 (-2.94,2.94) [0.00,4.00] Total: 14618 W: 2743 L: 2537 D: 9338 http://tests.stockfishchess.org/tests/view/5b2785020ebc5902b8d17b98 Closes https://github.com/official-stockfish/Stockfish/pull/1654 bench: 4777396 --- src/evaluate.cpp | 36 +++++++++++++++++------------------- src/pawns.cpp | 24 ++++++++++++------------ 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 7fb0e26a..26fd20bb 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -142,32 +142,32 @@ namespace { // ThreatByKing[on one/on many] contains bonuses for king attacks on // pawns or pieces which are not pawn-defended. - constexpr Score ThreatByKing[] = { S(3, 65), S(9, 145) }; + constexpr Score ThreatByKing[] = { S(25, 57), S(4, 139) }; // PassedRank[Rank] contains a bonus according to the rank of a passed pawn constexpr Score PassedRank[RANK_NB] = { - S(0, 0), S(5, 7), S(5, 13), S(18, 23), S(74, 58), S(164, 166), S(268, 243) + S(0, 0), S(7, 10), S(7, 26), S(14, 31), S(42, 63), S(178, 167), S(279, 244) }; // PassedFile[File] contains a bonus according to the file of a passed pawn constexpr Score PassedFile[FILE_NB] = { - S( 15, 7), S(-5, 14), S( 1, -5), S(-22,-11), - S(-22,-11), S( 1, -5), S(-5, 14), S( 15, 7) + S( 17, 6), S(-4, 7), S( 2,-12), S(-17,-14), + S(-17,-14), S( 2,-12), S(-4, 7), S( 17, 6) }; // PassedDanger[Rank] contains a term to weight the passed score constexpr int PassedDanger[RANK_NB] = { 0, 0, 0, 3, 6, 12, 21 }; // KingProtector[PieceType-2] contains a penalty according to distance from king - constexpr Score KingProtector[] = { S(3, 5), S(4, 3), S(3, 0), S(1, -1) }; + constexpr Score KingProtector[] = { S(3, 5), S(5, 3), S(3, 0), S(0, -2) }; // Assorted bonuses and penalties constexpr Score BishopPawns = S( 3, 5); - constexpr Score CloseEnemies = S( 7, 0); + constexpr Score CloseEnemies = S( 8, 0); constexpr Score Connectivity = S( 3, 1); constexpr Score CorneredBishop = S( 50, 50); constexpr Score Hanging = S( 52, 30); - constexpr Score HinderPassedPawn = S( 8, 1); + constexpr Score HinderPassedPawn = S( 5, 2); constexpr Score KnightOnQueen = S( 21, 11); constexpr Score LongDiagonalBishop = S( 22, 0); constexpr Score MinorBehindPawn = S( 16, 0); @@ -175,12 +175,12 @@ namespace { constexpr Score PawnlessFlank = S( 20, 80); constexpr Score RookOnPawn = S( 8, 24); constexpr Score SliderOnQueen = S( 42, 21); - constexpr Score ThreatByPawnPush = S( 47, 26); + constexpr Score ThreatByPawnPush = S( 49, 30); constexpr Score ThreatByRank = S( 16, 3); - constexpr Score ThreatBySafePawn = S(175,168); + constexpr Score ThreatBySafePawn = S(186,140); constexpr Score TrappedRook = S( 92, 0); constexpr Score WeakQueen = S( 50, 10); - constexpr Score WeakUnopposedPawn = S( 5, 25); + constexpr Score WeakUnopposedPawn = S( 14, 19); #undef S @@ -428,7 +428,7 @@ namespace { // Main king safety evaluation if (kingAttackersCount[Them] > 1 - pos.count(Them)) { - int kingDanger = 0; + int kingDanger = -mg_value(score); unsafeChecks = 0; // Attacked squares defended at most once by our queen or king @@ -474,12 +474,11 @@ namespace { unsafeChecks &= mobilityArea[Them]; kingDanger += kingAttackersCount[Them] * kingAttackersWeight[Them] - + 102 * kingAttacksCount[Them] - + 191 * popcount(kingRing[Us] & weak) - + 143 * popcount(pos.blockers_for_king(Us) | unsafeChecks) - - 848 * !pos.count(Them) - - 9 * mg_value(score) / 8 - + 40; + + 64 * kingAttacksCount[Them] + + 182 * popcount(kingRing[Us] & weak) + + 128 * popcount(pos.blockers_for_king(Us) | unsafeChecks) + - 857 * !pos.count(Them) + + 31 ; // Transform the kingDanger units into a Score, and subtract it from the evaluation if (kingDanger > 0) @@ -804,10 +803,9 @@ namespace { if ( pos.opposite_bishops() && pos.non_pawn_material(WHITE) == BishopValueMg && pos.non_pawn_material(BLACK) == BishopValueMg) - // Endgame with opposite-colored bishops and no other pieces is almost a draw sf = 31; else - sf = std::min(40 + (pos.opposite_bishops()? 2 : 7) * pos.count(strongSide), sf); + sf = std::min(40 + (pos.opposite_bishops() ? 2 : 7) * pos.count(strongSide), sf); } return ScaleFactor(sf); diff --git a/src/pawns.cpp b/src/pawns.cpp index 6901d7b7..4a63f871 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -32,9 +32,9 @@ namespace { #define S(mg, eg) make_score(mg, eg) // Pawn penalties - constexpr Score Isolated = S(13, 16); - constexpr Score Backward = S(17, 11); - constexpr Score Doubled = S(13, 40); + constexpr Score Isolated = S( 6, 16); + constexpr Score Backward = S(15, 21); + constexpr Score Doubled = S( 8, 44); // Connected pawn bonus by opposed, phalanx, #support and rank Score Connected[2][2][3][RANK_NB]; @@ -42,25 +42,25 @@ 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(-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) } + { V( 28), V(79), V( 75), V( 46), V( 14), V( 31), V(-14) }, + { V(-48), V(50), V( 29), V(-21), V(-41), V(-23), V(-45) }, + { V(-25), V(50), V( 17), V(-33), V( -5), V( 9), V(-35) }, + { V(-29), V(57), V(-25), V(-48), V( -4), V(-46), V(-64) } }; // 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) } + { V( 34), V( 58), V(113), V( 61), V(37), V( 24), V( 21) }, + { V( 23), V( 46), V( 93), V( 10), V( 2), V(-20), V( 6) }, + { V( -6), V( 22), V(106), V( 28), V( 6), V(-33), V( -1) }, + { V(-17), V( 33), V( 71), V( 14), V(-9), V(-21), V(-16) } }; // 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) }; + { V(0), V(0), V( 58), V(-13), V(-22), V(-3), V(-5) }; #undef S #undef V -- 2.39.2