Extract a reliable PV line
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: 8732553sf_5_base
parent
5ec63eb6b6
commit
e46a72dd1d
|
@ -1401,6 +1401,7 @@ void RootMove::extract_pv_from_tt(Position& pos) {
|
||||||
const TTEntry* tte;
|
const TTEntry* tte;
|
||||||
int ply = 0;
|
int ply = 0;
|
||||||
Move m = pv[0];
|
Move m = pv[0];
|
||||||
|
Value expectedScore = score;
|
||||||
|
|
||||||
pv.clear();
|
pv.clear();
|
||||||
|
|
||||||
|
@ -1411,8 +1412,10 @@ void RootMove::extract_pv_from_tt(Position& pos) {
|
||||||
|
|
||||||
pos.do_move(pv[ply++], *st++);
|
pos.do_move(pv[ply++], *st++);
|
||||||
tte = TT.probe(pos.key());
|
tte = TT.probe(pos.key());
|
||||||
|
expectedScore = -expectedScore;
|
||||||
|
|
||||||
} while ( tte
|
} while ( tte
|
||||||
|
&& expectedScore == value_from_tt(tte->value(), ply)
|
||||||
&& pos.pseudo_legal(m = tte->move()) // Local copy, TT could change
|
&& pos.pseudo_legal(m = tte->move()) // Local copy, TT could change
|
||||||
&& pos.legal(m, pos.pinned_pieces(pos.side_to_move()))
|
&& pos.legal(m, pos.pinned_pieces(pos.side_to_move()))
|
||||||
&& ply < MAX_PLY
|
&& ply < MAX_PLY
|
||||||
|
|
Loading…
Reference in New Issue