X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fpawns.cpp;h=280c1fd6a99e569bcbb9ac4c633e6fd50a0f088e;hp=fca33f281a2bb69c6641d6f0c519b50a40c9dadf;hb=b6e9d901b0f82e8500acfad590649bdad9a7756f;hpb=c5ec94d0f1b128fc2c691c7231663a345409d5cc diff --git a/src/pawns.cpp b/src/pawns.cpp index fca33f28..280c1fd6 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -30,40 +30,38 @@ namespace { #define S(mg, eg) make_score(mg, eg) // Doubled pawn penalty by opposed flag and file - const Score DoubledPawnPenalty[2][FILE_NB] = { + const Score Doubled[2][FILE_NB] = { { S(13, 43), S(20, 48), S(23, 48), S(23, 48), S(23, 48), S(23, 48), S(20, 48), S(13, 43) }, { S(13, 43), S(20, 48), S(23, 48), S(23, 48), S(23, 48), S(23, 48), S(20, 48), S(13, 43) }}; // Isolated pawn penalty by opposed flag and file - const Score IsolatedPawnPenalty[2][FILE_NB] = { + const Score Isolated[2][FILE_NB] = { { S(37, 45), S(54, 52), S(60, 52), S(60, 52), S(60, 52), S(60, 52), S(54, 52), S(37, 45) }, { S(25, 30), S(36, 35), S(40, 35), S(40, 35), S(40, 35), S(40, 35), S(36, 35), S(25, 30) }}; // Backward pawn penalty by opposed flag and file - const Score BackwardPawnPenalty[2][FILE_NB] = { + const Score Backward[2][FILE_NB] = { { S(30, 42), S(43, 46), S(49, 46), S(49, 46), S(49, 46), S(49, 46), S(43, 46), S(30, 42) }, { S(20, 28), S(29, 31), S(33, 31), S(33, 31), S(33, 31), S(33, 31), S(29, 31), S(20, 28) }}; // Pawn chain membership bonus by file - const Score ChainBonus[FILE_NB] = { + const Score ChainMember[FILE_NB] = { S(11,-1), S(13,-1), S(13,-1), S(14,-1), S(14,-1), S(13,-1), S(13,-1), S(11,-1) }; // Candidate passed pawn bonus by rank - const Score CandidateBonus[RANK_NB] = { + const Score CandidatePassed[RANK_NB] = { S( 0, 0), S( 6, 13), S(6,13), S(14,29), S(34,68), S(83,166), S(0, 0), S( 0, 0) }; - const Score PawnStructureWeight = S(233, 201); - // Weakness of our pawn shelter in front of the king indexed by [king pawn][rank] const Value ShelterWeakness[2][RANK_NB] = { { V(141), V(0), V(38), V(102), V(128), V(141), V(141) }, @@ -103,8 +101,8 @@ namespace { f = file_of(s); r = rank_of(s); - // This file cannot be half open - e->halfOpenFiles[Us] &= ~(1 << f); + // This file cannot be semi-open + e->semiopenFiles[Us] &= ~(1 << f); // Our rank plus previous one. Used for chain detection b = rank_bb(r) | rank_bb(Us == WHITE ? r - Rank(1) : r + Rank(1)); @@ -161,21 +159,27 @@ namespace { // Score this pawn if (isolated) - value -= IsolatedPawnPenalty[opposed][f]; + value -= Isolated[opposed][f]; if (doubled) - value -= DoubledPawnPenalty[opposed][f]; + value -= Doubled[opposed][f]; if (backward) - value -= BackwardPawnPenalty[opposed][f]; + value -= Backward[opposed][f]; if (chain) - value += ChainBonus[f]; + value += ChainMember[f]; if (candidate) - value += CandidateBonus[relative_rank(Us, s)]; + value += CandidatePassed[relative_rank(Us, s)]; } + e->pawnsOnSquares[Us][BLACK] = popcount(ourPawns & BlackSquares); + e->pawnsOnSquares[Us][WHITE] = pos.piece_count(Us, PAWN) - e->pawnsOnSquares[Us][BLACK]; + + e->pawnsOnSquares[Them][BLACK] = popcount(theirPawns & BlackSquares); + e->pawnsOnSquares[Them][WHITE] = pos.piece_count(Them, PAWN) - e->pawnsOnSquares[Them][BLACK]; + return value; } } @@ -200,7 +204,7 @@ Entry* probe(const Position& pos, Table& entries) { e->key = key; e->passedPawns[WHITE] = e->passedPawns[BLACK] = 0; e->kingSquares[WHITE] = e->kingSquares[BLACK] = SQ_NONE; - e->halfOpenFiles[WHITE] = e->halfOpenFiles[BLACK] = 0xFF; + e->semiopenFiles[WHITE] = e->semiopenFiles[BLACK] = 0xFF; Bitboard wPawns = pos.pieces(WHITE, PAWN); Bitboard bPawns = pos.pieces(BLACK, PAWN); @@ -209,9 +213,6 @@ Entry* probe(const Position& pos, Table& entries) { e->value = evaluate_pawns(pos, wPawns, bPawns, e) - evaluate_pawns(pos, bPawns, wPawns, e); - - e->value = apply_weight(e->value, PawnStructureWeight); - return e; } @@ -231,7 +232,7 @@ Value Entry::shelter_storm(const Position& pos, Square ksq) { Rank rkUs, rkThem; File kf = file_of(ksq); - kf = (kf == FILE_A) ? kf++ : (kf == FILE_H) ? kf-- : kf; + kf = (kf == FILE_A) ? FILE_B : (kf == FILE_H) ? FILE_G : kf; for (int f = kf - 1; f <= kf + 1; f++) {