From 8c9dbd6438f2aace3c9ace940fb921e9457abd3f Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Sun, 8 Feb 2009 23:03:15 +0100 Subject: [PATCH] tree_merge(): Fix merging of priors --- uct/tree.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/uct/tree.c b/uct/tree.c index ed556f9..a08ff27 100644 --- a/uct/tree.c +++ b/uct/tree.c @@ -286,14 +286,23 @@ next_di: src->children = NULL; } - dest->prior.playouts += src->prior.playouts; - dest->prior.wins += src->prior.wins; - if (dest->prior.playouts) - dest->prior.value = dest->prior.wins / dest->prior.playouts; + /* In case of prior playouts, we do not want to accumulate them + * over merges - they remain static after setup. However, different + * trees may have different priors non-deterministically. We just + * take the average. */ + if (dest->prior.playouts != src->prior.playouts + || dest->prior.wins != src->prior.wins) { + dest->prior.playouts = (dest->prior.playouts + src->prior.playouts) / 2; + dest->prior.wins = (dest->prior.wins + src->prior.wins) / 2; + if (dest->prior.playouts) + dest->prior.value = dest->prior.wins / dest->prior.playouts; + } + dest->amaf.playouts += src->amaf.playouts; dest->amaf.wins += src->amaf.wins; if (dest->amaf.playouts) dest->amaf.value = dest->amaf.wins / dest->amaf.playouts; + dest->u.playouts += src->u.playouts; dest->u.wins += src->u.wins; if (dest->prior.playouts + dest->amaf.playouts + dest->u.playouts) -- 2.11.4.GIT