Reductions and null move refutations
Posted: 18 Apr 2005, 00:19
Hi all,
This evening I made a little experiment: At a node directly following a reduction, if the null move fails low, and the moving piece in the move which refutes the null move is the same as the moving piece in the reduced move, immediately cancel the reduced-depth search and re-search with normal depth. The idea is that when this happens, the reduced-depth move is likely to contain some kind of serious tactical or positional threat, and deserves a non-reduced search.
In pseudo code, it looks approximately like this:
I have no available CPU time for testing this change in real games at the moment, but it seems to be extremely effective in tactical positions. On my iMac G5 1.8 GHz, Glaurung scores 153/183 at ECMGCP at 10 seconds per move with the new trick enabled (the best score I have ever seen from Glaurung). Without the trick, the score drops to 144/183.
Perhaps something similar would be worth trying even in engines which do not use reductions. If a null move is refuted by a move which was made possible by the move at the previous ply, make a small fractional extension.
Has anyone experimented with similar ideas?
Tord
This evening I made a little experiment: At a node directly following a reduction, if the null move fails low, and the moving piece in the move which refutes the null move is the same as the moving piece in the reduced move, immediately cancel the reduced-depth search and re-search with normal depth. The idea is that when this happens, the reduced-depth move is likely to contain some kind of serious tactical or positional threat, and deserves a non-reduced search.
In pseudo code, it looks approximately like this:
- Code: Select all
if(ok_to_do_nullmove()) {
make_nullmove();
nullvalue = -search(-beta, -beta+1, depth-(R+1));
unmake_nullmove();
if(nullvalue >= beta)
return nullvalue;
else {
threat_move = move_that_refuted_nullmove();
if(SearchStack[Ply-1].reduction &&
To(SearchStack[Ply-1].move) == From(threat_move))
depth += SearchStack[Ply-1].reduction_amount;
}
}
I have no available CPU time for testing this change in real games at the moment, but it seems to be extremely effective in tactical positions. On my iMac G5 1.8 GHz, Glaurung scores 153/183 at ECMGCP at 10 seconds per move with the new trick enabled (the best score I have ever seen from Glaurung). Without the trick, the score drops to 144/183.
Perhaps something similar would be worth trying even in engines which do not use reductions. If a null move is refuted by a move which was made possible by the move at the previous ply, make a small fractional extension.
Has anyone experimented with similar ideas?
Tord