X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=ecc73b3543d4963d17a1fa630231a1d4729b195d;hp=c1df7c861a58c101531b1111b384bba77ae479c3;hb=044ad593b3c9fa8ab70f9b2ebfc2c36ce398eb5f;hpb=e41602b721c59f1456432f2f8cc8a1b22345659f diff --git a/src/evaluate.cpp b/src/evaluate.cpp index c1df7c86..ecc73b35 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -58,16 +58,18 @@ namespace { // parameters at 100, which looks prettier. // // Values modified by Joona Kiiski - const int WeightMobilityMidgameInternal = 0x0FA; - const int WeightMobilityEndgameInternal = 0x10A; - const int WeightPawnStructureMidgameInternal = 0x0EC; - const int WeightPawnStructureEndgameInternal = 0x0CD; - const int WeightPassedPawnsMidgameInternal = 0x108; - const int WeightPassedPawnsEndgameInternal = 0x109; - const int WeightKingSafetyInternal = 0x0F7; - const int WeightKingOppSafetyInternal = 0x101; - const int WeightSpaceInternal = 0x02F; - + const int WeightMobilityMidgameInternal = 248; + const int WeightMobilityEndgameInternal = 271; + const int WeightPawnStructureMidgameInternal = 233; + const int WeightPawnStructureEndgameInternal = 201; + const int WeightPassedPawnsMidgameInternal = 252; + const int WeightPassedPawnsEndgameInternal = 259; + const int WeightKingSafetyInternal = 247; + const int WeightKingOppSafetyInternal = 259; + const int WeightSpaceInternal = 46; + + // Mobility and outposts bonus modified by Joona Kiiski + // // Visually better to define tables constants typedef Value V; @@ -75,12 +77,12 @@ namespace { // of attacked squares not occupied by friendly piecess. const Value MidgameKnightMobilityBonus[] = { // 0 1 2 3 4 5 6 7 8 - V(-30), V(-20),V(-10), V(0), V(10), V(20), V(25), V(30), V(30) + V(-38), V(-25),V(-12), V(0), V(12), V(25), V(31), V(38), V(38) }; const Value EndgameKnightMobilityBonus[] = { // 0 1 2 3 4 5 6 7 8 - V(-30), V(-20),V(-10), V(0), V(10), V(20), V(25), V(30), V(30) + V(-33), V(-23),V(-13), V(-3), V(7), V(17), V(22), V(27), V(27) }; // Bishop mobility bonus in middle game and endgame, indexed by the number @@ -88,16 +90,16 @@ namespace { // queens are also included. const Value MidgameBishopMobilityBonus[] = { // 0 1 2 3 4 5 6 7 - V(-30), V(-15), V(0), V(15), V(30), V(45), V(58), V(66), + V(-25), V(-11), V(3), V(17), V(31), V(45), V(57), V(65), // 8 9 10 11 12 13 14 15 - V( 72), V( 76), V(78), V(80), V(81), V(82), V(83), V(83) + V( 71), V( 74), V(76), V(78), V(79), V(80), V(81), V(81) }; const Value EndgameBishopMobilityBonus[] = { // 0 1 2 3 4 5 6 7 - V(-30), V(-15), V(0), V(15), V(30), V(45), V(58), V(66), + V(-30), V(-16), V(-2), V(12), V(26), V(40), V(52), V(60), // 8 9 10 11 12 13 14 15 - V( 72), V( 76), V(78), V(80), V(81), V(82), V(83), V(83) + V( 65), V( 69), V(71), V(73), V(74), V(75), V(76), V(76) }; // Rook mobility bonus in middle game and endgame, indexed by the number @@ -105,40 +107,40 @@ namespace { // queens and rooks are also included. const Value MidgameRookMobilityBonus[] = { // 0 1 2 3 4 5 6 7 - V(-18), V(-12), V(-6), V(0), V(6), V(12), V(16), V(21), + V(-20), V(-14), V(-8), V(-2), V(4), V(10), V(14), V(19), // 8 9 10 11 12 13 14 15 - V( 24), V( 27), V(28), V(29), V(30), V(31), V(32), V(33) + V( 23), V( 26), V(27), V(28), V(29), V(30), V(31), V(32) }; const Value EndgameRookMobilityBonus[] = { // 0 1 2 3 4 5 6 7 - V(-30), V(-18), V(-6), V(6), V(18), V(30), V(42), V(54), + V(-36), V(-19), V(-3), V(13), V(29), V(46), V(62), V(79), // 8 9 10 11 12 13 14 15 - V( 66), V( 74), V(78), V(80), V(81), V(82), V(83), V(83) + V( 95), V(106),V(111),V(114),V(116),V(117),V(118),V(118) }; // Queen mobility bonus in middle game and endgame, indexed by the number // of attacked squares not occupied by friendly pieces. const Value MidgameQueenMobilityBonus[] = { // 0 1 2 3 4 5 6 7 - V(-10), V(-8), V(-6), V(-4), V(-2), V( 0), V( 2), V( 4), + V(-10), V(-8), V(-6), V(-3), V(-1), V( 1), V( 3), V( 5), // 8 9 10 11 12 13 14 15 - V( 6), V( 8), V(10), V(12), V(13), V(14), V(15), V(16), + V( 8), V(10), V(12), V(15), V(16), V(17), V(18), V(20), // 16 17 18 19 20 21 22 23 - V( 16), V(16), V(16), V(16), V(16), V(16), V(16), V(16), + V( 20), V(20), V(20), V(20), V(20), V(20), V(20), V(20), // 24 25 26 27 28 29 30 31 - V( 16), V(16), V(16), V(16), V(16), V(16), V(16), V(16) + V( 20), V(20), V(20), V(20), V(20), V(20), V(20), V(20) }; const Value EndgameQueenMobilityBonus[] = { // 0 1 2 3 4 5 6 7 - V(-20),V(-15),V(-10), V(-5), V( 0), V( 5), V(10), V(15), + V(-18),V(-13), V(-7), V(-2), V( 3), V (8), V(13), V(19), // 8 9 10 11 12 13 14 15 - V( 19), V(23), V(27), V(29), V(30), V(30), V(30), V(30), + V( 23), V(27), V(32), V(34), V(35), V(35), V(35), V(35), // 16 17 18 19 20 21 22 23 - V( 30), V(30), V(30), V(30), V(30), V(30), V(30), V(30), + V( 35), V(35), V(35), V(35), V(35), V(35), V(35), V(35), // 24 25 26 27 28 29 30 31 - V( 30), V(30), V(30), V(30), V(30), V(30), V(30), V(30) + V( 35), V(35), V(35), V(35), V(35), V(35), V(35), V(35) }; // Outpost bonuses for knights and bishops, indexed by square (from white's @@ -147,10 +149,10 @@ namespace { // A B C D E F G H V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // 1 V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // 2 - V(0), V(0), V(5),V(10),V(10), V(5), V(0), V(0), // 3 - V(0), V(5),V(20),V(30),V(30),V(20), V(5), V(0), // 4 - V(0),V(10),V(30),V(40),V(40),V(30),V(10), V(0), // 5 - V(0), V(5),V(20),V(20),V(20),V(20), V(5), V(0), // 6 + V(0), V(0), V(4), V(8), V(8), V(4), V(0), V(0), // 3 + V(0), V(4),V(17),V(26),V(26),V(17), V(4), V(0), // 4 + V(0), V(8),V(26),V(35),V(35),V(26), V(8), V(0), // 5 + V(0), V(4),V(17),V(17),V(17),V(17), V(4), V(0), // 6 V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // 7 V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0) // 8 }; @@ -161,7 +163,7 @@ namespace { V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // 2 V(0), V(0), V(5), V(5), V(5), V(5), V(0), V(0), // 3 V(0), V(5),V(10),V(10),V(10),V(10), V(5), V(0), // 4 - V(0),V(10),V(20),V(20),V(20),V(20),V(10), V(0), // 5 + V(0),V(10),V(21),V(21),V(21),V(21),V(10), V(0), // 5 V(0), V(5), V(8), V(8), V(8), V(8), V(5), V(0), // 6 V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0), // 7 V(0), V(0), V(0), V(0), V(0), V(0), V(0), V(0) // 8 @@ -170,13 +172,13 @@ namespace { // Bonus for unstoppable passed pawns const Value UnstoppablePawnValue = Value(0x500); - // Rooks and queens on the 7th rank + // Rooks and queens on the 7th rank (modified by Joona Kiiski) const Value MidgameRookOn7thBonus = Value(47); const Value EndgameRookOn7thBonus = Value(98); const Value MidgameQueenOn7thBonus = Value(27); const Value EndgameQueenOn7thBonus = Value(54); - // Rooks on open files + // Rooks on open files (modified by Joona Kiiski) const Value RookOpenFileBonus = Value(43); const Value RookHalfOpenFileBonus = Value(19); @@ -282,7 +284,7 @@ namespace { EvalInfo &ei); void evaluate_trapped_bishop_a1h1(const Position &pos, Square s, Color us, EvalInfo &ei); - + template void evaluate_space(const Position &p, Color us, EvalInfo &ei); inline Value apply_weight(Value v, int w); Value scale_by_game_phase(Value mv, Value ev, Phase ph, const ScaleFactor sf[]); @@ -324,8 +326,8 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { // Probe the material hash table ei.mi = MaterialTable[threadID]->get_material_info(pos); - ei.mgValue += ei.mi->mg_value(); - ei.egValue += ei.mi->eg_value(); + ei.mgValue += ei.mi->material_value(); + ei.egValue += ei.mi->material_value(); // If we have a specialized evaluation function for the current material // configuration, call it and return @@ -401,8 +403,8 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { // Evaluate space for both sides if (ei.mi->space_weight() > 0) { - evaluate_space(pos, WHITE, ei); - evaluate_space(pos, BLACK, ei); + evaluate_space(pos, WHITE, ei); + evaluate_space(pos, BLACK, ei); } } @@ -530,6 +532,14 @@ void read_weights(Color us) { WeightKingSafety[us] = weight_option("Cowardice", WeightKingSafetyInternal); WeightKingSafety[them] = weight_option("Aggressiveness", WeightKingOppSafetyInternal); + // If running in analysis mode, make sure we use symmetrical king safety. + // We do this by replacing both WeightKingSafety[us] and + // WeightKingSafety[them] by their average. + if (get_option_value_bool("UCI_AnalyseMode")) { + WeightKingSafety[us] = (WeightKingSafety[us] + WeightKingSafety[them]) / 2; + WeightKingSafety[them] = WeightKingSafety[us]; + } + WeightSpace = weight_option("Space", WeightSpaceInternal); init_safety(); @@ -1115,7 +1125,7 @@ namespace { // squares one, two or three squares behind a friendly pawn are counted // twice. Finally, the space bonus is scaled by a weight taken from the // material hash table. - + template void evaluate_space(const Position &pos, Color us, EvalInfo &ei) { Color them = opposite_color(us); @@ -1143,8 +1153,8 @@ namespace { behindFriendlyPawns |= (behindFriendlyPawns << 16); } - int space = count_1s_max_15(safeSquares) - + count_1s_max_15(behindFriendlyPawns & safeSquares); + int space = count_1s_max_15(safeSquares) + + count_1s_max_15(behindFriendlyPawns & safeSquares); ei.mgValue += Sign[us] * apply_weight(Value(space * ei.mi->space_weight()), WeightSpace); }