From f59f765cf2896ca45ef0cddf0df3cbe4ae7818db Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Mon, 6 Dec 2010 13:36:54 +0100 Subject: [PATCH] Playout choose: Take also playout_setup * parameter --- playout.c | 2 +- playout.h | 8 +++++++- playout/elo.c | 4 ++-- playout/light.c | 2 +- playout/moggy.c | 4 ++-- replay/replay.c | 3 ++- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/playout.c b/playout.c index 8edfec5..a72eaab 100644 --- a/playout.c +++ b/playout.c @@ -47,7 +47,7 @@ play_random_game(struct playout_setup *setup, while (gamelen-- && passes < 2) { coord_t coord; - coord = policy->choose(policy, b, color); + coord = policy->choose(policy, setup, b, color); if (is_pass(coord)) { play_random: diff --git a/playout.h b/playout.h index d525bbc..4bd2101 100644 --- a/playout.h +++ b/playout.h @@ -13,6 +13,8 @@ struct board_ownermap; /** Playout policy interface: */ struct playout_policy; +struct playout_setup; + /* Initialize policy data structures for new playout; subsequent choose calls * (but not assess/permit calls!) will all be made on the same board; if * setboard is used, it is guaranteed that choose will pick all moves played @@ -20,15 +22,19 @@ struct playout_policy; * with internal data. At the playout end, b->ps will be simply free()d, * so make sure all data is within single allocated block. */ typedef void (*playoutp_setboard)(struct playout_policy *playout_policy, struct board *b); + /* Pick the next playout simulation move. */ -typedef coord_t (*playoutp_choose)(struct playout_policy *playout_policy, struct board *b, enum stone to_play); +typedef coord_t (*playoutp_choose)(struct playout_policy *playout_policy, struct playout_setup *playout_setup, struct board *b, enum stone to_play); + /* 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); + /* Allow play of randomly selected move. */ typedef bool (*playoutp_permit)(struct playout_policy *playout_policy, struct board *b, struct move *m); + /* Tear down the policy state; policy and policy->data will be free()d by caller. */ typedef void (*playoutp_done)(struct playout_policy *playout_policy); diff --git a/playout/elo.c b/playout/elo.c index 79d5418..fba5896 100644 --- a/playout/elo.c +++ b/playout/elo.c @@ -195,7 +195,7 @@ elo_check_probdist(struct playout_policy *p, struct board *b, enum stone to_play } coord_t -playout_elo_choose(struct playout_policy *p, struct board *b, enum stone to_play) +playout_elo_choose(struct playout_policy *p, struct playout_setup *s, struct board *b, enum stone to_play) { struct elo_policy *pp = p->data; /* The base board probdist. */ @@ -337,7 +337,7 @@ playout_elo_choose(struct playout_policy *p, struct board *b, enum stone to_play #else coord_t -playout_elo_choose(struct playout_policy *p, struct board *b, enum stone to_play) +playout_elo_choose(struct playout_policy *p, struct playout_setup *s, struct board *b, enum stone to_play) { struct elo_policy *pp = p->data; probdist_alloca(pd, b); diff --git a/playout/light.c b/playout/light.c index 992e94d..53e7deb 100644 --- a/playout/light.c +++ b/playout/light.c @@ -13,7 +13,7 @@ coord_t -playout_light_choose(struct playout_policy *p, struct board *b, enum stone to_play) +playout_light_choose(struct playout_policy *p, struct playout_setup *s, struct board *b, enum stone to_play) { return pass; } diff --git a/playout/moggy.c b/playout/moggy.c index 8f7ee0e..e35395a 100644 --- a/playout/moggy.c +++ b/playout/moggy.c @@ -310,7 +310,7 @@ next_try:; } coord_t -playout_moggy_partchoose(struct playout_policy *p, struct board *b, enum stone to_play) +playout_moggy_partchoose(struct playout_policy *p, struct playout_setup *s, struct board *b, enum stone to_play) { struct moggy_policy *pp = p->data; @@ -435,7 +435,7 @@ mq_tagged_choose(struct playout_policy *p, struct board *b, enum stone to_play, } coord_t -playout_moggy_fullchoose(struct playout_policy *p, struct board *b, enum stone to_play) +playout_moggy_fullchoose(struct playout_policy *p, struct playout_setup *s, struct board *b, enum stone to_play) { struct moggy_policy *pp = p->data; struct move_queue q; q.moves = 0; diff --git a/replay/replay.c b/replay/replay.c index 4efc515..55539ab 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -24,8 +24,9 @@ static coord_t * replay_genmove(struct engine *e, struct board *b, struct time_info *ti, enum stone color, bool pass_all_alive) { struct replay *r = e->data; + struct playout_setup s; memset(&s, 0, sizeof(s)); - coord_t coord = r->playout->choose(r->playout, b, color); + coord_t coord = r->playout->choose(r->playout, &s, b, color); if (!is_pass(coord)) { struct move m; -- 2.11.4.GIT