Extract a reliable PV line
authorMarco Costalba <mcostalba@gmail.com>
Sat, 17 May 2014 10:49:52 +0000 (12:49 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 17 May 2014 10:49:52 +0000 (12:49 +0200)
Truncate the extracted PV from the point where
the score stored in hash starts to deviate from
the root score.

Idea from Ronald de Man.

bench: 8732553

src/search.cpp

index aa63fcb4392d2fbe839b91b2c3bdfc1e764dd69d..6a4e352f279f95b242d14cee95a23a303bc2bce7 100644 (file)
@@ -1401,6 +1401,7 @@ void RootMove::extract_pv_from_tt(Position& pos) {
   const TTEntry* tte;
   int ply = 0;
   Move m = pv[0];
+  Value expectedScore = score;
 
   pv.clear();
 
@@ -1411,8 +1412,10 @@ void RootMove::extract_pv_from_tt(Position& pos) {
 
       pos.do_move(pv[ply++], *st++);
       tte = TT.probe(pos.key());
+      expectedScore = -expectedScore;
 
   } while (   tte
+           && expectedScore == value_from_tt(tte->value(), ply)
            && pos.pseudo_legal(m = tte->move()) // Local copy, TT could change
            && pos.legal(m, pos.pinned_pieces(pos.side_to_move()))
            && ply < MAX_PLY