Page 1 of 1

increasing futility prunning depth

Posted: Fri Apr 28, 2017 4:31 pm
by brtzsnr
Hi!

So right now I'm doing LMR for depths >=4 and FP for depths <= 3. I do futility outside the move testing loop.

I wanted to increase the maximum futility depth to 4. Simply increasing the depth failed, but what seems to work is testing that at the last depth (4) there was no hash hit. IOW: for depths 1, 2, 3 no change; for depth 4 enable futility when there is no hash hit.

Why does this work? I expected the reverse to be true. A hash hit means we already have a good move so weak moves can be prunned.

Code: Select all

        const futilityDepthLimit = 4
 	if depth <= futilityDepthLimit && // enable when close to the frontier
 		&#40;depth < futilityDepthLimit || hash == NullMove&#41; &&
 		!sideIsChecked && // disable in check
 		!pvNode && // disable in pv nodes
 		KnownLossScore < &#945; && &#946; < KnownWinScore &#123; // disable when searching for a mate 

Re: increasing futility prunning depth

Posted: Fri Apr 28, 2017 7:09 pm
by cdani
brtzsnr wrote: Why does this work? I expected the reverse to be true. A hash hit means we already have a good move so weak moves can be prunned.
Maybe is related to that not having a hash move means more probabilities to be the first time you arrive to the node, and following searches will take care of the node if is really more important. So first time nodes are less probable to be good because there are a lot of them. This gives me a lot of ideas to test :-)

Re: increasing futility prunning depth

Posted: Sun Apr 30, 2017 11:21 am
by cdani
As sure yo know the increasing of this type of parameters tend to become possible when the engine gets stronger, and as a consequence orders better the moves and allows more pruning.

I tried your approach in Andscacs and it didn't work, but I have such pruning at depth 6. Also I tried some derived ideas without luck.

Re: increasing futility prunning depth

Posted: Sun Apr 30, 2017 4:17 pm
by brtzsnr
Thanks for investigating.

I'll put this on my list of things to simplify later on. Razoring seems to work better when there is no hash move, too, but the test is incomplete.