[computer-go] Is Crazy Stone throwing away half its work?
Rémi Coulom
Remi.Coulom at univ-lille3.fr
Tue Jul 25 11:00:28 PDT 2006
Peter Drake wrote:
> We were looking at Coulom's paper on Crazy Stone and something gave us
> pause. Near the end of section 2, he explains:
>
> "Whenever a random game goes through a node that has been already
> visited once, create a new node at the next move, if it does not already
> exist."
>
> Suppose I create node A. The next move, B, is not used to create a new
> node. I finish the game through B and store the value of this final
> position in A. Later I come back through A and randomly make move C.
> Since I've been through A before, I create a node for C. I then complete
> that game, creating no new nodes, and back the value up to C.
>
> Do I also back the move up to A? If so, isn't the game that was played
> through B forgotten (and therefore wasted)?
I am not sure what you mean by backing the move up to A. Each node has a
counter that counts the number simulations that were run through this
node, and the total outcome of these simulations. So whenever a random
game is finished, all the counters of all the nodes that this random
game crossed are updated. In your example, this would include C and A.
This sentence in the paper was to explain how I store the search tree. I
cannot store the whole tree of complete random simulations, because it
would take far too much memory. So I create a node in memory only if the
parent was already in memory before this simulation.
This scheme may incur some losses, in the following situation. Let's
suppose I start with only one node at A. I run one first game that
starts at A, then goes to B, then to C, then continues to the end. This
has the effect of creating a node for B. But there is still no node for
C. Later, when another random game starts by A, B, C, a node for C is
created. The result of this simulation is stored in C, but the first
simulation that went through C has been forgotten.
In practice, I don't believe this loss is significant. If you really
want to avoid this loss, you could create a new node each time the
grand-parent was already created before the current simulation. There
would still be losses, but an order of magnitude less. This would
require twice more memory.
I hope this is clearer now.
Rémi
More information about the computer-go
mailing list