In complex games with a large branching factor such as Go, programs usually use highly selective search methods, heuristically expanding just a few plausible moves in each position. As in early Chess programs, these methods have shortcomings, they often neglect good moves or overlook a refutation. We propose a safe method to select the interesting moves using game definition functions. This method has multiple advantages over basic alphabeta search: it solves more problems, the answers it finds are always correct, it solves problems faster and with less nodes, and it is more simple to program than usual heuristic methods. The only small drawback is the requirement for an abstract analysis of the game. This could be avoided by keeping track of the intersections tested during the search, maybe with a loss of efficacy but with a gain in generality. We give examples and experimental results for the capture game, an important sub-game of the game of Go. The principles underlying the method are not specific to the capture game. The method can also be used with different search algorithms. This algorithm is important for every Go programmer, and is likely to interest other game programmers.
[1]
T. Anthony Marsland,et al.
From MiniMax to Manhattan
,
1997,
Deep Blue Versus Kasparov: The Significance for Artificial Intelligence.
[2]
Tristan Cazenave,et al.
Metaprogramming Forced Moves
,
1998,
ECAI.
[3]
Ian Frank,et al.
Search and planning under incomplete information - a study using bridge card play
,
1998,
Distinguished dissertations.
[4]
Thomas Thomsen.
Lambda-Search in Game Trees - with Application to Go
,
2000,
Computers and Games.
[5]
Alan Bundy,et al.
Applying adversarial planning techniques to Go
,
2001,
Theor. Comput. Sci..