There is a link between the capture that makes your null search failing low and the probability that you are on a cut-node.
Namely, given:
nullValue: The value returned by the null search
threatCapture: the capture that made your null search failing low (nullValue < beta)
SEE: the SEE value of threatCapture calculated just after the null search, before to undo the null move.
If the following relation stands:
Code: Select all
nullValue + SEE(threatCapture) >= beta (1)
If you still don't have a TT move then this is a very good time to start an IID because you have an high probability to find one.
The rationale, as I had made up for myself, is the following: if a null move fails low due to a capture there is the possibility that this capture is just an artifact due to null move side to move change and that, without the side to move change, the capture would be non-existant (the threatened piece moves away) or even reversed (the threatened piece captures the threatener).
The capture yields to the opponent an additional value of SEE(threatMove), so we can write the value returned by null search (from the opponent side of view) as the sum of two contributes:
Code: Select all
nullValue = -(EffectivePositionValue + SEE(threatMove)) (2)
Code: Select all
nullValue + SEE(threatCapture) = (-EffectivePositionValue)
Code: Select all
(-EffectivePositionValue) >= beta
And, if the capture is really just an artifact, we can detect that we are in a fail-high position.
I have upload here
http://www.mediafire.com/?sharekey=f197 ... b9a8902bda
Stockfish 1.1a where you can see the actual code. The only difference from Stockfish 1.1 is the Null driven IID logic and the fact that is enabled by default (I am an optimistic guy and can be
set/unset as an UCI parameter.
After more then 500 games at 1'+0 Null driven IID seems better then standard, although not much.
Please note that IID kicks-in only at high depths, currently depth > 6, so on ultra fast games, where average depth is not very high, could be difficult to spot any difference.
I have also done some tests on a set of positions to measure the probability to find a TT move after an IID search in a non-PV node. Just as a note, I remember that to find a TT move it means that the node has failed high.
It seems that we go from 30-35% of cases when considering only the IID margin:
Code: Select all
if (depth > 6 * OnePly && evaluate() > beta -IIDmargin)
startIID();
Marco