From 04fd7e044476eabc94a3c0fa8f7326be317b0337 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Fri, 2 Oct 2009 16:54:53 +0200 Subject: [PATCH] playoutp_assess(): Iterate over prior map within policy itself --- playout.h | 9 ++++++--- playout/moggy.c | 19 ++++++++++++++++++- uct/prior.c | 14 ++------------ 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/playout.h b/playout.h index 92f4db3..179110e 100644 --- a/playout.h +++ b/playout.h @@ -4,13 +4,16 @@ struct board; struct move; enum stone; +struct prior_map; struct playout_policy; typedef coord_t (*playoutp_choose)(struct playout_policy *playout_policy, struct board *b, enum stone to_play); -/* number of won (>0) or lost (<0) games to seed the node with (usually a proportion of @games); - * can return 0 if policy has no opinion */ -typedef int (*playoutp_assess)(struct playout_policy *playout_policy, struct board *b, struct move *m, int games); +/* Set number of won (>0) or lost (<0) games for each considerable + * move (usually a proportion of @games); can leave some untouched + * if policy has no opinion. The number must have proper parity; + * just use uct/prior.h:add_prior_value(). */ +typedef void (*playoutp_assess)(struct playout_policy *playout_policy, struct prior_map *map, int games); typedef bool (*playoutp_permit)(struct playout_policy *playout_policy, struct board *b, struct move *m); struct playout_policy { diff --git a/playout/moggy.c b/playout/moggy.c index 008a10b..191275e 100644 --- a/playout/moggy.c +++ b/playout/moggy.c @@ -11,6 +11,7 @@ #include "playout/moggy.h" #include "random.h" #include "tactics.h" +#include "uct/prior.h" #define PLDEBUGL(n) DEBUGL_(p->debug_level, n) @@ -699,7 +700,7 @@ assess_local_bonus(struct playout_policy *p, struct board *board, struct move *a } int -playout_moggy_assess(struct playout_policy *p, struct board *b, struct move *m, int games) +playout_moggy_assess_one(struct playout_policy *p, struct board *b, struct move *m, int games) { struct moggy_policy *pp = p->data; @@ -788,6 +789,22 @@ playout_moggy_assess(struct playout_policy *p, struct board *b, struct move *m, return 0; } +void +playout_moggy_assess(struct playout_policy *p, struct prior_map *map, int games) +{ + /* TODO: Optimize this! */ + foreach_point_and_pass(map->b) { + if (!map->consider[c]) + continue; + int assess = 0; + struct move m = { c, map->to_play }; + assess = playout_moggy_assess_one(p, map->b, &m, games); + if (!assess) + continue; + add_prior_value(map, c, assess, abs(assess)); + } foreach_point_end; +} + bool playout_moggy_permit(struct playout_policy *p, struct board *b, struct move *m) { diff --git a/uct/prior.c b/uct/prior.c index 89b2a94..de470a0 100644 --- a/uct/prior.c +++ b/uct/prior.c @@ -96,18 +96,8 @@ void uct_prior_playout(struct uct *u, struct tree_node *node, struct prior_map *map) { /* Q_{playout-policy} */ - foreach_point_and_pass(map->b) { - if (!map->consider[c]) - continue; - int assess = 0; - if (u->playout->assess) { - struct move m = { c, map->to_play }; - assess = u->playout->assess(u->playout, map->b, &m, u->policy_eqex); - } - if (!assess) - continue; - add_prior_value(map, c, assess, abs(assess)); - } foreach_point_end; + if (u->playout->assess) + u->playout->assess(u->playout, map, u->policy_eqex); } void -- 2.11.4.GIT