[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: computer-go: [Question] Alpha-Beta Pruning & Null Move
The very best practical article I've ever seen on NULL move pruning is
an article by Donninger a few years ago in the ICCA journal:
Donninger, C. (1993).
Null Move and Deep Search:
Selective-Search Heuristics for Obtuse Chess Programs.
ICCA Journal, Vol. 16, No. 3, pp. 137-143. (A)
Null move pruning was designed with Chess in mind, and is not
appropriate for some games, but may very well be appropriate for
others.
To have any chance, a game must have the characteristic that it's
rarely if ever a disadvantage to be on the move. It works quite well
for chess and certainly qualifies as one of the few truly significant
breakthrough ideas. Go also has this characteristic, even more so
than Chess. That doesn't prove it would be effective in Go however.
A game must have one other characteristic. Giving up a move must be a
serious enough disatvantage, that even a reduced depth search would
expose this. I could easily believe that this might not work for GO,
but the truth is I just don't know.
I can give you the basic null move algorithm in just a few words and
cut through the mystique. It's a simple idea:
At any node in the search tree, where the remaining depth of search
is d, do a search where the first move is a pass and the depth is
reduced to d-n. n can be 2 or 3 or whatever gives good results.
The score that is returned is treated like a lower bound, which means
it may even produce a beta cutoff.
The depth must be reduced in the "null move test" or it's no faster
than doing the original search.
I am leaving out many details and enhancements. I will elaborate
if anyone is interested, but the article I quoted says it much
nicer.
The nice thing about NULL move is that it's recursive, and can recover
from errors as you search deeper. In chess, null move can make it
take an extra ply or two to see some tactics because of long term
threats that the reduced search might not quite get to. But the
tactic will still be seen on some later iteration, and often still
faster than a full width search would have noticed it.
Null move is just a kind of lower bound test. If you can think of a
good test that returns a lower bound on the score and is rarely wrong
(at least in the context of what the search is likely to return) then
you have something than can substitute for null move.
Actually, I think all the good programs use such bounds test. The
test they use is extremely simple but effective. They assume that n
liberties is safe! This is nothing more than a simple bounds test.
I'm guessing that these programs use only 2 scores to do the tactical
searches, whether the string is won or not. If not, this is probably
an enhancement. But the point is that bounds test has to be
particularly effective because it would always produce a cutoff when
it was successful.
Don
From: "Thomas Thomsen" <thomas@xxxxxxxxxxxxxxxxx>
Date: Sun, 15 Apr 2001 09:56:17 +0200
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 4.72.3110.5
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3
Sender: owner-computer-go@xxxxxxxxxxxxxxxxx
Precedence: bulk
Reply-To: computer-go@xxxxxxxxxxxxxxxxx
Content-Type: text/plain;
charset="iso-8859-1"
Content-Length: 694
Mousheng Xu wrote:
>I cannot find any good references on the Web about null
>moves. Does any one here has a pointer?
Regarding null-moves and alpha-beta in general, take a look at the articles
of Ernst A. Heinz. For instance:
- Heinz, E.A. (1999). Adaptive Null-Move Pruning. ICCA Journal. Downloadable
from: http://supertech.lcs.mit.edu/~heinz/node17.html .
Regarding null-moves for obtaining exact results in binary search trees
(including kind of a "theory" of null-moves), you might also want to take a
look at:
- Thomsen, T. (2000). Lambda-search in game trees - with application to Go".
CG2000 conference. Downloadable from: www.t-t.dk/publications .
Best regards,
-Thomas Thomsen