mirror of
https://github.com/opelly27/Stockfish.git
synced 2026-05-20 05:07:46 +00:00
Introduce Material Correction History
Idea from Caissa (https://github.com/Witek902/Caissa) chess engine. Add a secondary correction history indexed by the material key of a position. The material key is the zobrist hash representing the number of pieces left in a position. Passed STC: LLR: 2.94 (-2.94,2.94) <0.00,2.00> Total: 189472 W: 49360 L: 48813 D: 91299 Ptnml(0-2): 666, 22453, 47953, 22996, 668 https://tests.stockfishchess.org/tests/view/66cbddafbf8c9d8780fda9f1 Passed LTC: LLR: 2.94 (-2.94,2.94) <0.50,2.50> Total: 224190 W: 57022 L: 56312 D: 110856 Ptnml(0-2): 197, 24723, 61540, 25443, 192 https://tests.stockfishchess.org/tests/view/66cd529bbf8c9d8780fdab4c closes https://github.com/official-stockfish/Stockfish/pull/5556 Bench: 1462697
This commit is contained in:
+8
-3
@@ -81,7 +81,10 @@ constexpr int futility_move_count(bool improving, Depth depth) {
|
||||
// Add correctionHistory value to raw staticEval and guarantee evaluation
|
||||
// does not hit the tablebase range.
|
||||
Value to_corrected_static_eval(Value v, const Worker& w, const Position& pos) {
|
||||
auto cv = w.correctionHistory[pos.side_to_move()][pawn_structure_index<Correction>(pos)];
|
||||
const auto pcv =
|
||||
w.pawnCorrectionHistory[pos.side_to_move()][pawn_structure_index<Correction>(pos)];
|
||||
const auto mcv = w.materialCorrectionHistory[pos.side_to_move()][material_index(pos)];
|
||||
const auto cv = (2 * pcv + mcv) / 3;
|
||||
v += 66 * cv / 512;
|
||||
return std::clamp(v, VALUE_TB_LOSS_IN_MAX_PLY + 1, VALUE_TB_WIN_IN_MAX_PLY - 1);
|
||||
}
|
||||
@@ -487,7 +490,8 @@ void Search::Worker::clear() {
|
||||
mainHistory.fill(0);
|
||||
captureHistory.fill(-700);
|
||||
pawnHistory.fill(-1188);
|
||||
correctionHistory.fill(0);
|
||||
pawnCorrectionHistory.fill(0);
|
||||
materialCorrectionHistory.fill(0);
|
||||
|
||||
for (bool inCheck : {false, true})
|
||||
for (StatsType c : {NoCaptures, Captures})
|
||||
@@ -1390,7 +1394,8 @@ moves_loop: // When in check, search starts here
|
||||
{
|
||||
auto bonus = std::clamp(int(bestValue - ss->staticEval) * depth / 8,
|
||||
-CORRECTION_HISTORY_LIMIT / 4, CORRECTION_HISTORY_LIMIT / 4);
|
||||
thisThread->correctionHistory[us][pawn_structure_index<Correction>(pos)] << bonus;
|
||||
thisThread->pawnCorrectionHistory[us][pawn_structure_index<Correction>(pos)] << bonus;
|
||||
thisThread->materialCorrectionHistory[us][material_index(pos)] << bonus;
|
||||
}
|
||||
|
||||
assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
|
||||
|
||||
Reference in New Issue
Block a user