X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=c8211bb0573d07e82dc2f83e0ca92eca984b4efb;hp=37cdce997c8ec014484c5ab865d50c89751a4d62;hb=f4ace94f91c31631a280b929d50fbe7077305dc2;hpb=4a6d59c6c7caa8a9055197280ea7bdcd072feeaa diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 37cdce99..c8211bb0 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -146,6 +146,17 @@ namespace { S(0, 0), S(0, 0), S(107, 138), S(84, 122), S(114, 203), S(121, 217) }; + // PassedPawnsBonusMg[Rank] and PassedPawnsBonusEg[Rank] + //contains bonuses for midgame and endgame for passed pawns according to + //the rank of the pawn. + const Value PassedPawnsBonusMg[6] = { + V(0), V(1), V(34), V(90), V(214), V(328) + }; + + const Value PassedPawnsBonusEg[6] = { + V(7), V(14), V(37), V(63), V(134), V(189) + }; + const Score ThreatenedByHangingPawn = S(40, 60); // Assorted bonuses and penalties used by evaluation @@ -208,7 +219,7 @@ namespace { ei.pinnedPieces[Us] = pos.pinned_pieces(Us); ei.attackedBy[Us][ALL_PIECES] = ei.attackedBy[Us][PAWN] = ei.pi->pawn_attacks(Us); - Bitboard b = ei.attackedBy[Them][KING] = pos.attacks_from(pos.king_square(Them)); + Bitboard b = ei.attackedBy[Them][KING] = pos.attacks_from(pos.square(Them)); // Init king safety tables only if we are going to use them if (pos.non_pawn_material(Us) >= QueenValueMg) @@ -234,7 +245,7 @@ namespace { const PieceType NextPt = (Us == WHITE ? Pt : PieceType(Pt + 1)); const Color Them = (Us == WHITE ? BLACK : WHITE); - const Square* pl = pos.list(Us); + const Square* pl = pos.squares(Us); ei.attackedBy[Us][Pt] = 0; @@ -246,7 +257,7 @@ namespace { : pos.attacks_from(s); if (ei.pinnedPieces[Us] & s) - b &= LineBB[pos.king_square(Us)][s]; + b &= LineBB[pos.square(Us)][s]; ei.attackedBy[Us][ALL_PIECES] |= ei.attackedBy[Us][Pt] |= b; @@ -316,7 +327,7 @@ namespace { // Penalize when trapped by the king, even more if king cannot castle if (mob <= 3 && !ei.pi->semiopen_file(Us, file_of(s))) { - Square ksq = pos.king_square(Us); + Square ksq = pos.square(Us); if ( ((file_of(ksq) < FILE_E) == (file_of(s) < file_of(ksq))) && (rank_of(ksq) == rank_of(s) || relative_rank(Us, ksq) == RANK_1) @@ -348,7 +359,7 @@ namespace { Bitboard undefended, b, b1, b2, safe; int attackUnits; - const Square ksq = pos.king_square(Us); + const Square ksq = pos.square(Us); // King shelter and enemy pawns storm Score score = ei.pi->king_safety(pos, ksq); @@ -567,20 +578,20 @@ namespace { 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)); + Value mbonus = PassedPawnsBonusMg[r], + ebonus = PassedPawnsBonusEg[r]; if (rr) { Square blockSq = s + pawn_push(Us); // Adjust bonus based on the king's proximity - ebonus += distance(pos.king_square(Them), blockSq) * 5 * rr - - distance(pos.king_square(Us ), blockSq) * 2 * rr; + ebonus += distance(pos.square(Them), blockSq) * 5 * rr + - distance(pos.square(Us ), blockSq) * 2 * rr; // If blockSq is not the queening square then consider also a second push if (relative_rank(Us, blockSq) != RANK_8) - ebonus -= distance(pos.king_square(Us), blockSq + pawn_push(Us)) * rr; + ebonus -= distance(pos.square(Us), blockSq + pawn_push(Us)) * rr; // If the pawn is free to advance, then increase the bonus if (pos.empty(blockSq)) @@ -710,8 +721,8 @@ namespace { // Do not include in mobility squares protected by enemy pawns, or occupied // by our blocked pawns or king. Bitboard mobilityArea[] = { - ~(ei.attackedBy[BLACK][PAWN] | blockedPawns[WHITE] | pos.king_square(WHITE)), - ~(ei.attackedBy[WHITE][PAWN] | blockedPawns[BLACK] | pos.king_square(BLACK)) + ~(ei.attackedBy[BLACK][PAWN] | blockedPawns[WHITE] | pos.square(WHITE)), + ~(ei.attackedBy[WHITE][PAWN] | blockedPawns[BLACK] | pos.square(BLACK)) }; // Evaluate pieces and mobility @@ -772,7 +783,7 @@ namespace { // pawns are drawish. else if ( abs(eg_value(score)) <= BishopValueEg && ei.pi->pawn_span(strongSide) <= 1 - && !pos.pawn_passed(~strongSide, pos.king_square(~strongSide))) + && !pos.pawn_passed(~strongSide, pos.square(~strongSide))) sf = ei.pi->pawn_span(strongSide) ? ScaleFactor(56) : ScaleFactor(38); }