X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fpawns.cpp;h=1ccc0958ca432e870629231b9676651f4765710b;hp=86745924bcfe2f308f04a1f9290a7b22d399f27b;hb=ab0f4c03539b151f07d99a5336e47e8dbdc63c6e;hpb=29b5842da8d5477c0aea924cfd364c9e619456a2 diff --git a/src/pawns.cpp b/src/pawns.cpp index 86745924..1ccc0958 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -31,12 +31,8 @@ namespace { #define V Value #define S(mg, eg) make_score(mg, eg) - // Isolated pawn penalty by opposed flag and file - const Score Isolated[2][FILE_NB] = { - { S(31, 36), S(45, 41), S(50, 41), S(50, 41), - S(50, 41), S(50, 41), S(45, 41), S(31, 36) }, - { S(21, 24), S(30, 28), S(33, 28), S(33, 28), - S(33, 28), S(33, 28), S(30, 28), S(21, 24) } }; + // Isolated pawn penalty by opposed flag + const Score Isolated[2] = { S(45, 40), S(30, 27) }; // Backward pawn penalty by opposed flag const Score Backward[2] = { S(56, 33), S(41, 19) }; @@ -48,10 +44,8 @@ namespace { // Connected pawn bonus by opposed, phalanx, twice supported and rank Score Connected[2][2][2][RANK_NB]; - // Doubled pawn penalty by file - const Score Doubled[FILE_NB] = { - S(11, 34), S(17, 38), S(19, 38), S(19, 38), - S(19, 38), S(19, 38), S(17, 38), S(11, 34) }; + // Doubled pawn penalty + const Score Doubled = S(18,38); // Lever bonus by rank const Score Lever[RANK_NB] = { @@ -130,7 +124,7 @@ namespace { opposed = theirPawns & forward_bb(Us, s); stoppers = theirPawns & passed_pawn_mask(Us, s); lever = theirPawns & pawnAttacksBB[s]; - doubled = ourPawns & forward_bb(Us, s); + doubled = ourPawns & (s + Up); neighbours = ourPawns & adjacent_files_bb(f); phalanx = neighbours & rank_bb(s); supported = neighbours & rank_bb(s - Up); @@ -149,19 +143,19 @@ namespace { // either there is a stopper in the way on this rank, or there is a // stopper on adjacent file which controls the way to that rank. backward = (b | shift_bb(b & adjacent_files_bb(f))) & stoppers; - + assert(!backward || !(pawn_attack_span(Them, s + Up) & neighbours)); } // Passed pawns will be properly scored in evaluation because we need // full attack info to evaluate them. Only the frontmost passed // pawn on each file is considered a true passed pawn. - if (!(stoppers | doubled)) + if (!(stoppers | doubled)) // FIXME this is just doubled by adjacent pawn e->passedPawns[Us] |= s; // Score this pawn if (!neighbours) - score -= Isolated[opposed][f]; + score -= Isolated[opposed]; else if (backward) score -= Backward[opposed]; @@ -173,7 +167,7 @@ namespace { score += Connected[opposed][!!phalanx][more_than_one(supported)][relative_rank(Us, s)]; if (doubled) - score -= Doubled[f] / distance(s, frontmost_sq(Us, doubled)); + score -= Doubled; if (lever) score += Lever[relative_rank(Us, s)];