pachi_py/pachi/uct/search.h (40 lines of code) (raw):
#ifndef PACHI_UCT_SEARCH_H
#define PACHI_UCT_SEARCH_H
/* MCTS Search infrastructure. We juggle the search threads and
* control search duration. */
/* uct.c provides the GTP interface and engine setup. */
/* walk.c controls repeated walking of the MCTS tree within
* the search threads. */
#include <signal.h> // sig_atomic_t
#include "debug.h"
#include "move.h"
#include "ownermap.h"
#include "playout.h"
#include "timeinfo.h"
#include "uct/internal.h"
struct tree;
struct tree_node;
/* Internal UCT structures */
/* How often to inspect the tree from the main thread to check for playout
* stop, progress reports, etc. (in seconds) */
#define TREE_BUSYWAIT_INTERVAL 0.1 /* 100ms */
/* Thread manager state */
extern volatile sig_atomic_t uct_halt;
extern bool thread_manager_running;
/* Search thread context */
struct uct_thread_ctx {
int tid;
struct uct *u;
struct board *b;
enum stone color;
struct tree *t;
unsigned long seed;
int games;
struct time_info *ti;
};
/* Progress information of the on-going MCTS search - when did we
* last adjusted dynkomi, printed out stuff, etc. */
struct uct_search_state {
/* Number of games simulated for this simulation before
* we started the search. (We have simulated them earlier.) */
int base_playouts;
/* Number of last dynkomi adjustment. */
int last_dynkomi;
/* Number of last game with progress print. */
int last_print;
/* Number of simulations to wait before next print. */
int print_interval;
/* Printed notification about full memory? */
bool fullmem;
struct time_stop stop;
struct uct_thread_ctx *ctx;
};
int uct_search_games(struct uct_search_state *s);
void uct_search_start(struct uct *u, struct board *b, enum stone color, struct tree *t, struct time_info *ti, struct uct_search_state *s);
struct uct_thread_ctx *uct_search_stop(void);
void uct_search_progress(struct uct *u, struct board *b, enum stone color, struct tree *t, struct time_info *ti, struct uct_search_state *s, int i);
bool uct_search_check_stop(struct uct *u, struct board *b, enum stone color, struct tree *t, struct time_info *ti, struct uct_search_state *s, int i);
struct tree_node *uct_search_result(struct uct *u, struct board *b, enum stone color, bool pass_all_alive, int played_games, int base_playouts, coord_t *best_coord);
#endif