From: VoyagerOne Date: Mon, 24 Oct 2016 14:05:02 +0000 (-0400) Subject: History Stat Comparison X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=e77f38c43102634139287b067a8079af36678bdb History Stat Comparison Adjust LMR by comparing history stats with opponent (prior ply). STC: LLR: 2.96 (-2.94,2.94) [0.00,5.00] Total: 27754 W: 5066 L: 4824 D: 17864 LTC: LLR: 2.95 (-2.94,2.94) [0.00,5.00] Total: 216596 W: 28157 L: 27343 D: 161096 Bench: 5437729 --- diff --git a/src/search.cpp b/src/search.cpp index e4c903a5..eb80d177 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -570,6 +570,7 @@ namespace { Thread* thisThread = pos.this_thread(); inCheck = pos.checkers(); moveCount = quietCount = ss->moveCount = 0; + ss->history = VALUE_ZERO; bestValue = -VALUE_INFINITE; ss->ply = (ss-1)->ply + 1; @@ -994,14 +995,22 @@ moves_loop: // When in check search starts from here && !pos.see_ge(make_move(to_sq(move), from_sq(move)), VALUE_ZERO)) r -= 2 * ONE_PLY; + ss->history = thisThread->history[moved_piece][to_sq(move)] + + (cmh ? (*cmh )[moved_piece][to_sq(move)] : VALUE_ZERO) + + (fmh ? (*fmh )[moved_piece][to_sq(move)] : VALUE_ZERO) + + (fmh2 ? (*fmh2)[moved_piece][to_sq(move)] : VALUE_ZERO) + + thisThread->fromTo.get(~pos.side_to_move(), move) + - 8000; // Correction factor + + // Decrease/increase reduction by comparing opponent's stat score + if (ss->history > VALUE_ZERO && (ss-1)->history < VALUE_ZERO) + r -= ONE_PLY; + + else if (ss->history < VALUE_ZERO && (ss-1)->history > VALUE_ZERO) + r += ONE_PLY; + // Decrease/increase reduction for moves with a good/bad history - Value val = thisThread->history[moved_piece][to_sq(move)] - + (cmh ? (*cmh )[moved_piece][to_sq(move)] : VALUE_ZERO) - + (fmh ? (*fmh )[moved_piece][to_sq(move)] : VALUE_ZERO) - + (fmh2 ? (*fmh2)[moved_piece][to_sq(move)] : VALUE_ZERO) - + thisThread->fromTo.get(~pos.side_to_move(), move); - int rHist = (val - 8000) / 20000; - r = std::max(DEPTH_ZERO, (r / ONE_PLY - rHist) * ONE_PLY); + r = std::max(DEPTH_ZERO, (r / ONE_PLY - ss->history / 20000) * ONE_PLY); } Depth d = std::max(newDepth - r, ONE_PLY); diff --git a/src/search.h b/src/search.h index 121ab8d1..d8051ec0 100644 --- a/src/search.h +++ b/src/search.h @@ -43,6 +43,7 @@ struct Stack { Move excludedMove; Move killers[2]; Value staticEval; + Value history; bool skipEarlyPruning; int moveCount; CounterMoveStats* counterMoves;