On May 16, 2008, at 5:41 PM, Carter Cheng wrote:

Thanks for pointing to the existence of this document. It clarifies some things about a conventional light playout UCT design(It also answered a question about pseudo-liberties I guess they are equivalent to what I term |multi set liberty|). From the code I gather Orego (thus libEgo) does update all the pointers to the chain record.

When two chains are merged, the chainIds for the stones in only one of them (ideally, the smaller one) have to be changed. This takes time proportional to the size of the smaller chain. Also the two circular linked lists have to be appended, which takes constant time.

See orego.core.Board.mergeChains().

There are still a few design tradeoffs I dont quite understand such as caching adjacent vertex properties in the vertex. How much and why does this result in a speedup?

Do you mean neighborCounts? This has a number of uses. It allows you to immediately:

1) Eliminate most points from being "eyelike". See isEyelike().

2) Determine the initial pseudoliberty count of a newly-placed stone (before merging with neighboring chains). See placeStone().

3) Tell whether you need to check for single-stone suicide or simple ko violation. See playNonPassUnoccupied().

4) Tell whether a point is surrounded when counting the score at the end of a playout. See playoutScore().

Lukasz could say more -- he spent a lot of time optimizing the heck out of this stuff.

Peter Drake
http://www.lclark.edu/~drake/

_______________________________________________
computer-go mailing list
[email protected]
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to