UCT virtual_loss: Revert default change
authorPetr Baudis <pasky@ucw.cz>
Sun, 12 Aug 2012 12:19:17 +0000 (12 14:19 +0200)
committerPetr Baudis <pasky@ucw.cz>
Sun, 12 Aug 2012 12:19:17 +0000 (12 14:19 +0200)
It seems all our virtual_loss tuning was bogus due to a mistake
in the option setting code - all tests were in fact done with
virtual_loss zero.

High virtual_loss has catastrophic effect on gameplay - it transforms
the tree to long narrow corridors with high difference between black
and white node values. I'm not 100% sure about the cause even though
I spent quite long time trying to debug this, but I think it's because
the noise introduced by updates lost due to conflicts is just too high.

Moreover, with virtual_loss raising with number of threads, both the
noise rate and noise magnitude goes up, amplifying the effect.

uct/uct.c

index c18cf06..fcd38c1 100644 (file)
--- a/uct/uct.c
+++ b/uct/uct.c
@@ -579,7 +579,7 @@ uct_state_init(char *arg, struct board *b)
 
        u->threads = 1;
        u->thread_model = TM_TREEVL;
-       u->virtual_loss = -1;
+       u->virtual_loss = 1;
 
        u->fuseki_end = 20; // max time at 361*20% = 72 moves (our 36th move, still 99 to play)
        u->yose_start = 40; // (100-40-25)*361/100/2 = 63 moves still to play by us then
@@ -1159,8 +1159,6 @@ uct_state_init(char *arg, struct board *b)
                if (!u->shared_nodes) u->shared_nodes = DEFAULT_SHARED_NODES;
                assert(u->shared_levels * board_bits2(b) <= 8 * (int)sizeof(path_t));
        }
-       if (u->virtual_loss == -1)
-               u->virtual_loss = u->threads >= 4 ? 4 : u->threads;
 
        if (!u->dynkomi)
                u->dynkomi = board_small(b) ? uct_dynkomi_init_none(u, NULL, b)