X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=ccc3d9154d62612daea3c68ab972e42d6afb2553;hp=e1a000c6323d081a2458285083c2c38a4b0910b8;hb=918c29f83ab8a013d3946916887e1d1d7b9cfb9a;hpb=86c20416c85ac93ab982dda404fc268a92636fa6 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index e1a000c6..ccc3d915 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -222,20 +222,6 @@ namespace { } - // interpolate() interpolates between a middlegame and an endgame score, - // based on game phase. It also scales the return value by a ScaleFactor array. - - Value interpolate(const Score& v, Phase ph, ScaleFactor sf) { - - assert(-VALUE_INFINITE < mg_value(v) && mg_value(v) < VALUE_INFINITE); - assert(-VALUE_INFINITE < eg_value(v) && eg_value(v) < VALUE_INFINITE); - assert(PHASE_ENDGAME <= ph && ph <= PHASE_MIDGAME); - - int eg = (eg_value(v) * int(sf)) / SCALE_FACTOR_NORMAL; - return Value((mg_value(v) * int(ph) + eg * int(PHASE_MIDGAME - ph)) / PHASE_MIDGAME); - } - - // init_eval_info() initializes king bitboards for given color adding // pawn attacks. To be done at the beginning of the evaluation. @@ -583,8 +569,8 @@ namespace { assert(pos.pawn_passed(Us, s)); - Rank r = relative_rank(Us, s) - RANK_2; - Rank rr = r * (r - 1); + int r = relative_rank(Us, s) - RANK_2; + int rr = r * (r - 1); // Base bonus based on rank Value mbonus = Value(17 * rr), ebonus = Value(7 * (rr + r + 1)); @@ -599,7 +585,7 @@ namespace { // If blockSq is not the queening square then consider also a second push if (relative_rank(Us, blockSq) != RANK_8) - ebonus -= rr * square_distance(pos.king_square(Us), blockSq + pawn_push(Us)); + ebonus -= square_distance(pos.king_square(Us), blockSq + pawn_push(Us)) * rr; // If the pawn is free to advance, then increase the bonus if (pos.empty(blockSq)) @@ -734,7 +720,7 @@ namespace { ei.attackedBy[WHITE][ALL_PIECES] |= ei.attackedBy[WHITE][KING]; ei.attackedBy[BLACK][ALL_PIECES] |= ei.attackedBy[BLACK][KING]; - // Do not include in mobility squares protected by enemy pawns or occupied by our pieces + // Do not include in mobility squares protected by enemy pawns or occupied by our pawns or king Bitboard mobilityArea[] = { ~(ei.attackedBy[BLACK][PAWN] | pos.pieces(WHITE, PAWN, KING)), ~(ei.attackedBy[WHITE][PAWN] | pos.pieces(BLACK, PAWN, KING)) }; @@ -793,7 +779,11 @@ namespace { sf = ScaleFactor(50 * sf / SCALE_FACTOR_NORMAL); } - Value v = interpolate(score, ei.mi->game_phase(), sf); + // Interpolate between a middlegame and an endgame score, scaling by 'sf' + Value v = mg_value(score) * int(ei.mi->game_phase()) + + eg_value(score) * int(sf) / SCALE_FACTOR_NORMAL * int(PHASE_MIDGAME - ei.mi->game_phase()); + + v /= PHASE_MIDGAME; // In case of tracing add all single evaluation contributions for both white and black if (Trace) @@ -920,7 +910,7 @@ namespace Eval { for (int t = 0, i = 1; i < 100; ++i) { - t = std::min(Peak, std::min(0.4 * i * i, t + MaxSlope)); + t = int(std::min(Peak, std::min(0.4 * i * i, t + MaxSlope))); KingDanger[1][i] = apply_weight(make_score(t, 0), Weights[KingDangerUs]); KingDanger[0][i] = apply_weight(make_score(t, 0), Weights[KingDangerThem]);