Obey skipQuiets strictly in MovePicker
authorprotonspring <mike@whiteley.org>
Thu, 8 Feb 2018 09:45:45 +0000 (10:45 +0100)
committerStéphane Nicolet <cassio@free.fr>
Thu, 8 Feb 2018 09:46:27 +0000 (10:46 +0100)
The current logic in master is to continue return quiet moves if their
history score is above 0. It appears as though this check can be
removed, which is also more logically consistent with the “skipQuiets”
semantics used in search.cpp.

This patch may open new opportunitiesto get Elo by changing or
tuning the definition of 'moveCountPruning' in line 830 of search.cpp,
because obeying skipQuiets without checking the history scores makes
the search more sensitive to 'moveCountPruning'.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 34780 W: 7680 L: 7584 D: 19516
http://tests.stockfishchess.org/tests/view/5a79f8d80ebc5902971a99db

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 38757 W: 6732 L: 6641 D: 25384
http://tests.stockfishchess.org/tests/view/5a7afebe0ebc5902971a9a46

Bench 4954595

src/movepick.cpp

index 74da320..b4cae3a 100644 (file)
@@ -221,17 +221,17 @@ Move MovePicker::next_move(bool skipQuiets) {
       /* fallthrough */
 
   case QUIET:
-      while (    cur < endMoves
-             && (!skipQuiets || cur->value >= VALUE_ZERO))
-      {
-          move = *cur++;
-
-          if (   move != ttMove
-              && move != killers[0]
-              && move != killers[1]
-              && move != countermove)
-              return move;
-      }
+      if (!skipQuiets)
+         while (cur < endMoves)
+         {
+             move = *cur++;
+
+             if (   move != ttMove
+                 && move != killers[0]
+                 && move != killers[1]
+                 && move != countermove)
+                 return move;
+         }
       ++stage;
       cur = moves; // Point to beginning of bad captures
       /* fallthrough */