I found a minor improvement to this - I too used to do a null move if curEval < Beta. But there is no reason to think that beta is the EXACT right value, although admittedly there is good reason to believe it is close to the right value.hgm wrote:I don't do null move if CurEval < Beta. It can only fail high if you have some irrefutable threat on the board, like a fork. This is very rare, and if you worry about missing that, it would probably pay off much more if you would recognize such threats in Eval. (In which case CurEval would be >= Beta, so you would automatically try the null move as well.)jesper_nielsen wrote:Also i gathered some statistics regarding only doing null moves, when eval() is above beta. The test showed that only about 1 in 1000 null moves with eval() below beta actually resultet in a cutoff. (Too bad if that one is the one you reallly need!)
How many of you requires the evaluation to be above beta before doing a null move search?
The issue is that this is a gamble. You are placing a bet and you want a positive expectancy of return. If you do null move when the curEval is way below beta, you expect it to rarely suceed, so it's a good bet NOT to do it if it is far below. If it is way ABOVE beta, then it's a very good bet indeed, we expect it to pass most of the time. In my program I found that the ideal value is something above beta, but not much. I'm using 1/10 of a pawn and it's faster (and I assume there is a very minor qualitative gain too.) It may turn out that 1/20 is better, I never tested any other value. I'm pretty sure a much higher value would be slower though, as you move in the direction of full width search.
