On Jul 5, 2009, at 7:21 PM, David Fotland wrote:

Yes, I save the search state from move to move. I don't save the tree, since I don't have a DAG. I keep the depth from the start of the game, not
the start of the search.

Got it.

I give up when there are no nodes that area available to be overwritten.

I'm still a little confused.

First, does the hash table contains pointers into a node pool, or do you use the node pool as the hash table?

Second, how and when do you determine which nodes (if any) are available for overwriting, without doing some sort of traversal?

Is the following a correct summary of what you do when it's time to create a new node?

Go to the one node that would be used for this Zobrist hash. If the same hash is stored there, use the existing node. If not, either overwrite this node (if this node is available for overwriting) or not create a new node (otherwise).

Also, what exactly is the criterion for overwriting? You said "nodes that have few visits or are old". Is this just (visits < visitThreshold) || (depthFromBeginningOfGame < currentGameTurn)? Doesn't depthFromBeginningOfGame cause you to keep around nodes that are outside the still-relevant branch of the tree (i.e., the branch descending from the current root), almost all of which are irrelevant?

If the search is long enough, there are no nodes that can be recovered, and the UCT tree stops growing. I keep searching when there are no reusable nodes.


...because this improves the quality of information in the nodes you were able to create. That makes sense.

Thanks,

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