X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=c880b7c7845f3c881ba2d7600a662c393e6a9436;hp=40d59648f2ed10edf6660befbf0c2eb035feec35;hb=9369f4963d9376820cb5ca4bad66b86e67b0a010;hpb=44a571c1c7494503ee431ef6f974d030bf96af0d diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 40d59648..c880b7c7 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -61,11 +61,11 @@ namespace { // KingAttackWeights array. int kingAttackersWeight[COLOR_NB]; - // kingAdjacentZoneAttacksCount[color] is the number of attacks to squares - // directly adjacent to the king of the given color. Pieces which attack - // more than one square are counted multiple times. For instance, if black's - // king is on g8 and there's a white knight on g5, this knight adds - // 2 to kingAdjacentZoneAttacksCount[BLACK]. + // kingAdjacentZoneAttacksCount[color] is the number of attacks by the given + // color to squares directly adjacent to the enemy king. Pieces which attack + // more than one square are counted multiple times. For instance, if there is + // a white knight on g5 and black's king is on g8, this white knight adds 2 + // to kingAdjacentZoneAttacksCount[WHITE]. int kingAdjacentZoneAttacksCount[COLOR_NB]; Bitboard pinnedPieces[COLOR_NB]; @@ -148,7 +148,7 @@ namespace { // ThreatenedByPawn[PieceType] contains a penalty according to which piece // type is attacked by an enemy pawn. const Score ThreatenedByPawn[] = { - S(0, 0), S(0, 0), S(87, 118), S(84, 122), S(114, 203), S(121, 217) + S(0, 0), S(0, 0), S(107, 138), S(84, 122), S(114, 203), S(121, 217) }; // Assorted bonuses and penalties used by evaluation @@ -163,6 +163,7 @@ namespace { const Score Unstoppable = S( 0, 20); const Score Hanging = S(31, 26); const Score PawnAttackThreat = S(20, 20); + const Score PawnSafePush = S( 5, 5); // Penalty for a bishop on a1/h1 (a8/h8 for black) which is trapped by // a friendly pawn on b2/g2 (b7/g7 for black). This can obviously only @@ -413,10 +414,10 @@ namespace { // attacked and undefended squares around our king and the quality of // the pawn shelter (current 'score' value). attackUnits = std::min(74, ei.kingAttackersCount[Them] * ei.kingAttackersWeight[Them]) - + 8 * ei.kingAdjacentZoneAttacksCount[Them] + + 8 * ei.kingAdjacentZoneAttacksCount[Them] + 25 * popcount(undefended) - + 11 * (ei.pinnedPieces[Us] != 0) - - mg_value(score) * 31 / 256 + + 11 * (ei.pinnedPieces[Us] != 0) + - mg_value(score) / 8 - !pos.count(Them) * 60; // Analyse the enemy's safe queen contact checks. Firstly, find the @@ -547,14 +548,18 @@ namespace { score += more_than_one(b) ? KingOnMany : KingOnOne; } - // Add bonus for safe pawn pushes which attacks an enemy piece + // Add a small bonus for safe pawn pushes b = pos.pieces(Us, PAWN) & ~TRank7BB; b = shift_bb(b | (shift_bb(b & TRank2BB) & ~pos.pieces())); b &= ~pos.pieces() & ~ei.attackedBy[Them][PAWN] - & (ei.attackedBy[Us][PAWN] | ~ei.attackedBy[Them][ALL_PIECES]); + & (ei.attackedBy[Us][ALL_PIECES] | ~ei.attackedBy[Them][ALL_PIECES]); + if (b) + score += popcount(b) * PawnSafePush; + + // Add another bonus if the pawn push attacks an enemy piece b = (shift_bb(b) | shift_bb(b)) & pos.pieces(Them) & ~ei.attackedBy[Us][PAWN]; @@ -912,14 +917,14 @@ namespace Eval { void init() { - const int MaxSlope = 87; - const int Peak = 12800; + const int MaxSlope = 8700; + const int Peak = 1280000; int t = 0; for (int i = 0; i < 400; ++i) { - t = std::min(Peak, std::min(i * i * 27 / 100, t + MaxSlope)); - KingDanger[i] = apply_weight(make_score(t / 10, 0), Weights[KingSafety]); + t = std::min(Peak, std::min(i * i * 27, t + MaxSlope)); + KingDanger[i] = apply_weight(make_score(t / 1000, 0), Weights[KingSafety]); } }