RULES_PASS_STONES -> RULES_SIMING, also count handicap stones as points
[pachi.git] / uct / internal.h
blobdbb65b2dbde831a24456c457fcdddcefd28f065b
1 #ifndef PACHI_UCT_INTERNAL_H
2 #define PACHI_UCT_INTERNAL_H
4 /* Internal UCT structures */
6 #include "debug.h"
7 #include "move.h"
8 #include "ownermap.h"
9 #include "pattern.h"
10 #include "patternsp.h"
11 #include "patternprob.h"
12 #include "playout.h"
13 #include "stats.h"
15 struct tree;
16 struct tree_node;
17 struct uct_policy;
18 struct uct_prior;
19 struct uct_dynkomi;
20 struct uct_pluginset;
21 struct joseki_dict;
23 /* How big proportion of ownermap counts must be of one color to consider
24 * the point sure. */
25 #define GJ_THRES 0.8
26 /* How many games to consider at minimum before judging groups. */
27 #define GJ_MINGAMES 500
29 /* Internal engine state. */
30 struct uct {
31 int debug_level;
32 enum uct_reporting {
33 UR_TEXT,
34 UR_JSON,
35 UR_JSON_BIG,
36 } reporting;
37 int reportfreq;
39 int games, gamelen;
40 floating_t resign_threshold, sure_win_threshold;
41 double best2_ratio, bestr_ratio;
42 floating_t max_maintime_ratio;
43 bool pass_all_alive; /* Current value */
44 bool allow_losing_pass;
45 bool territory_scoring;
46 int expand_p;
47 bool playout_amaf;
48 bool amaf_prior;
49 int playout_amaf_cutoff;
50 int dumpthres;
51 int force_seed;
52 bool no_tbook;
53 bool fast_alloc;
54 unsigned long max_tree_size;
55 unsigned long max_pruned_size;
56 unsigned long pruning_threshold;
57 int mercymin;
58 int significant_threshold;
60 int threads;
61 enum uct_thread_model {
62 TM_TREE, /* Tree parallelization w/o virtual loss. */
63 TM_TREEVL, /* Tree parallelization with virtual loss. */
64 } thread_model;
65 int virtual_loss;
66 bool pondering_opt; /* User wants pondering */
67 bool pondering; /* Actually pondering now */
68 bool slave; /* Act as slave in distributed engine. */
69 int max_slaves; /* Optional, -1 if not set */
70 int slave_index; /* 0..max_slaves-1, or -1 if not set */
71 enum stone my_color;
73 int fuseki_end;
74 int yose_start;
76 int dynkomi_mask;
77 int dynkomi_interval;
78 struct uct_dynkomi *dynkomi;
80 floating_t val_scale;
81 int val_points;
82 bool val_extra;
83 bool val_byavg;
84 bool val_bytemp;
85 floating_t val_bytemp_min;
87 int random_policy_chance;
88 bool local_tree;
89 int tenuki_d;
90 floating_t local_tree_aging;
91 #define LTREE_PLAYOUTS_MULTIPLIER 100
92 floating_t local_tree_depth_decay;
93 bool local_tree_allseq;
94 bool local_tree_neival;
95 enum {
96 LTE_ROOT,
97 LTE_EACH,
98 LTE_TOTAL,
99 } local_tree_eval;
100 bool local_tree_rootchoose;
102 char *banner;
104 struct uct_policy *policy;
105 struct uct_policy *random_policy;
106 struct playout_policy *playout;
107 struct uct_prior *prior;
108 struct uct_pluginset *plugins;
109 struct joseki_dict *jdict;
111 struct pattern_setup pat;
112 /* Various modules (prior, policy, ...) set this if they want pattern
113 * database to be loaded. */
114 bool want_pat;
116 /* Used within frame of single genmove. */
117 struct board_ownermap ownermap;
118 /* Used for coordination among slaves of the distributed engine. */
119 int stats_hbits;
120 int shared_nodes;
121 int shared_levels;
122 double stats_delay; /* stored in seconds */
123 int played_own;
124 int played_all; /* games played by all slaves */
126 /* Game state - maintained by setup_state(), reset_state(). */
127 struct tree *t;
130 #define UDEBUGL(n) DEBUGL_(u->debug_level, n)
132 bool uct_pass_is_safe(struct uct *u, struct board *b, enum stone color, bool pass_all_alive);
134 void uct_prepare_move(struct uct *u, struct board *b, enum stone color);
135 void uct_genmove_setup(struct uct *u, struct board *b, enum stone color);
136 void uct_pondering_stop(struct uct *u);
139 /* This is the state used for descending the tree; we use this wrapper
140 * structure in order to be able to easily descend in multiple trees
141 * in parallel (e.g. main tree and local tree) or compute cummulative
142 * "path value" throughout the tree descent. */
143 struct uct_descent {
144 /* Active tree nodes: */
145 struct tree_node *node; /* Main tree. */
146 struct tree_node *lnode; /* Local tree. */
147 /* Value of main tree node (with all value factors, but unbiased
148 * - without exploration factor), from black's perspective. */
149 struct move_stats value;
153 typedef struct tree_node *(*uctp_choose)(struct uct_policy *p, struct tree_node *node, struct board *b, enum stone color, coord_t exclude);
154 typedef floating_t (*uctp_evaluate)(struct uct_policy *p, struct tree *tree, struct uct_descent *descent, int parity);
155 typedef void (*uctp_descend)(struct uct_policy *p, struct tree *tree, struct uct_descent *descent, int parity, bool allow_pass);
156 typedef void (*uctp_winner)(struct uct_policy *p, struct tree *tree, struct uct_descent *descent);
157 typedef void (*uctp_prior)(struct uct_policy *p, struct tree *tree, struct tree_node *node, struct board *b, enum stone color, int parity);
158 typedef void (*uctp_update)(struct uct_policy *p, struct tree *tree, struct tree_node *node, enum stone node_color, enum stone player_color, struct playout_amafmap *amaf, struct board *final_board, floating_t result);
160 struct uct_policy {
161 struct uct *uct;
162 uctp_choose choose;
163 uctp_winner winner;
164 uctp_evaluate evaluate;
165 uctp_descend descend;
166 uctp_update update;
167 uctp_prior prior;
168 bool wants_amaf;
169 void *data;
172 #endif