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/