]> git.sesse.net Git - stockfish/commitdiff
Revert "Implement old 'multipv' search"
authorStéphane Nicolet <cassio@free.fr>
Sun, 4 Feb 2018 20:42:56 +0000 (21:42 +0100)
committerStéphane Nicolet <cassio@free.fr>
Sun, 4 Feb 2018 20:42:56 +0000 (21:42 +0100)
This revert the following commit:
https://github.com/official-stockfish/Stockfish/commit/44a7db0f9ac02d2461aff39e25f1ac9107ffbfac

Bug report by Ronald de Man in issue:
https://github.com/official-stockfish/Stockfish/issues/1392

Bench: 5023629

src/search.cpp
src/thread.h

index f47507f7e39b6ad6ba7a7ffaf3ebe2f17e1cd6e0..b9ce9a621175023d284ea8ba90c47ce3e29c881a 100644 (file)
@@ -297,7 +297,7 @@ void Thread::search() {
       mainThread->bestMoveChanges = 0;
   }
 
       mainThread->bestMoveChanges = 0;
   }
 
-  multiPV = Options["MultiPV"];
+  size_t multiPV = Options["MultiPV"];
   Skill skill(Options["Skill Level"]);
 
   // When playing with strength handicap enable MultiPV search that we will
   Skill skill(Options["Skill Level"]);
 
   // When playing with strength handicap enable MultiPV search that we will
@@ -802,20 +802,12 @@ moves_loop: // When in check search starts from here
       if (move == excludedMove)
           continue;
 
       if (move == excludedMove)
           continue;
 
-      if (rootNode)
-      {
-          // At root obey the "searchmoves" option and skip moves not listed in Root
-          // Move List. As a consequence any illegal move is also skipped.
-          if (!std::count(thisThread->rootMoves.begin() + thisThread->PVIdx,
-                          thisThread->rootMoves.end(), move))
-              continue;
-
-          // In MultiPV mode we not only skip PV moves which have already been searched,
-          // but also any other move except we have reached the last PV line.
-          if (   thisThread->PVIdx + 1 < thisThread->multiPV
-              && move != ttMove)
-              continue;
-      }
+      // At root obey the "searchmoves" option and skip moves not listed in Root
+      // Move List. As a consequence any illegal move is also skipped. In MultiPV
+      // mode we also skip PV moves which have been already searched.
+      if (rootNode && !std::count(thisThread->rootMoves.begin() + thisThread->PVIdx,
+                                  thisThread->rootMoves.end(), move))
+          continue;
 
       ss->moveCount = ++moveCount;
 
 
       ss->moveCount = ++moveCount;
 
@@ -1535,7 +1527,7 @@ string UCI::pv(const Position& pos, Depth depth, Value alpha, Value beta) {
   int elapsed = Time.elapsed() + 1;
   const RootMoves& rootMoves = pos.this_thread()->rootMoves;
   size_t PVIdx = pos.this_thread()->PVIdx;
   int elapsed = Time.elapsed() + 1;
   const RootMoves& rootMoves = pos.this_thread()->rootMoves;
   size_t PVIdx = pos.this_thread()->PVIdx;
-  size_t multiPV = pos.this_thread()->multiPV;
+  size_t multiPV = std::min((size_t)Options["MultiPV"], rootMoves.size());
   uint64_t nodesSearched = Threads.nodes_searched();
   uint64_t tbHits = Threads.tb_hits() + (TB::RootInTB ? rootMoves.size() : 0);
 
   uint64_t nodesSearched = Threads.nodes_searched();
   uint64_t tbHits = Threads.tb_hits() + (TB::RootInTB ? rootMoves.size() : 0);
 
index 494fdb1583ec1a31ea909e1a3f56a56c5c06366e..1397449733d8f7eebbc303ce879ff1dc7954b7ff 100644 (file)
@@ -60,7 +60,7 @@ public:
   Pawns::Table pawnsTable;
   Material::Table materialTable;
   Endgames endgames;
   Pawns::Table pawnsTable;
   Material::Table materialTable;
   Endgames endgames;
-  size_t PVIdx, multiPV;
+  size_t PVIdx;
   int selDepth, nmp_ply, nmp_odd;
   std::atomic<uint64_t> nodes, tbHits;
 
   int selDepth, nmp_ply, nmp_odd;
   std::atomic<uint64_t> nodes, tbHits;