X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=a63b40ae98403a69153a2782c1bd066c75f2d153;hp=826e860a5c22d3441424f63fd674c2aaa5b624d1;hb=24dac5ccd309837c6767dcf6b145be385eea2e21;hpb=8de29390f2d2bd31585b93ff46eae3051126f666 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 826e860a..a63b40ae 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -168,8 +168,8 @@ namespace { // Passed[mg/eg][Rank] contains midgame and endgame bonuses for passed pawns. // We don't use a Score because we process the two components independently. const Value Passed[][RANK_NB] = { - { V(0), V( 1), V(26), V(68), V(161), V(247) }, - { V(7), V(14), V(38), V(64), V(137), V(193) } + { V(5), V( 5), V(31), V(73), V(166), V(252) }, + { V(7), V(14), V(38), V(73), V(166), V(252) } }; // PassedFile[File] contains a bonus according to the file of a passed pawn @@ -185,6 +185,7 @@ namespace { const Score TrappedRook = S(92, 0); const Score Checked = S(20, 20); const Score ThreatByHangingPawn = S(70, 63); + const Score LooseEnemies = S( 0, 25); const Score Hanging = S(48, 28); const Score ThreatByPawnPush = S(31, 19); const Score Unstoppable = S( 0, 20); @@ -424,36 +425,20 @@ namespace { b2 = pos.attacks_from(ksq) & safe; // Enemy queen safe checks - b = (b1 | b2) & ei.attackedBy[Them][QUEEN]; - if (b) - { - attackUnits += QueenCheck * popcount(b); - score -= Checked; - } + if ((b1 | b2) & ei.attackedBy[Them][QUEEN]) + attackUnits += QueenCheck, score -= Checked; // Enemy rooks safe checks - b = b1 & ei.attackedBy[Them][ROOK]; - if (b) - { - attackUnits += RookCheck * popcount(b); - score -= Checked; - } + if (b1 & ei.attackedBy[Them][ROOK]) + attackUnits += RookCheck, score -= Checked; // Enemy bishops safe checks - b = b2 & ei.attackedBy[Them][BISHOP]; - if (b) - { - attackUnits += BishopCheck * popcount(b); - score -= Checked; - } + if (b2 & ei.attackedBy[Them][BISHOP]) + attackUnits += BishopCheck, score -= Checked; // Enemy knights safe checks - b = pos.attacks_from(ksq) & ei.attackedBy[Them][KNIGHT] & safe; - if (b) - { - attackUnits += KnightCheck * popcount(b); - score -= Checked; - } + if (pos.attacks_from(ksq) & ei.attackedBy[Them][KNIGHT] & safe) + attackUnits += KnightCheck, score -= Checked; // Finally, extract the king danger score from the KingDanger[] // array and subtract the score from the evaluation. @@ -467,7 +452,7 @@ namespace { } - // evaluate_threats() assigns bonuses according to the types of the attacking + // evaluate_threats() assigns bonuses according to the types of the attacking // and the attacked pieces. template @@ -485,6 +470,11 @@ namespace { Bitboard b, weak, defended, safeThreats; Score score = SCORE_ZERO; + // Small bonus if the opponent has loose pawns or pieces + if ( (pos.pieces(Them) ^ pos.pieces(Them, QUEEN, KING)) + & ~(ei.attackedBy[Us][ALL_PIECES] | ei.attackedBy[Them][ALL_PIECES])) + score += LooseEnemies; + // Non-pawn enemies attacked by a pawn weak = (pos.pieces(Them) ^ pos.pieces(Them, PAWN)) & ei.attackedBy[Us][PAWN]; @@ -615,10 +605,10 @@ namespace { else if (defendedSquares & blockSq) k += 4; - mbonus += k * rr * 3 / 4, ebonus += k * rr; + mbonus += k * rr, ebonus += k * rr; } else if (pos.pieces(Us) & blockSq) - mbonus += (rr * 3 + r * 2 + 3) * 3 / 4, ebonus += rr + r * 2; + mbonus += rr + r * 2, ebonus += rr + r * 2; } // rr != 0 if (pos.count(Us) < pos.count(Them)) @@ -679,11 +669,12 @@ namespace { // status of the players. Score evaluate_initiative(const Position& pos, int asymmetry, Value eg) { - int kingDistance = distance(pos.square(WHITE), pos.square(BLACK)); + int kingDistance = distance(pos.square(WHITE), pos.square(BLACK)) + - distance(pos.square(WHITE), pos.square(BLACK)); int pawns = pos.count(WHITE) + pos.count(BLACK); // Compute the initiative bonus for the attacking side - int initiative = 8 * (pawns + asymmetry + kingDistance - 15); + int initiative = 8 * (asymmetry + kingDistance - 15) + 12 * pawns; // Now apply the bonus: note that we find the attacking side by extracting // the sign of the endgame value, and that we carefully cap the bonus so