X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=d2aab71df68c393c5e0323d87514efdaf523aa64;hp=c98a83fc81a777806b111d80200946eaeb271da7;hb=fc0a1f37cf2029af3d35221423da7ac512afbf88;hpb=213166ba225bcefbbe7dbecdacfd726dfb6c34f9 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index c98a83fc..d2aab71d 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -146,23 +146,23 @@ namespace { // PassedRank[Rank] contains a bonus according to the rank of a passed pawn constexpr Score PassedRank[RANK_NB] = { - S(0, 0), S(5, 7), S(5, 13), S(32, 42), S(70, 70), S(172, 170), S(217, 269) + S(0, 0), S(5, 7), S(5, 13), S(18, 23), S(74, 58), S(164, 166), S(268, 243) }; // PassedFile[File] contains a bonus according to the file of a passed pawn constexpr Score PassedFile[FILE_NB] = { - S( 9, 10), S(2, 10), S(1, -8), S(-20,-12), - S(-20,-12), S(1, -8), S(2, 10), S( 9, 10) + S( 15, 7), S(-5, 14), S( 1, -5), S(-22,-11), + S(-22,-11), S( 1, -5), S(-5, 14), S( 15, 7) }; // PassedDanger[Rank] contains a term to weight the passed score - constexpr int PassedDanger[RANK_NB] = { 0, 0, 0, 2, 7, 12, 19 }; + constexpr int PassedDanger[RANK_NB] = { 0, 0, 0, 3, 6, 12, 21 }; // KingProtector[PieceType-2] contains a penalty according to distance from king constexpr Score KingProtector[] = { S(3, 5), S(4, 3), S(3, 0), S(1, -1) }; // Assorted bonuses and penalties - constexpr Score BishopPawns = S( 8, 12); + constexpr Score BishopPawns = S( 3, 5); constexpr Score CloseEnemies = S( 7, 0); constexpr Score Connectivity = S( 3, 1); constexpr Score CorneredBishop = S( 50, 50); @@ -293,7 +293,8 @@ namespace { template template Score Evaluation::pieces() { - constexpr Color Them = (Us == WHITE ? BLACK : WHITE); + constexpr Color Them = (Us == WHITE ? BLACK : WHITE); + constexpr Direction Down = (Us == WHITE ? SOUTH : NORTH); constexpr Bitboard OutpostRanks = (Us == WHITE ? Rank4BB | Rank5BB | Rank6BB : Rank5BB | Rank4BB | Rank3BB); const Square* pl = pos.squares(Us); @@ -349,8 +350,12 @@ namespace { if (Pt == BISHOP) { - // Penalty according to number of pawns on the same color square as the bishop - score -= BishopPawns * pe->pawns_on_same_color_squares(Us, s); + // Penalty according to number of pawns on the same color square as the + // bishop, bigger when the center files are blocked with pawns. + Bitboard blocked = pos.pieces(Us, PAWN) & shift(pos.pieces()); + + score -= BishopPawns * pe->pawns_on_same_color_squares(Us, s) + * (1 + popcount(blocked & CenterFiles)); // Bonus for bishop on a long diagonal which can "see" both center squares if (more_than_one(Center & (attacks_bb(s, pos.pieces(PAWN)) | s)))