The idea is to catch cases where a capture clearly refutes the previous move at high depth. Note that at low depth, static null move pruning will catch such cases provided there's a TT hit and one adjusts their static eval based on the TT entry's score and bounds. At higher depth, while null move pruning isn't disabled, the side to move's tempo is likely very important if the TT best move is a capture. My implementation seeks to patch this pruning "hole".
Currently, I have the following:
https://github.com/connormcmonigle/seer ... ker.h#L351
Code: Select all
const bool prob_prune = !is_pv && !excluded_move && entry && depth >= 4 &&
entry->best_move().is_capture() && entry->bound() == bound_type::lower &&
entry->score() > beta + 768 &&
entry->depth() + 2 >= depth;
if (prob_prune) { return beta; }
http://chess.grantnet.us/test/13119/
http://chess.grantnet.us/test/13120/
http://chess.grantnet.us/test/13130/
http://chess.grantnet.us/test/13131/
http://chess.grantnet.us/test/13175/
http://chess.grantnet.us/test/13176/