On Wed, Oct 14, 2015 at 06:00:56PM -0700, Dusty Leary wrote: > The trick to avoid recursively counting liberties: > Track the liberties for a group/chain using a simplified data structure > that looks like struct ChainLibertyInfo { int liberty_count; int > liberty_sum; int liberty_sum_squares; } > > The interesting thing about this data structure is that it's a Set which > can answer the isInAtari() query and the getAtariPoint() query, without > having to track a lot of data. But it doesn't support enumerating all the > liberties.
This is a nice trick I once implemented too. But for any kind of interesting tactical evaluation (which is an important ingredient for a strong program), you end up needing to be able to enumerate at least two liberties, ideally even three. Then, you can't use this trick. In Pachi, I got inspired by GNUGo and track liberties only up to N liberties (N=5 I think). Any group with more than N is regarded as having N libs. This cuts off a lot of overhead, IIRC it helped me a lot. If you are doing probability distribution stuff, I think a popular trick is first deciding whether you are going to look just in last move neighborhood or tenuki; most of the time, your roll will go with the last move neighborhood and you won't need to spend a lot of time going through the whole board. In general, you may simply want to look at how other programs do things... There's plenty of fast open source stuff out there. -- Petr Baudis If you have good ideas, good data and fast computers, you can do almost anything. -- Geoffrey Hinton _______________________________________________ Computer-go mailing list Computer-go@computer-go.org http://computer-go.org/mailman/listinfo/computer-go