Michael Sherwin wrote:Save the number of playable moves to the opponents move at Ply - 1, but do not change the score. When the best move is determined for Ply - 1 then store the number of playable moves in response to that best move at Ply - 2 (Ply - 1 from where you are at now) and use that value to +/- the current move just searched at Ply - 2. Keep the +/- small to avoid excessive drift in the score.
Thanks Mike, that's certainly worth thinking about. I was kind of thinking about a low value as driving a singular extension, but factoring such into the score (especially if one could find a series of such positions for one side) would certainly be consistent with a good positional eval.
I'm hoping to try out some of these ideas on Glaurung, but only when I've finished some current re-writing of my Shatra program (an ancient Siberian chess/checkers variant, with a rule-set of astonishing complexity - also 100% tactical and 0% positional (eg. capturing is compulsory, even of the king), so ideas like the one above would be counterproductive to try - apologies for off-topic!)
Another idea I've wanted to try for a long time (Bob might remember my mentioning it back in the late 90s) is to monitor root moves for unexpected improvement as iterations deepen - the feeling from my hours spent watching multi-pv analysis of GM games is that there are signs coming from any good search that a certain move may be considerably better than expected (and more importantly improving), although the actual score may not have yet reached anything comparable with the pv move's). Actually Glaurung is ideal, as ValueByIteration is already some way towards the idea.
Anyone with more time on their hands is welcome to try either of these, though I hope to get round to them before, well, whenever...