UCT: Multi-threading support (root parallelization)
[pachi.git] / zzgo.c
blob47bb732ba89f1a130e1f3f324c7317b6572d687f
1 #include <getopt.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <time.h>
7 #include "board.h"
8 #include "debug.h"
9 #include "engine.h"
10 #include "montecarlo/montecarlo.h"
11 #include "random/random.h"
12 #include "uct/uct.h"
13 #include "gtp.h"
14 #include "random.h"
15 #include "version.h"
17 int debug_level = 1;
18 int seed;
20 int main(int argc, char *argv[])
22 struct board *b = board_init();
23 enum { E_RANDOM, E_MONTECARLO, E_UCT } engine = E_UCT;
25 seed = time(NULL);
27 int opt;
28 while ((opt = getopt(argc, argv, "e:d:s:")) != -1) {
29 switch (opt) {
30 case 'e':
31 if (!strcasecmp(optarg, "random")) {
32 engine = E_RANDOM;
33 } else if (!strcasecmp(optarg, "montecarlo")) {
34 engine = E_MONTECARLO;
35 } else if (!strcasecmp(optarg, "uct")) {
36 engine = E_UCT;
37 } else {
38 fprintf(stderr, "%s: Invalid -e argument %s\n", argv[0], optarg);
39 exit(1);
41 break;
42 case 'd':
43 debug_level = atoi(optarg);
44 break;
45 case 's':
46 seed = atoi(optarg);
47 break;
48 default: /* '?' */
49 fprintf(stderr, "Pachi version %s\n", PACHI_VERSION);
50 fprintf(stderr, "Usage: %s [-e random|montecarlo|uct] [-d DEBUG_LEVEL] [-s RANDOM_SEED] [ENGINE_ARGS]\n",
51 argv[0]);
52 exit(1);
56 fast_srandom(seed);
57 fprintf(stderr, "Random seed: %d\n", seed);
59 char *e_arg = NULL;
60 if (optind < argc)
61 e_arg = argv[optind];
62 struct engine *e;
63 switch (engine) {
64 case E_RANDOM:
65 default:
66 e = engine_random_init(e_arg); break;
67 case E_MONTECARLO:
68 e = engine_montecarlo_init(e_arg); break;
69 case E_UCT:
70 e = engine_uct_init(e_arg); break;
74 char buf[256];
75 while (fgets(buf, 256, stdin)) {
76 if (DEBUGL(1))
77 fprintf(stderr, "IN: %s", buf);
78 gtp_parse(b, e, buf);
79 if (DEBUGL(1))
80 board_print(b, stderr);
82 return 0;