Static null move pruning

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

Necromancer
Posts: 33
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!
The truth comes from inside.
https://github.com/fernandotenorio/Tunguska
ZirconiumX
Posts: 1334
Joined: Sun Jul 17, 2011 11:14 am

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!
Some believe in the almighty dollar.

I believe in the almighty printf statement.