From 0e319ad2b2920683153bd26c4738b5550cd58a1d Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Fri, 9 Oct 2009 15:48:52 +0200 Subject: [PATCH] UCT Prior: Add ko prior, by default 0 --- uct/internal.h | 2 +- uct/prior.c | 13 +++++++++++++ uct/uct.c | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/uct/internal.h b/uct/internal.h index 88894f1..3e5dbf0 100644 --- a/uct/internal.h +++ b/uct/internal.h @@ -31,7 +31,7 @@ struct uct { /* Equivalent experience for prior knowledge. MoGo paper recommends * 50 playouts per source; in practice, esp. with RAVE, about 6 * playouts per source seems best. */ - int eqex, even_eqex, gp_eqex, policy_eqex, b19_eqex, cfgd_eqex, eye_eqex; + int eqex, even_eqex, gp_eqex, policy_eqex, b19_eqex, cfgd_eqex, eye_eqex, ko_eqex; struct uct_policy *policy; struct tree *t; diff --git a/uct/prior.c b/uct/prior.c index 624d534..4f76851 100644 --- a/uct/prior.c +++ b/uct/prior.c @@ -50,6 +50,17 @@ uct_prior_eye(struct uct *u, struct tree_node *node, struct prior_map *map) } void +uct_prior_ko(struct uct *u, struct tree_node *node, struct prior_map *map) +{ + /* Favor fighting ko, if we took it le 10 moves ago. */ + coord_t ko = map->b->last_ko.coord; + if (is_pass(ko) || map->b->moves - map->b->last_ko_age > 10 || !map->consider[ko]) + return; + // fprintf(stderr, "prior ko-fight @ %s %s\n", stone2str(map->to_play), coord2sstr(ko, map->b)); + add_prior_value(map, ko, 1, u->eqex); +} + +void uct_prior_b19(struct uct *u, struct tree_node *node, struct prior_map *map) { /* Q_{b19} */ @@ -129,6 +140,8 @@ uct_prior(struct uct *u, struct tree_node *node, struct prior_map *map) uct_prior_even(u, node, map); if (u->eye_eqex) uct_prior_eye(u, node, map); + if (u->ko_eqex) + uct_prior_ko(u, node, map); if (u->b19_eqex) uct_prior_b19(u, node, map); if (u->gp_eqex) diff --git a/uct/uct.c b/uct/uct.c index a035000..21650d3 100644 --- a/uct/uct.c +++ b/uct/uct.c @@ -599,6 +599,8 @@ uct_state_init(char *arg) u->cfgd_eqex = atoi(optval); } else if (!strcasecmp(optname, "prior_eye") && optval) { u->eye_eqex = atoi(optval); + } else if (!strcasecmp(optname, "prior_ko") && optval) { + u->ko_eqex = atoi(optval); } else if (!strcasecmp(optname, "amaf_prior") && optval) { u->amaf_prior = atoi(optval); } else if (!strcasecmp(optname, "threads") && optval) { -- 2.11.4.GIT