Static null move pruning

Discussion of chess software programming and technical issues.

Moderator: Ras

Necromancer
Posts: 40
Joined: Wed Nov 23, 2016 1:30 am
Location: Brazil

Static null move pruning

Post by Necromancer »

I'm trying to learn more about pruning methods to improve my engine.
Looking at CPW code (https://github.com/nescitus/cpw-engine/ ... search.cpp), I came across static null move pruning (line 277).

I have some questions:

1- Is this a standard pruning method, ie, does most engine use it?
2 - In line 289 they return static_eval - eval_margin. Can I just return beta? I'm not using fail-soft I guess.
3 - What can go wrong with this technique?

Thanks!
ZirconiumX
Posts: 1362
Joined: Sun Jul 17, 2011 11:14 am
Full name: Hannah Ravensloft

Re: Static null move pruning

Post by ZirconiumX »

Necromancer wrote:I'm trying to learn more about pruning methods to improve my engine.
Looking at CPW code (https://github.com/nescitus/cpw-engine/ ... search.cpp), I came across static null move pruning (line 277).

I have some questions:

1- Is this a standard pruning method, ie, does most engine use it?
Well, I call it "reverse futility pruning", because it's essentially futility pruning inverted. It's reasonably common, since it's cheaper than doing a full nullmove search at the leaves (or that's how it seems to be for me, anyway).
2 - In line 289 they return static_eval - eval_margin. Can I just return beta? I'm not using fail-soft I guess.
For fail-hard, returning beta is fine.
3 - What can go wrong with this technique?
I would say setting a suitable margin is a fine art that needs to be mastered. It should hopefully also go without saying that it shouldn't be used in check, too.
Thanks!
tu ne cede malis, sed contra audentior ito