]> git.sesse.net Git - stockfish/commitdiff
Remove HistoryStats
authorlucasart <lucas.braesch@gmail.com>
Mon, 9 Jan 2017 10:57:34 +0000 (18:57 +0800)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 9 Jan 2017 14:50:12 +0000 (15:50 +0100)
STC:
LLR: 3.44 (-2.94,2.94) [-3.00,1.00]
Total: 120831 W: 21572 L: 21594 D: 77665

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 26565 W: 3519 L: 3406 D: 19640

bench 5920493

src/movepick.cpp
src/movepick.h
src/search.cpp
src/thread.h

index 34d295626b80732930dfbf2100ada837d475530f..08dabe0a1eedb51af077cef8677da3a3a5938b2a 100644 (file)
@@ -140,7 +140,6 @@ void MovePicker::score<CAPTURES>() {
 template<>
 void MovePicker::score<QUIETS>() {
 
 template<>
 void MovePicker::score<QUIETS>() {
 
-  const HistoryStats& history = pos.this_thread()->history;
   const FromToStats& fromTo = pos.this_thread()->fromTo;
 
   const CounterMoveStats* cmh = (ss-1)->counterMoves;
   const FromToStats& fromTo = pos.this_thread()->fromTo;
 
   const CounterMoveStats* cmh = (ss-1)->counterMoves;
@@ -150,8 +149,7 @@ void MovePicker::score<QUIETS>() {
   Color c = pos.side_to_move();
 
   for (auto& m : *this)
   Color c = pos.side_to_move();
 
   for (auto& m : *this)
-      m.value =          history[pos.moved_piece(m)][to_sq(m)]
-               + (cmh  ?  (*cmh)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
+      m.value =  (cmh  ?  (*cmh)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
                + (fmh  ?  (*fmh)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
                + (fmh2 ? (*fmh2)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
                + fromTo.get(c, m);
                + (fmh  ?  (*fmh)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
                + (fmh2 ? (*fmh2)[pos.moved_piece(m)][to_sq(m)] : VALUE_ZERO)
                + fromTo.get(c, m);
@@ -159,17 +157,16 @@ void MovePicker::score<QUIETS>() {
 
 template<>
 void MovePicker::score<EVASIONS>() {
 
 template<>
 void MovePicker::score<EVASIONS>() {
-  // Try captures ordered by MVV/LVA, then non-captures ordered by history value
-  const HistoryStats& history = pos.this_thread()->history;
+  // Try captures ordered by MVV/LVA, then non-captures ordered by stats heuristics
   const FromToStats& fromTo = pos.this_thread()->fromTo;
   Color c = pos.side_to_move();
 
   for (auto& m : *this)
       if (pos.capture(m))
           m.value =  PieceValue[MG][pos.piece_on(to_sq(m))]
   const FromToStats& fromTo = pos.this_thread()->fromTo;
   Color c = pos.side_to_move();
 
   for (auto& m : *this)
       if (pos.capture(m))
           m.value =  PieceValue[MG][pos.piece_on(to_sq(m))]
-                   - Value(type_of(pos.moved_piece(m))) + HistoryStats::Max;
+                   - Value(type_of(pos.moved_piece(m))) + FromToStats::Max;
       else
       else
-          m.value = history[pos.moved_piece(m)][to_sq(m)] + fromTo.get(c, m);
+          m.value = fromTo.get(c, m);
 }
 
 
 }
 
 
index 6fbd8be1387fc46ce277a03f29a1f2442171ac19..b59b0e93ba33a469419a9dbbfab8ecbad3eb6c6b 100644 (file)
@@ -38,9 +38,6 @@
 /// different origin but same destination and piece will be considered identical.
 template<typename T, bool CM = false>
 struct Stats {
 /// different origin but same destination and piece will be considered identical.
 template<typename T, bool CM = false>
 struct Stats {
-
-  static const Value Max = Value(1 << 28);
-
   const T* operator[](Piece pc) const { return table[pc]; }
   T* operator[](Piece pc) { return table[pc]; }
   void clear() { std::memset(table, 0, sizeof(table)); }
   const T* operator[](Piece pc) const { return table[pc]; }
   T* operator[](Piece pc) { return table[pc]; }
   void clear() { std::memset(table, 0, sizeof(table)); }
@@ -59,12 +56,13 @@ private:
 };
 
 typedef Stats<Move> MoveStats;
 };
 
 typedef Stats<Move> MoveStats;
-typedef Stats<Value, false> HistoryStats;
-typedef Stats<Value,  true> CounterMoveStats;
+typedef Stats<Value, true> CounterMoveStats;
 typedef Stats<CounterMoveStats> CounterMoveHistoryStats;
 
 struct FromToStats {
 
 typedef Stats<CounterMoveStats> CounterMoveHistoryStats;
 
 struct FromToStats {
 
+  static const Value Max = Value(1 << 28);
+
   Value get(Color c, Move m) const { return table[c][from_sq(m)][to_sq(m)]; }
   void clear() { std::memset(table, 0, sizeof(table)); }
   void update(Color c, Move m, Value v) {
   Value get(Color c, Move m) const { return table[c][from_sq(m)][to_sq(m)]; }
   void clear() { std::memset(table, 0, sizeof(table)); }
   void update(Color c, Move m, Value v) {
index a9fc1c6d4c80b41aec8c20c4b6b2e7c070760050..c54c1269089ed9237558f4adb18595573235b4ea 100644 (file)
@@ -211,7 +211,6 @@ void Search::clear() {
 
   for (Thread* th : Threads)
   {
 
   for (Thread* th : Threads)
   {
-      th->history.clear();
       th->counterMoves.clear();
       th->fromTo.clear();
       th->counterMoveHistory.clear();
       th->counterMoves.clear();
       th->fromTo.clear();
       th->counterMoveHistory.clear();
@@ -642,7 +641,7 @@ namespace {
         && (ttValue >= beta ? (tte->bound() & BOUND_LOWER)
                             : (tte->bound() & BOUND_UPPER)))
     {
         && (ttValue >= beta ? (tte->bound() & BOUND_LOWER)
                             : (tte->bound() & BOUND_UPPER)))
     {
-        // If ttMove is quiet, update killers, history, counter move on TT hit
+        // If ttMove is quiet, update move sorting heuristics on TT hit
         if (ttValue >= beta && ttMove)
         {
             if (!pos.capture_or_promotion(ttMove))
         if (ttValue >= beta && ttMove)
         {
             if (!pos.capture_or_promotion(ttMove))
@@ -983,12 +982,11 @@ 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;
 
                        && !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
+              ss->history =  (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)
 
               // Decrease/increase reduction by comparing opponent's stat score
               if (ss->history > VALUE_ZERO && (ss-1)->history < VALUE_ZERO)
@@ -1118,7 +1116,7 @@ moves_loop: // When in check search starts from here
     else if (bestMove)
     {
 
     else if (bestMove)
     {
 
-        // Quiet best move: update killers, history and countermoves
+        // Quiet best move: update move sorting heuristics
         if (!pos.capture_or_promotion(bestMove))
             update_stats(pos, ss, bestMove, quietsSearched, quietCount, bonus(depth));
 
         if (!pos.capture_or_promotion(bestMove))
             update_stats(pos, ss, bestMove, quietsSearched, quietCount, bonus(depth));
 
@@ -1404,8 +1402,7 @@ moves_loop: // When in check search starts from here
   }
 
 
   }
 
 
-  // update_stats() updates killers, history, countermove and countermove plus
-  // follow-up move history when a new quiet best move is found.
+  // update_stats() updates move sorting heuristics when a new quiet best move is found
 
   void update_stats(const Position& pos, Stack* ss, Move move,
                     Move* quiets, int quietsCnt, Value bonus) {
 
   void update_stats(const Position& pos, Stack* ss, Move move,
                     Move* quiets, int quietsCnt, Value bonus) {
@@ -1419,7 +1416,6 @@ moves_loop: // When in check search starts from here
     Color c = pos.side_to_move();
     Thread* thisThread = pos.this_thread();
     thisThread->fromTo.update(c, move, bonus);
     Color c = pos.side_to_move();
     Thread* thisThread = pos.this_thread();
     thisThread->fromTo.update(c, move, bonus);
-    thisThread->history.update(pos.moved_piece(move), to_sq(move), bonus);
     update_cm_stats(ss, pos.moved_piece(move), to_sq(move), bonus);
 
     if ((ss-1)->counterMoves)
     update_cm_stats(ss, pos.moved_piece(move), to_sq(move), bonus);
 
     if ((ss-1)->counterMoves)
@@ -1432,7 +1428,6 @@ moves_loop: // When in check search starts from here
     for (int i = 0; i < quietsCnt; ++i)
     {
         thisThread->fromTo.update(c, quiets[i], -bonus);
     for (int i = 0; i < quietsCnt; ++i)
     {
         thisThread->fromTo.update(c, quiets[i], -bonus);
-        thisThread->history.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
         update_cm_stats(ss, pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
     }
   }
         update_cm_stats(ss, pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
     }
   }
index 1ffacb300de2d24d79120c90c4d8239a4aa58cad..a4d78571c8bd2bbbc2ebc247bbfabcf0eadd0b33 100644 (file)
@@ -69,7 +69,6 @@ public:
   Depth rootDepth;
   Depth completedDepth;
   std::atomic_bool resetCalls;
   Depth rootDepth;
   Depth completedDepth;
   std::atomic_bool resetCalls;
-  HistoryStats history;
   MoveStats counterMoves;
   FromToStats fromTo;
   CounterMoveHistoryStats counterMoveHistory;
   MoveStats counterMoves;
   FromToStats fromTo;
   CounterMoveHistoryStats counterMoveHistory;