X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fevaluate.cpp;h=5f86227c2c5e9718e4ec76a967638167054ebff0;hb=6b7efa0cd14b73416c9030462f79a02bbfc7ad2c;hp=6c4e927ac804b4fa5296f7ecf06e529c0f81bea9;hpb=9fc602bae74b8e09bd45ace3b42a8ce84d56b23c;p=stockfish diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 6c4e927a..5f86227c 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -224,15 +224,19 @@ namespace { const int AttackWeight[] = { 0, 0, KnightAttackWeight, BishopAttackWeight, RookAttackWeight, QueenAttackWeight }; - // Bonuses for safe checks, initialized from UCI options - int QueenContactCheckBonus, DiscoveredCheckBonus; - int QueenCheckBonus, RookCheckBonus, BishopCheckBonus, KnightCheckBonus; + // Bonuses for safe checks + const int QueenContactCheckBonus = 3; + const int DiscoveredCheckBonus = 3; + const int QueenCheckBonus = 2; + const int RookCheckBonus = 1; + const int BishopCheckBonus = 1; + const int KnightCheckBonus = 1; // Scan for queen contact mates? const bool QueenContactMates = true; - // Bonus for having a mate threat, initialized from UCI options - int MateThreatBonus; + // Bonus for having a mate threat + const int MateThreatBonus = 3; // InitKingDanger[] contains bonuses based on the position of the defending // king. @@ -426,6 +430,13 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { factor[BLACK] = sf; } + // If we don't already have an unusual scale factor, use pawn + // evaluation ones. + if (factor[WHITE] == SCALE_FACTOR_NORMAL) + factor[WHITE] = ei.pi->scale_factor(WHITE); + if (factor[BLACK] == SCALE_FACTOR_NORMAL) + factor[BLACK] = ei.pi->scale_factor(BLACK); + // Interpolate between the middle game and the endgame score Color stm = pos.side_to_move(); @@ -866,7 +877,7 @@ namespace { } - // evaluate_passed_pawns() evaluates the passed pawns of the given color + // evaluate_passed_pawns_of_color() evaluates the passed pawns of the given color template void evaluate_passed_pawns_of_color(const Position& pos, int movesToGo[], Square pawnToGo[], EvalInfo& ei) { @@ -957,7 +968,7 @@ namespace { qsq = relative_square(Us, make_square(square_file(s), RANK_8)); d = square_distance(s, qsq) - square_distance(theirKingSq, qsq) - + (Us != pos.side_to_move()); + + int(Us != pos.side_to_move()); if (d < 0) { @@ -1200,36 +1211,23 @@ namespace { void init_safety() { - QueenContactCheckBonus = get_option_value_int("Queen Contact Check Bonus"); - QueenCheckBonus = get_option_value_int("Queen Check Bonus"); - RookCheckBonus = get_option_value_int("Rook Check Bonus"); - BishopCheckBonus = get_option_value_int("Bishop Check Bonus"); - KnightCheckBonus = get_option_value_int("Knight Check Bonus"); - DiscoveredCheckBonus = get_option_value_int("Discovered Check Bonus"); - MateThreatBonus = get_option_value_int("Mate Threat Bonus"); - - int maxSlope = get_option_value_int("King Safety Max Slope"); - int peak = get_option_value_int("King Safety Max Value") * 256 / 100; - double a = get_option_value_int("King Safety Coefficient") / 100.0; - double b = get_option_value_int("King Safety X Intercept"); - bool quad = (get_option_value_string("King Safety Curve") == "Quadratic"); - bool linear = (get_option_value_string("King Safety Curve") == "Linear"); + int maxSlope = 30; + int peak = 0x500; + double a = 0.4; + double b = 0.0; for (int i = 0; i < 100; i++) { if (i < b) SafetyTable[i] = Value(0); - else if (quad) + else SafetyTable[i] = Value((int)(a * (i - b) * (i - b))); - else if (linear) - SafetyTable[i] = Value((int)(100 * a * (i - b))); } - for (int i = 0; i < 100; i++) + for (int i = 1; i < 100; i++) { - if (SafetyTable[i+1] - SafetyTable[i] > maxSlope) - for (int j = i + 1; j < 100; j++) - SafetyTable[j] = SafetyTable[j-1] + Value(maxSlope); + if (SafetyTable[i] - SafetyTable[i - 1] > maxSlope) + SafetyTable[i] = SafetyTable[i - 1] + Value(maxSlope); if (SafetyTable[i] > Value(peak)) SafetyTable[i] = Value(peak);