]> git.sesse.net Git - stockfish/commitdiff
Avoid search tree explosion in qsearch
authorMarco Costalba <mcostalba@gmail.com>
Fri, 29 Jan 2010 15:47:04 +0000 (16:47 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 29 Jan 2010 15:47:04 +0000 (16:47 +0100)
Under some rare cases we can have a search tree explosion
due to a perpetual check or to a very long non-capture TT
sequence.

This avoids the tree explosion not following TT moves that
are not captures or promotions when we are below the
'generate checks' depth.

Idea suggested by Richard Vida.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/movepick.cpp

index 16eb16348c1791f2761f36c8f2d96d1ce039c35d..638f81757d2af94d72c9b0c6739ab1d191d2c6f5 100644 (file)
@@ -94,8 +94,16 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
   else if (d == Depth(0))
       phasePtr = QsearchWithChecksPhaseTable;
   else
+  {
       phasePtr = QsearchWithoutChecksPhaseTable;
 
+      // Skip TT move if is not a capture or a promotion, this avoids
+      // qsearch tree explosion due to a possible perpetual check or
+      // similar rare cases when TT table is full.
+      if (ttm != MOVE_NONE && !pos.move_is_capture_or_promotion(ttm))
+          searchTT = ttMoves[0].move = MOVE_NONE;
+  }
+
   phasePtr += !searchTT - 1;
   go_next_phase();
 }