next singular extension test
Posted: Thu Aug 05, 2010 6:01 am
This is using some code dated 1999, so a bit old. Here's the idea. After the usual stuff in search, before getting into the main loop where I extract the next move, make it, recursively call search, etc... I call a function "SearchSingular()" What it does is search the complete move list, using the normal reduction/extension (except no singular extensions since that would be a never-ending recursive loop) logic, to depth / 2 (for first tests) using an offset null-window of alpha - SINGULAR_MARGIN.
If more than one move fails high on this search, I immediately abandon the search and return(false). If I search 4 moves (currently) without any fail high, I quit and also return(false) (this is a condition that suggests we are at an ALL node where a singular move is not easy to identify).
If I get thru all the moves with just one fail-high on that downward-offset window, that move is flagged as singular, and when it is searched in the normal search, it gets extended by one ply (if no check extension is done).
I am currently not doing this test if I am in check, although I might revise that as testing proceeds. I also do not do it too close to the tips either. I plan the following tests (first two already queued up)...
(1) vary the singular margin between 30 and 100.
(2) vary the depth limit from 4 to 9.
(3) vary the SE search depth (depth of search used to identify that the move is singular). I currently search to whatever remaining depth is divided by 2, but this needs testing as well.
I don't want to get 2/3 running until I get some idea about the best value for the margin, so I am waiting on that to give me some guidance.
I'll post an exact description if this seems to work. I noticed that the date on this file (most of my c files have a "/* last modified xx/yy/zz */" at the front) was 1999. Search depths and speeds were _far_ lower than today, so that this might do something better than what it did in 1999 when I scrapped it. Bruce seemed to like this so maybe he found a better tuning setup than I did. When I explained this previously, I had forgotten some of the details I gave above. But I had to tweak it to fit the current search which has changed a bit from 1999, and discovered a few things that made me think "Hmmm. forgot about that. Some pretty bright guy must have thought of that..."
If more than one move fails high on this search, I immediately abandon the search and return(false). If I search 4 moves (currently) without any fail high, I quit and also return(false) (this is a condition that suggests we are at an ALL node where a singular move is not easy to identify).
If I get thru all the moves with just one fail-high on that downward-offset window, that move is flagged as singular, and when it is searched in the normal search, it gets extended by one ply (if no check extension is done).
I am currently not doing this test if I am in check, although I might revise that as testing proceeds. I also do not do it too close to the tips either. I plan the following tests (first two already queued up)...
(1) vary the singular margin between 30 and 100.
(2) vary the depth limit from 4 to 9.
(3) vary the SE search depth (depth of search used to identify that the move is singular). I currently search to whatever remaining depth is divided by 2, but this needs testing as well.
I don't want to get 2/3 running until I get some idea about the best value for the margin, so I am waiting on that to give me some guidance.
I'll post an exact description if this seems to work. I noticed that the date on this file (most of my c files have a "/* last modified xx/yy/zz */" at the front) was 1999. Search depths and speeds were _far_ lower than today, so that this might do something better than what it did in 1999 when I scrapped it. Bruce seemed to like this so maybe he found a better tuning setup than I did. When I explained this previously, I had forgotten some of the details I gave above. But I had to tweak it to fit the current search which has changed a bit from 1999, and discovered a few things that made me think "Hmmm. forgot about that. Some pretty bright guy must have thought of that..."