David Fotland wrote:
The searchers are completely independent at the moment. The life and death search is run first, before the full board alpha-beta search. Its results are used for some of the move generation for the full board search. I plan to integrate the life/death and full board search, so the full board search can use move sequences proven good by the life/death search.That should certainly help. But its not quite the same as the multi-level search concept that was brought up again by Heikki Levanto and prompted me to get involved because it reminded me of an idea I had once posted. Anyway I think his explanation was very clear so I'm including it here:
Then David Doshay from the SlugGo team replied that SlugGo used this very technique and I think we can all agree the SlugGo project was/is certainly successful. I think this concept can be taken much further than the SlugGo team has done by specifically designing a system towards this end. So by asking if you had considered "...", I was trying to subtly suggest to perhaps experiment with this kind of concept in Many Faces - that is to use higer level "moves" made up of varied length sequences representing local tactical objectives as moves for a search algorithm such as A/B search. These might be generated using modules you already have.It sounds reasonable to assume that one can do the local searches, and simplify them into straight sequences, or at least into small trees. While reading, one should be able to mark possible tenukis (ignoring the local situation and playing elsewhere). Now, having a pile of such trees, a higher-level search can try to decide which local battle to fith at each "move" (which can represent a longer forced sequence). If all local moves are graded in terms of their size and urgency (temperature?), then we should have enough data to make meaningful move ordering and pruning in the higher-level search.
LIfe/Death operates on groups and uses the same evaluation function as the full board search, which understands eyes, conenctions, running, etc. The full board evaluation calls the local tactics module for status on blocks as part of the group strength evaluation.
I'm curious what technique(s) do you use to delineate groups?
Actually, I don't try to prune bad moves. I try to just generate good moves. Going wider means making the move generator generate more moves, which usually means writing more code, or adding more patterns.I understand from an implementation perspective but consider that the same as pruning in its effect. For if we could generate only good moves, we wouldn't need to search ;-)