Hello all. 
I've been lurking on the list for a few years now. In amongst the usual musings 
on the meaning of AI and social justice, etc., there's been a sharp increase in 
the amount of useful information posted here of late. I'll try to contribute.
 
My engine is AntIgo. It's been a speed bump on CGOS and in several KGS 
tournaments so I've turned to MC UCT.
 
I have a Pentium 1.86 GHz laptop.
>From an empty board, without using the "mercy rule", I get about 22,000 pps (1 
>pps: playout per second including scoring, if needed, and restoring the 
>board). I use the rules discussed on the list and get an average of 107 
>moves/game not counting passes. With the mercy rule, I get about 29,000 pps 
>and the average game length is around 99. 
 
Here are a few speedup tricks that have helped me.
 
1. The mercy rule. Since I'm incrementally keeping track of a list of empty 
points, it's no real extra pain to keep track of the number of black and white 
stones on the board. If the difference between them exceeds a threshold, the 
game is over. Ending early has an added bonus that I know the outcome without 
needing to score the board. (You can shoot yourself in the foot here. Best to 
pick a more conservative threshold the closer you are to interior nodes of the 
tree.) For exterior nodes far from any interior nodes, I use a threshold of 25 
stones.
2. Pseudo liberties (I think that this wheel has been reinvented many times 
with many different names; "Pseudo liberties" is a good name). Checking whether 
a potential move would be suicide, fill an eye, etc. is complex enough to 
entail a function call inside a tight loop. If an empty space on the board has 
one or more pseudo liberties, it is an acceptable move. It can't be suicide or 
Ko or fill any kind of single point eye. So I make that test first and usually 
skip the function call.
3. For every space on the board, I pre-calculate the addresses of all its 
neighbors. I treat the off-edge as one super-safe third-color group, so a space 
next to the edge doesn't need to be treated as any kind of special case.
4. At every move, I update the pseudo liberties, group membership, stone 
counts, and empty spaces list. When a stone is removed due to capture, I place 
that position at the end of the empty spaces list. When a stone is added, the 
space it's about to occupy is already at the end of the list, so I just 
decrement the counter. I never need to regenerate the empty spaces list.
 
Dave Hillis
________________________________________________________________________
Check Out the new free AIM(R) Mail -- 2 GB of storage and industry-leading spam 
and email virus protection.
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to