X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmaterial.cpp;h=b7db134b9aa35d0a43dae7d4355f71af34a65327;hp=0949a1bf418a899072865ad043d1048c39a1598b;hb=d3091971b789b4be4c56fdf608eae33c5c54bbd4;hpb=264c8637a30247f1054f60b7b728fb4340185efa diff --git a/src/material.cpp b/src/material.cpp index 0949a1bf..b7db134b 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -29,10 +29,10 @@ namespace { // Polynomial material balance parameters - // pair pawn knight bishop rook queen - const int LinearCoefficients[6] = { 1852, -162, -1122, -183, 249, -154 }; + // pair pawn knight bishop rook queen + const int Linear[6] = { 1852, -162, -1122, -183, 249, -154 }; - const int QuadraticCoefficientsSameSide[][PIECE_TYPE_NB] = { + const int QuadraticSameSide[][PIECE_TYPE_NB] = { // OUR PIECES // pair pawn knight bishop rook queen { 0 }, // Bishop pair @@ -43,7 +43,7 @@ namespace { {-177, 25, 129, 142, -137, 0 } // Queen }; - const int QuadraticCoefficientsOppositeSide[][PIECE_TYPE_NB] = { + const int QuadraticOppositeSide[][PIECE_TYPE_NB] = { // THEIR PIECES // pair pawn knight bishop rook queen { 0 }, // Bishop pair @@ -93,26 +93,24 @@ namespace { const Color Them = (Us == WHITE ? BLACK : WHITE); - int pt1, pt2, pc, v; - int value = 0; + int bonus = 0; // Second-degree polynomial material imbalance by Tord Romstad - for (pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1) + for (int pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1) { - pc = pieceCount[Us][pt1]; - if (!pc) + if (!pieceCount[Us][pt1]) continue; - v = LinearCoefficients[pt1]; + int v = Linear[pt1]; - for (pt2 = NO_PIECE_TYPE; pt2 <= pt1; ++pt2) - v += QuadraticCoefficientsSameSide[pt1][pt2] * pieceCount[Us][pt2] - + QuadraticCoefficientsOppositeSide[pt1][pt2] * pieceCount[Them][pt2]; + for (int pt2 = NO_PIECE_TYPE; pt2 <= pt1; ++pt2) + v += QuadraticSameSide[pt1][pt2] * pieceCount[Us][pt2] + + QuadraticOppositeSide[pt1][pt2] * pieceCount[Them][pt2]; - value += pc * v; + bonus += pieceCount[Us][pt1] * v; } - return value; + return bonus; } } // namespace @@ -138,7 +136,7 @@ Entry* probe(const Position& pos, Table& entries, Endgames& endgames) { std::memset(e, 0, sizeof(Entry)); e->key = key; e->factor[WHITE] = e->factor[BLACK] = (uint8_t)SCALE_FACTOR_NORMAL; - e->gamePhase = game_phase(pos); + e->gamePhase = pos.game_phase(); // Let's look if we have a specialized evaluation function for this particular // material configuration. Firstly we look for a fixed configuration one, then @@ -247,18 +245,4 @@ Entry* probe(const Position& pos, Table& entries, Endgames& endgames) { return e; } - -/// Material::game_phase() calculates the phase given the current -/// position. Because the phase is strictly a function of the material, it -/// is stored in MaterialEntry. - -Phase game_phase(const Position& pos) { - - Value npm = pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK); - - return npm >= MidgameLimit ? PHASE_MIDGAME - : npm <= EndgameLimit ? PHASE_ENDGAME - : Phase(((npm - EndgameLimit) * 128) / (MidgameLimit - EndgameLimit)); -} - } // namespace Material