[computer-go] UCT tree pruning

2009-06-08 Thread Brian Sheppard
Pebbles prunes least recently used nodes. This eliminates nodes
from previous searches first, and then nodes from the current search.

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


Re: [computer-go] UCT tree pruning

2009-06-08 Thread Isaac Deutsch

> Pebbles prunes least recently used nodes. This eliminates nodes
> from previous searches first, and then nodes from the current search.

Why do you keep nodes from previous searches? By search, do you mean a
"genmove"? How do you store which nodes are oldest (queue, heap)?
-- 
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Tweak to MCTS selection criterion

2009-06-08 Thread Mark Boon
I did this, stopping search if other moves mathematically couldn't
catch up. I found that the savings in percentage of total nodes
depended on how many playouts the program did. The larger the number
of playouts, the larger the savings. I also made a rule where after a
certain percentage of the total playouts, if one node is far ahead but
theoretically another could still catch up, I'd still terminate, which
doubled the savings. I don't have the details here but I remember this
way I got equal winning-rate at 32K playouts with these rules vs. 64K
playouts without.

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


[computer-go] UCT tree pruning

2009-06-08 Thread Brian Sheppard
>Why do you keep nodes from previous searches?

All of the descendants of the move you choose are relevant to
future searches. Plus whatever nodes can be reached by transposition.
(In Go, there are a lot of transpositions.)


>By search, do you mean a "genmove"?

Move generation and pondering.


> How do you store which nodes are oldest (queue, heap)?

I put a 32-bit counter in each node. The entries of the node hash table
are linked lists. We will replace the oldest of the nodes in the same
hash bucket as the node we are inserting. When the hash table is "full,"
the average list length is about 16 or so. So it is the rough equivalent
of a 16-probe table.

Here is the code that calculates whether an entry is oldest.
callCount is a static uint32_t that represents the age of the
next node to be inserted:

if (entryToReplace == 0) {
entryToReplace = p;
}

// The following is written oddly, since it looks like you can just
subtract
// callCount from both sides, but that does not take into account
what happens
// when callCount "wraps around". In that case, the expression below
will still
// replace the oldest item, provided that we do not have 2^32 nodes
in any
// single search.
//
else if (callCount - p->getCallCount() > callCount -
entryToReplace->getCallCount()) {
entryToReplace = p;
}

I don't think Pebbles has ever played long enough for callCount to
"wrap around." It would require something like 2000 consecutive games
on its current hardware.

Brian

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