From ef3e2df560fb1b29088c655638d4d0b63759451a Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Mon, 22 Sep 2008 05:49:52 +0200 Subject: [PATCH] Massive simplification of last two commits Just do not save children of obscure nodes and let the playout expanding code do the expansions. Duh. --- uct/tree.c | 37 ++++++++----------------------------- uct/tree.h | 4 +--- uct/uct.c | 14 +++----------- 3 files changed, 12 insertions(+), 43 deletions(-) diff --git a/uct/tree.c b/uct/tree.c index df80db9..82262a2 100644 --- a/uct/tree.c +++ b/uct/tree.c @@ -108,14 +108,9 @@ tree_node_save(FILE *f, struct tree_node *node, int thres) sizeof(struct tree_node) - offsetof(struct tree_node, depth), 1, f); - if (node->u.playouts < thres) { - fputc(2, f); - return; - } - - for (struct tree_node *ni = node->children; ni; ni = ni->sibling) { - tree_node_save(f, ni, thres); - } + if (node->u.playouts >= thres) + for (struct tree_node *ni = node->children; ni; ni = ni->sibling) + tree_node_save(f, ni, thres); fputc(0, f); } @@ -136,10 +131,7 @@ tree_save(struct tree *tree, struct board *b, int thres) void -tree_node_load(FILE *f, struct tree *tree, struct board *b, - struct tree_node *node, int *num, - enum stone color, int parity, - tree_load_expander expander, void *expander_data) +tree_node_load(FILE *f, struct tree_node *node, int *num) { (*num)++; @@ -147,33 +139,20 @@ tree_node_load(FILE *f, struct tree *tree, struct board *b, sizeof(struct tree_node) - offsetof(struct tree_node, depth), 1, f); - struct board b2; - board_copy(&b2, b); - struct move m = { node->coord, color }; - int res = board_play(&b2, &m); - assert(!res); - struct tree_node *ni = NULL, *ni_prev = NULL; - int s; - while ((s = fgetc(f))) { - if (s == 2) { - if (expander) - expander(tree, node, &b2, color, parity, expander_data); - break; - } + while (fgetc(f)) { ni_prev = ni; ni = calloc(1, sizeof(*ni)); if (!node->children) node->children = ni; else ni_prev->sibling = ni; ni->parent = node; - tree_node_load(f, tree, &b2, ni, num, stone_other(color), - parity, expander, expander_data); + tree_node_load(f, ni, num); } } void -tree_load(struct tree *tree, struct board *b, enum stone color, - tree_load_expander expander, void *expander_data) +tree_load(struct tree *tree, struct board *b) { char *filename = tree_book_name(b); FILE *f = fopen(filename, "rb"); @@ -184,7 +163,7 @@ tree_load(struct tree *tree, struct board *b, enum stone color, int num = 0; if (fgetc(f)) - tree_node_load(f, tree, b, tree->root, &num, color, 1, expander, expander_data); + tree_node_load(f, tree->root, &num); fprintf(stderr, "Loaded %d nodes.\n", num); fclose(f); diff --git a/uct/tree.h b/uct/tree.h index 73b9e53..bdafef2 100644 --- a/uct/tree.h +++ b/uct/tree.h @@ -56,10 +56,8 @@ struct tree { struct tree *tree_init(struct board *board, enum stone color); void tree_done(struct tree *tree); void tree_dump(struct tree *tree, int thres); - -typedef void (*tree_load_expander)(struct tree *t, struct tree_node *n, struct board *b, enum stone color, int parity, void *data); void tree_save(struct tree *tree, struct board *b, int thres); -void tree_load(struct tree *tree, struct board *b, enum stone color, tree_load_expander expander, void *expander_data); +void tree_load(struct tree *tree, struct board *b); void tree_expand_node(struct tree *tree, struct tree_node *node, struct board *b, enum stone color, int radar, struct uct_policy *policy, int parity); void tree_delete_node(struct tree *tree, struct tree_node *node); diff --git a/uct/uct.c b/uct/uct.c index 6d4cc09..d431ce3 100644 --- a/uct/uct.c +++ b/uct/uct.c @@ -170,14 +170,6 @@ end: } static void -expand_callback(struct tree *t, struct tree_node *n, struct board *b, - enum stone color, int parity, void *data) -{ - struct uct *u = data; - tree_expand_node(t, n, b, color, u->radar_d, u->policy, parity); -} - -static void prepare_move(struct engine *e, struct board *b, enum stone color, coord_t promote) { struct uct *u = e->data; @@ -191,7 +183,7 @@ prepare_move(struct engine *e, struct board *b, enum stone color, coord_t promot if (!u->t) { u->t = tree_init(b, color); //board_print(b, stderr); - tree_load(u->t, b, color, expand_callback, u); + tree_load(u->t, b); } /* XXX: We hope that the opponent didn't suddenly play @@ -261,7 +253,7 @@ uct_genbook(struct engine *e, struct board *b, enum stone color) { struct uct *u = e->data; u->t = tree_init(b, color); - tree_load(u->t, b, color, expand_callback, u); + tree_load(u->t, b); int i; for (i = 0; i < u->games; i++) { @@ -289,7 +281,7 @@ uct_dumpbook(struct engine *e, struct board *b, enum stone color) { struct uct *u = e->data; u->t = tree_init(b, color); - tree_load(u->t, b, color, NULL, NULL); + tree_load(u->t, b); tree_dump(u->t, 0); tree_done(u->t); } -- 2.11.4.GIT