mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-06 10:53:50 +08:00
Remove major corrhist
Remove major correction history and slightly increase all other correction weights. Passed STC: LLR: 2.95 (-2.94,2.94) <-1.75,0.25> Total: 50080 W: 13171 L: 12959 D: 23950 Ptnml(0-2): 196, 5998, 12462, 6166, 218 https://tests.stockfishchess.org/tests/live_elo/67954526406a4efe9eb7d176 Passed LTC: LLR: 2.95 (-2.94,2.94) <-1.75,0.25> Total: 51504 W: 13188 L: 12995 D: 25321 Ptnml(0-2): 54, 5658, 14128, 5865, 47 https://tests.stockfishchess.org/tests/live_elo/67954961406a4efe9eb7d251 closes https://github.com/official-stockfish/Stockfish/pull/5822 Bench: 2081366
This commit is contained in:
@@ -54,10 +54,6 @@ inline int pawn_structure_index(const Position& pos) {
|
||||
return pos.pawn_key() & ((T == Normal ? PAWN_HISTORY_SIZE : CORRECTION_HISTORY_SIZE) - 1);
|
||||
}
|
||||
|
||||
inline int major_piece_index(const Position& pos) {
|
||||
return pos.major_piece_key() & (CORRECTION_HISTORY_SIZE - 1);
|
||||
}
|
||||
|
||||
inline int minor_piece_index(const Position& pos) {
|
||||
return pos.minor_piece_key() & (CORRECTION_HISTORY_SIZE - 1);
|
||||
}
|
||||
@@ -136,7 +132,6 @@ using PawnHistory = Stats<std::int16_t, 8192, PAWN_HISTORY_SIZE, PIECE_NB, SQUAR
|
||||
// see https://www.chessprogramming.org/Static_Evaluation_Correction_History
|
||||
enum CorrHistType {
|
||||
Pawn, // By color and pawn structure
|
||||
Major, // By color and positions of major pieces (Queen, Rook) and King
|
||||
Minor, // By color and positions of minor pieces (Knight, Bishop) and King
|
||||
NonPawn, // By Non-pawn material positions and color
|
||||
PieceTo, // By [piece][to] move
|
||||
|
||||
@@ -335,7 +335,6 @@ void Position::set_check_info() const {
|
||||
void Position::set_state() const {
|
||||
|
||||
st->key = st->materialKey = 0;
|
||||
st->majorPieceKey = st->minorPieceKey = 0;
|
||||
st->nonPawnKey[WHITE] = st->nonPawnKey[BLACK] = 0;
|
||||
st->pawnKey = Zobrist::noPawns;
|
||||
st->nonPawnMaterial[WHITE] = st->nonPawnMaterial[BLACK] = VALUE_ZERO;
|
||||
@@ -360,16 +359,12 @@ void Position::set_state() const {
|
||||
{
|
||||
st->nonPawnMaterial[color_of(pc)] += PieceValue[pc];
|
||||
|
||||
if (type_of(pc) >= ROOK)
|
||||
st->majorPieceKey ^= Zobrist::psq[pc][s];
|
||||
|
||||
else
|
||||
if (type_of(pc) <= BISHOP)
|
||||
st->minorPieceKey ^= Zobrist::psq[pc][s];
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
st->majorPieceKey ^= Zobrist::psq[pc][s];
|
||||
st->minorPieceKey ^= Zobrist::psq[pc][s];
|
||||
}
|
||||
}
|
||||
@@ -742,7 +737,6 @@ void Position::do_move(Move m,
|
||||
do_castling<true>(us, from, to, rfrom, rto);
|
||||
|
||||
k ^= Zobrist::psq[captured][rfrom] ^ Zobrist::psq[captured][rto];
|
||||
st->majorPieceKey ^= Zobrist::psq[captured][rfrom] ^ Zobrist::psq[captured][rto];
|
||||
st->nonPawnKey[us] ^= Zobrist::psq[captured][rfrom] ^ Zobrist::psq[captured][rto];
|
||||
captured = NO_PIECE;
|
||||
}
|
||||
@@ -773,10 +767,7 @@ void Position::do_move(Move m,
|
||||
st->nonPawnMaterial[them] -= PieceValue[captured];
|
||||
st->nonPawnKey[them] ^= Zobrist::psq[captured][capsq];
|
||||
|
||||
if (type_of(captured) >= ROOK)
|
||||
st->majorPieceKey ^= Zobrist::psq[captured][capsq];
|
||||
|
||||
else
|
||||
if (type_of(captured) <= BISHOP)
|
||||
st->minorPieceKey ^= Zobrist::psq[captured][capsq];
|
||||
}
|
||||
|
||||
@@ -858,10 +849,7 @@ void Position::do_move(Move m,
|
||||
st->materialKey ^=
|
||||
Zobrist::psq[promotion][pieceCount[promotion] - 1] ^ Zobrist::psq[pc][pieceCount[pc]];
|
||||
|
||||
if (promotionType >= ROOK)
|
||||
st->majorPieceKey ^= Zobrist::psq[promotion][to];
|
||||
|
||||
else
|
||||
if (promotionType <= BISHOP)
|
||||
st->minorPieceKey ^= Zobrist::psq[promotion][to];
|
||||
|
||||
// Update material
|
||||
@@ -881,14 +869,10 @@ void Position::do_move(Move m,
|
||||
|
||||
if (type_of(pc) == KING)
|
||||
{
|
||||
st->majorPieceKey ^= Zobrist::psq[pc][from] ^ Zobrist::psq[pc][to];
|
||||
st->minorPieceKey ^= Zobrist::psq[pc][from] ^ Zobrist::psq[pc][to];
|
||||
}
|
||||
|
||||
else if (type_of(pc) >= ROOK)
|
||||
st->majorPieceKey ^= Zobrist::psq[pc][from] ^ Zobrist::psq[pc][to];
|
||||
|
||||
else
|
||||
else if (type_of(pc) <= BISHOP)
|
||||
st->minorPieceKey ^= Zobrist::psq[pc][from] ^ Zobrist::psq[pc][to];
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ struct StateInfo {
|
||||
// Copied when making a move
|
||||
Key materialKey;
|
||||
Key pawnKey;
|
||||
Key majorPieceKey;
|
||||
Key minorPieceKey;
|
||||
Key nonPawnKey[COLOR_NB];
|
||||
Value nonPawnMaterial[COLOR_NB];
|
||||
@@ -154,7 +153,6 @@ class Position {
|
||||
Key key() const;
|
||||
Key material_key() const;
|
||||
Key pawn_key() const;
|
||||
Key major_piece_key() const;
|
||||
Key minor_piece_key() const;
|
||||
Key non_pawn_key(Color c) const;
|
||||
|
||||
@@ -305,8 +303,6 @@ inline Key Position::pawn_key() const { return st->pawnKey; }
|
||||
|
||||
inline Key Position::material_key() const { return st->materialKey; }
|
||||
|
||||
inline Key Position::major_piece_key() const { return st->majorPieceKey; }
|
||||
|
||||
inline Key Position::minor_piece_key() const { return st->minorPieceKey; }
|
||||
|
||||
inline Key Position::non_pawn_key(Color c) const { return st->nonPawnKey[c]; }
|
||||
|
||||
@@ -87,7 +87,6 @@ int correction_value(const Worker& w, const Position& pos, const Stack* ss) {
|
||||
const Color us = pos.side_to_move();
|
||||
const auto m = (ss - 1)->currentMove;
|
||||
const auto pcv = w.pawnCorrectionHistory[us][pawn_structure_index<Correction>(pos)];
|
||||
const auto macv = w.majorPieceCorrectionHistory[us][major_piece_index(pos)];
|
||||
const auto micv = w.minorPieceCorrectionHistory[us][minor_piece_index(pos)];
|
||||
const auto wnpcv = w.nonPawnCorrectionHistory[WHITE][non_pawn_index<WHITE>(pos)][us];
|
||||
const auto bnpcv = w.nonPawnCorrectionHistory[BLACK][non_pawn_index<BLACK>(pos)][us];
|
||||
@@ -95,7 +94,7 @@ int correction_value(const Worker& w, const Position& pos, const Stack* ss) {
|
||||
m.is_ok() ? (*(ss - 2)->continuationCorrectionHistory)[pos.piece_on(m.to_sq())][m.to_sq()]
|
||||
: 0;
|
||||
|
||||
return (6922 * pcv + 3837 * macv + 6238 * micv + 7490 * (wnpcv + bnpcv) + 6270 * cntcv);
|
||||
return (7000 * pcv + 6300 * micv + 7550 * (wnpcv + bnpcv) + 6320 * cntcv);
|
||||
}
|
||||
|
||||
// Add correctionHistory value to raw staticEval and guarantee evaluation
|
||||
@@ -516,7 +515,6 @@ void Search::Worker::clear() {
|
||||
captureHistory.fill(-631);
|
||||
pawnHistory.fill(-1210);
|
||||
pawnCorrectionHistory.fill(0);
|
||||
majorPieceCorrectionHistory.fill(0);
|
||||
minorPieceCorrectionHistory.fill(0);
|
||||
nonPawnCorrectionHistory[WHITE].fill(0);
|
||||
nonPawnCorrectionHistory[BLACK].fill(0);
|
||||
@@ -1439,7 +1437,6 @@ moves_loop: // When in check, search starts here
|
||||
-CORRECTION_HISTORY_LIMIT / 4, CORRECTION_HISTORY_LIMIT / 4);
|
||||
thisThread->pawnCorrectionHistory[us][pawn_structure_index<Correction>(pos)]
|
||||
<< bonus * 114 / 128;
|
||||
thisThread->majorPieceCorrectionHistory[us][major_piece_index(pos)] << bonus * 163 / 128;
|
||||
thisThread->minorPieceCorrectionHistory[us][minor_piece_index(pos)] << bonus * 146 / 128;
|
||||
thisThread->nonPawnCorrectionHistory[WHITE][non_pawn_index<WHITE>(pos)][us]
|
||||
<< bonus * nonPawnWeight / 128;
|
||||
|
||||
@@ -288,7 +288,6 @@ class Worker {
|
||||
PawnHistory pawnHistory;
|
||||
|
||||
CorrectionHistory<Pawn> pawnCorrectionHistory;
|
||||
CorrectionHistory<Major> majorPieceCorrectionHistory;
|
||||
CorrectionHistory<Minor> minorPieceCorrectionHistory;
|
||||
CorrectionHistory<NonPawn> nonPawnCorrectionHistory[COLOR_NB];
|
||||
CorrectionHistory<Continuation> continuationCorrectionHistory;
|
||||
|
||||
Reference in New Issue
Block a user