Hi Lucas,lucasart wrote:My qsearch prunes any SEE < 0, which on second thought can be dangerous. The point is that a capture may be losing, if you look only at the exchanges on the target squares, forget everything else on the board, and even the eventuality of checks, especially discovered ones.
Has anyone tried the following:
1/ prune if SEE < 0
2/ prune if SEE < 0, and the move is not a check
3/ prune if SEE < 0, and the move is not a discovered check
I'm currently testing 2/. Of course, it reduces the pruning, but my hope is that it's worth it by making the search more accurate
the distinction i currently use is...
Quiescense PV:
* dont prun SEE < 0
* checks (non captures) are pruned if SEE < 0
* no prunings on evasions
Quiescense:
* prun SEE < 0
* checks (non captures) are pruned if SEE < 0
* no prunings on evasions
A while i played around to set an additional depth condition, let us say
from depth -2 on, which can be another idea. (not only for negative SEE but also
for delta pruning as example or other pruning techniques in qsearch).
So far, for me the most valuable distinction was the pv/evasion/nullwindow one.
Side note:
============
Making a differentiation seems logical to me because captures (also in normal search)
are most often part of forced lines. Having a closer look on my lmr code which pruns
more aggressively on the really late moves (negative SEE captures are mainly at the end of
my movelists) turned out to be a matter of correction. So reducing/pruning negative SEE
captures should be more softend than quite moves, which is my current impression.
And the "forced nature" of this move category needs more distinction within this move class.
regards,
Michael