TT with Null Move Cuts A PV Node/Line
Posted: Fri Feb 21, 2014 11:45 pm
Hi,
I am hitting problem with my PV line being cut short (when displayed and recorded). I see this is not a new topic and have researched a fair amount. Sorry for an redundancy with this subject but I am stuck on how to resolve.
My search uses PVS, retains history for ordering, has an always overwrite TT, and I added null move pruning. I thought I saw this issue, rarely, before null move pruning was added, but it is noticeable now and seems as if the combination of a TT and null move pruning make some PV lines short.
After debugging, it appears there are PV nodes being discovered, written to the TT (this is expected), and then overwritten later by a cut move in the TT (well, this is expected but not understood ). As the search continues, it gets a TT hit which happens to actually make a cut in the line.
I have tried saving/extracting the PV via the following methods to compare them all and see what's going on:
* main TT bucket
* a PV TT bucket that holds PV moves
* a triangular array
* a linked PV list.
All see a similar cut at various points. There are PLYs where one is not altered or all are altered the same.
If I disable the probe TT, the Triangular array and PV list seem to be just fine while extracting the PV from the PVTT is not.
I read about "do not cut at PV nodes". When score > alpha, I set "isPvNode=true". Where I check for a cut (if score >=beta) I have modified to if(score >=beta && !isPvNode) but no dice. I even applied various "if(something) writeTT()" to not write the TT with the cutting move/score. I have also tried preventing overwrites in the TT of an exact entry with a lower bound entry.
I have somewhat tried not setting the TT with a move within the null move search tree that cuts.
I just cannot seem to prevent this from happening.
Any advice is greatly appreciated
Thanks!
I am hitting problem with my PV line being cut short (when displayed and recorded). I see this is not a new topic and have researched a fair amount. Sorry for an redundancy with this subject but I am stuck on how to resolve.
My search uses PVS, retains history for ordering, has an always overwrite TT, and I added null move pruning. I thought I saw this issue, rarely, before null move pruning was added, but it is noticeable now and seems as if the combination of a TT and null move pruning make some PV lines short.
After debugging, it appears there are PV nodes being discovered, written to the TT (this is expected), and then overwritten later by a cut move in the TT (well, this is expected but not understood ). As the search continues, it gets a TT hit which happens to actually make a cut in the line.
I have tried saving/extracting the PV via the following methods to compare them all and see what's going on:
* main TT bucket
* a PV TT bucket that holds PV moves
* a triangular array
* a linked PV list.
All see a similar cut at various points. There are PLYs where one is not altered or all are altered the same.
If I disable the probe TT, the Triangular array and PV list seem to be just fine while extracting the PV from the PVTT is not.
I read about "do not cut at PV nodes". When score > alpha, I set "isPvNode=true". Where I check for a cut (if score >=beta) I have modified to if(score >=beta && !isPvNode) but no dice. I even applied various "if(something) writeTT()" to not write the TT with the cutting move/score. I have also tried preventing overwrites in the TT of an exact entry with a lower bound entry.
I have somewhat tried not setting the TT with a move within the null move search tree that cuts.
I just cannot seem to prevent this from happening.
Any advice is greatly appreciated
Thanks!