I was also hoping to use my DAG as a transposition table, so I could use the Zobrist hash of the current position to find where the child node would be if it existed. If the space was already occupied (by a node at the right depth), I would have a transposition.

If each "node" might really require several nodes, this trick won't work. Oh, well. I guess I was trying to kill too many birds with the same stone.

Peter Drake
Assistant Professor of Computer Science
Lewis & Clark College
http://www.lclark.edu/~drake/




On Dec 7, 2006, at 3:46 PM, Anders Kierulf wrote:

Is anyone storing a search DAG (as opposed to a tree) and
using the firstChild/nextSibling representation?
When you traverse children (e.g., in UCT) you have to
know which move is associated with which child node. If a
node might have more than one parent, the node can't store
its last move.

SmartGo uses a DAG for tactical proof number search, and is using the
firstChild/nextSibling representation. Different moves leading to the same position are given their own node (a twin node), and that node then points to the base node on the same level. Any information about the position is
stored in the base node; any information related to the move played is
stored in the twin nodes.

For tactical search, a DAG is a clear benefit; the extra space is certainly worth it. In my current implementation, each node contains pointers to the base node and to the next twin node, but that could be reduced to a single pointer linking the twin nodes in a circular list plus a bit to indicate the
designated base node.

Anders Kierulf
www.smartgo.com

_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to