bob wrote:This might be worse than expected. Crafty-23.4R02 is Crafty-23.4 with HashProbe() modified to return "miss" if it gets an EXACT hit, and the value of alpha is < beta - 1 (both are passed in from the current search). Here's the partial results so far:
This is a worse lobotomy than is needed to get complete PVs. When the hit is EXACT, but <= alpha or >= beta, even if the window was open, you can safely take the fail low or fail high, because node is then no longer on any PV.
That is exactly what I did. This is only activated when type==EXACT, and score > alpha _and_ < beta. I wanted to not allow a hash termination on a potential PV pathway.
In other words, you should judge if the node is PV after the hash cutoff, not before.
See above. If the retrieved score is "in the window" it still saves the hash move, but then returns "miss". If the exact score is <= alpha or >= beta, it returns that score which is tested to see if it will cause a cutoff...
BTW, I rewrote the hashing stuff recently, so showing the code won't make any sense if compared to 23.3. The current hashing code is cleaner and the way it interfaces with Search() is more sensible. I do not like the idea of looking up an entry, then having other places look at the hash entry to see if it should be tested for tt-singular and such. All of the accessing of pieces of the entry are now done in HashProbe() which is a much better structure by classic object-oriented programming standards. And it did make this change trivial to implement. If I return "HIT" then the value is tested in search, as expected. If I return "MISS" the value is ignored.
Still, I think there could be a performance hit: even though you would get hits on all non-PV side branches in the next move, making the overhead quite small, there remans an important effect on the PV itself: You suppress any form of grafting. Because you will search the PV, you will always get a score for it at the requested depth, even if deeper data was available in the hash.
The idea just seems wrong. We are going to get funny PVs because of grafting, or we lose the benefit of EXACT entries along PV nodes. One hurts performance, one hurts aesthetics.