Don't prune TT move in qsearch even if SEE < 0
authorMarco Costalba <mcostalba@gmail.com>
Tue, 20 Oct 2009 15:14:57 +0000 (16:14 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 22 Oct 2009 06:22:44 +0000 (07:22 +0100)
Even if SEE is negative there is always a good possibility
that TT move is a cut move anyway. For instance a lot of
BXN exchanges that have negative SEE can very easily be
good exchanges.

A nice side effect is a bit reduced frequency of
see_sign() calls.

After 643 games at 1+0
Mod vs Orig +174 =327 -142 52.49%  337.5/643 +17 ELO

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

index ec4272a9e0f9bcb7ebf601515621e34be4e632ba..32b37413ae83f7ed1a2e39c22c80a1de45de602b 100644 (file)
@@ -1596,6 +1596,7 @@ namespace {
 
       // Don't search captures and checks with negative SEE values
       if (   !isCheck
+          &&  move != ttMove
           && !move_is_promotion(move)
           &&  pos.see_sign(move) < 0)
           continue;
@@ -1622,7 +1623,7 @@ namespace {
 
     // All legal moves have been searched.  A special case: If we're in check
     // and no legal moves were found, it is checkmate.
-    if (pos.is_check() && moveCount == 0) // Mate!
+    if (!moveCount && pos.is_check()) // Mate!
         return value_mated_in(ply);
 
     assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);