Extract only exact scores to get the PV
authorMarco Costalba <mcostalba@gmail.com>
Sun, 27 Jun 2010 14:13:22 +0000 (15:13 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 29 Jun 2010 17:23:28 +0000 (18:23 +0100)
This should allow to skip overwritten nodes because
only in PV we store in TT with VALUE_TYPE_EXACT flag.

Test result for the whole series is:

After 3627 games at 5"
Mod vs Orig +1037 =1605 -985 +5 ELO

After 1311 games at 1'+0"
Mod vs Orig +234 =850 -227 +2 ELO

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

index b7d47e7498951320a861dd60c66877a0a3ce710e..f3af6432a090149ca3905839abd879b0bf33f9a7 100644 (file)
@@ -197,9 +197,11 @@ void TranspositionTable::extract_pv(const Position& pos, Move bestMove, Move pv[
   pv[ply] = bestMove;
   p.do_move(pv[ply++], st);
 
-  // Try to add moves from TT while possible
+  // Extract moves from TT when possible. We try hard to always
+  // get a ponder move, that's the reason of ply < 2 conditions.
   while (   (tte = retrieve(p.get_key())) != NULL
          && tte->move() != MOVE_NONE
+         && (tte->type() == VALUE_TYPE_EXACT || ply < 2)
          && move_is_legal(p, tte->move())
          && (!p.is_draw() || ply < 2)
          && ply < PLY_MAX)