mjlef wrote:Looking over recent source code from Fruit and its derivative, I find a number of choices which differ from what has been done in many older programs. I would be interested in what other programmers have found useful in these ideas:
a. Do not accept hash table scores if you are in the PV
b. Allow most extensions only if you are in the PV
c. Do not allow Null Pruning if in the PV
d. Allow other pruning (futility, history reduction) only if not in the PV
Which of these make a difference in your programs? Which improved playing strength? Which did not help or hurt?
Mark
A) this is pretty good idea by the way. I did do this in the past in Diep. Around a few years ago i changed it to also add 'true' bounds. Basically i only had alfa and beta bound, no true bounds before. That works pretty ok.
Not using a cutoff at all in PV is what i experimented lately with. A problem is the sequential overhead you need. You simply need several millions of nodes to get back your original search depth (minus the played moves).
I tend to belief that using alfa and beta bound is better.
There is some huge advantages getting things directly from hashtable with true bound and giving direct cutoffs; you directly get reasonable big depths from hashtable and don't need that huge overhead each ply.
A big problem is to test the differences between the 2.
Diep with its low nps i run into trouble now against move 60 or so. usually at 90 0 or 60 0 or something, you are nearly out of time there. like 10 minutes left or 15 minutes left.
Within 15 seconds you simply do NOT get those few millions of nodes to get back the original depth.
Dang there comes a 10 ply search for approach A, versus 16 ply for approach giving cutoffs.
Good example: ANT-Diep in ict6
I had a 10 ply search there in a crucial phase of the game, which took care ANT could escape to a draw.
Well done by ANT of course, nevertheless 12 ply already would've won the game for me.
B) i fundamentally disagree here.
C) i'm doing something similar there. When beta == infinite then i do not try nullmove. It would get a fail low anyway.
That's because i use PVS.
D) this i find very logical. Only in 1999 i tried it different. But then i used something like dividing my move list in 2 parts.
1 part was "good moves" and 1 part was bad moves.
the good moves were like normal moves. the bad moves had always 1 ply reduction (so no research when fail high). No alfabeta dependencies on the move selection by the way. Quite nice way to search. Quickly gets 15-17 ply and with some more work 20 ply.
Similar to what Junior is doing (nowadays they seem to have many enhancements such as moves that get 2 ply reduction).
In all other prunings experiments however i never applied pruning in PV nodes. I find this quite logical.
Please realize that Fruit's concept is basically checking out the mainline very deeply and pruning the rest.
The advantage of that is that if you have big holes in your evaluation function, for example because it has near to no chessknowledge, that you don't run into trouble too soon.
The disadvantage is that getting a fail high to a better move is near to impossible. Of course for Fruit that doesn't matter as its eval won't find soon a better move anyway.
So for Fruit the combination of its search and eval is a very strong one.
For many others i doubt that this approach is the right one.
Vincent