Lambda Search
Lambda Search is a kind of generalized Null-Move Search for solving open-space Go capturing problems (attacker to capture a group). It is defined to use lambda-trees of different orders. Lambda-trees can only contain lambda-moves of the same order (subset of all legal moves).
Lambda Search is guaranteed to return the correct minimax value for the problem, provided the game has no Zugzwang motives.
Lambda trees can be searched with standard game tree search algorithms like Alpha-Beta Search, or Proof-Number Search; but for the moves, it has to be determined whether moves are really Lambda-n moves (which is checked with a recursive call: after a null move (=defender pass) there has to exist a lambda-n tree of lower order for the attacker).
By limiting the allowed moves in the lambda-trees, the branching factor is reduced, which makes the search more effective (only threats up to a certain level are considered).
At the root position, if no lambda-n threat can be found, a higher order threat (lambda-n+1 threat) can be searched for (like incremental deepening). (Go tactics: if a working ladder does not exist, look for a net)
Examples:
- Lambda_a^0 Tree: (for attacker, lambda level=0)
- has value 1: if the attacker's goal can be achieved directly by at least one of the attacker's legal moves
- has value 0: otherwise
- Lambda_a^1 Tree: (for attacker, lambda level=1, like Go Ladder)
- has value 1: if ladder played by the attacker works (sequence of ataris, with final capture)
- has value 0: otherwise
- Lambda_a^2 Tree: (for attacker, lambda level=2, like Go net)
- has value 1: working "net" exists
- has value 0: otherwise
etc ...
References
-
http://www.t-t.dk/publications/lambda_lncs.pdf "Lambda-search in game trees – with application to Go"
-
http://t-t.dk/go/cg2000/code.html Pseudo code
- Kazuki Yoshizoe, Akihiro Kishimoto, Martin Müller:
Lambda Depth-first Proof Number Search and its Application to Go