X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fevaluate.cpp;h=2cfa4d5a6e3f594a8002e45eebe77adbb7bef727;hb=ae2f5f25cd8a6bc2762eefc032436052c0db679e;hp=71335c1bf3e3a9c52492aca1d7db949a5378ec6e;hpb=8447248705bc6cf91fc8cdbb519c31925862ea74;p=stockfish diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 71335c1b..2cfa4d5a 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -88,7 +88,7 @@ namespace { // // Values modified by Joona Kiiski const Score WeightsInternal[] = { - S(248, 271), S(252, 259), S(46, 0), S(247, 0), S(259, 0) + S(284, 229), S(252, 259), S(46, 0), S(209, 0), S(349, 0) }; // MobilityBonus[PieceType][attacked] contains mobility bonuses for middle and @@ -142,9 +142,9 @@ namespace { { S(0, 0), S(15, 39), S(15, 39), S(15, 39), S(15, 39), S( 0, 0) } // QUEEN }; - // ThreatedByPawnPenalty[PieceType] contains a penalty according to which + // ThreatenedByPawnPenalty[PieceType] contains a penalty according to which // piece type is attacked by an enemy pawn. - const Score ThreatedByPawnPenalty[] = { + const Score ThreatenedByPawnPenalty[] = { S(0, 0), S(0, 0), S(56, 70), S(56, 70), S(76, 99), S(86, 118) }; @@ -524,7 +524,7 @@ namespace { // Decrease score if we are attacked by an enemy pawn. Remaining part // of threat evaluation must be done later when we have full attack info. if (bit_is_set(ei.attackedBy[Them][PAWN], s)) - score -= ThreatedByPawnPenalty[Piece]; + score -= ThreatenedByPawnPenalty[Piece]; // Bishop and knight outposts squares if ((Piece == BISHOP || Piece == KNIGHT) && pos.square_is_weak(s, Us)) @@ -812,9 +812,12 @@ namespace { Square blockSq = s + pawn_push(Us); // Adjust bonus based on kings proximity - ebonus -= Value(square_distance(pos.king_square(Us), blockSq) * 3 * rr); - ebonus -= Value(square_distance(pos.king_square(Us), blockSq + pawn_push(Us)) * rr); ebonus += Value(square_distance(pos.king_square(Them), blockSq) * 6 * rr); + ebonus -= Value(square_distance(pos.king_square(Us), blockSq) * 3 * rr); + + // If blockSq is not the queening square then consider also a second push + if (square_rank(blockSq) != (Us == WHITE ? RANK_8 : RANK_1)) + ebonus -= Value(square_distance(pos.king_square(Us), blockSq + pawn_push(Us)) * rr); // If the pawn is free to advance, increase bonus if (pos.square_is_empty(blockSq)) @@ -921,7 +924,7 @@ namespace { // Opponent king cannot block because path is defended and position // is not in check. So only friendly pieces can be blockers. assert(!pos.in_check()); - assert(queeningPath & pos.occupied_squares() == queeningPath & pos.pieces_of_color(c)); + assert((queeningPath & pos.occupied_squares()) == (queeningPath & pos.pieces_of_color(c))); // Add moves needed to free the path from friendly pieces and retest condition movesToGo += count_1s(queeningPath & pos.pieces_of_color(c));