by H.G.Muller » 26 Apr 2007, 11:15
I am still going to test one day how much time pruning these losing captures saves in the first place (at equal tactical strength).
The reason is that it interferes with Joker's depth bootstrapping. With an all-captures QS a d=0 node with eval < alpha - POSMARGIN is actually valid as a d=1 search, as all non-captures would be futile anyway in the latter. But if losing captures were pruned, you cannot do that, as in the d=1 such captures might not be futile.
So what you seem to save in the current iteration, you would have to do in the next iteration anyway, when redoing the node at d=1. And in addition, you would have to redo all the good captures as well. Even if they would be hash hits at that time (i.e. if your QS nodes survived in the hash table...), you would have to do several expensive hash probes to get them. If you would have been able to store the result immediately as d=1, a single hash hit on an entry that is more likely to survive would have done it. And even that hash probe would probably not have been done, as the parent node of this all-node would be a cut-node, and the d=1 result for the all-node would thus bootstrap that cut-node from d=1 to d=2, satisfying the hash probe of the next (or next two) iteration there.
So in short: even if there is an advantage in pruning losing captures in a regular search, depth bootstrapping will erode, or might even invert tha advantage.
Furthermore, if losing captures are really losing more than 1 Pawn, the tree searching them is unlikely to ever call the full evaluation, as all nodes where it could want to stand pat will be pruned by futility. Thus, searching the losing captures is generally quite cheap.