@@ -39,18 +39,45 @@ dcnn_best_moves(engine_t *e, board_t *b, time_info_t *ti, enum stone color,
39
39
get_dcnn_best_moves (b , r , best_c , best_r , nbest );
40
40
}
41
41
42
+ #define option_error engine_setoption_error
43
+
44
+ static bool
45
+ dcnn_engine_setoption (engine_t * e , board_t * b , const char * optname , char * optval ,
46
+ char * * err , bool setup , bool * reset )
47
+ {
48
+ static_strbuf (ebuf , 256 );
49
+
50
+ if (!strcasecmp (optname , "threads" ) && optval ) {
51
+ /* Set number of threads for dcnn evaluation */
52
+ dcnn_set_threads (atoi (optval ));
53
+ }
54
+ else
55
+ option_error ("dcnn: Invalid engine argument %s or missing value\n" , optname );
56
+
57
+ return true;
58
+ }
59
+
42
60
void
43
61
dcnn_engine_init (engine_t * e , board_t * b )
44
62
{
63
+ e -> name = (char * )"DCNN" ;
64
+ e -> comment = (char * )"I just select dcnn's best move." ;
65
+ e -> genmove = dcnn_genmove ;
66
+ e -> setoption = dcnn_engine_setoption ;
67
+ e -> best_moves = dcnn_best_moves ;
68
+
69
+ /* Process engine options. */
70
+ char * err ;
71
+ options_t * options = & e -> options ;
72
+ for (int i = 0 ; i < options -> n ; i ++ )
73
+ if (!engine_setoption (e , b , & options -> o [i ], & err , true, NULL ))
74
+ die ("%s" , err );
75
+
45
76
dcnn_init (b );
46
77
if (!caffe_ready ()) {
47
78
fprintf (stderr , "Couldn't initialize dcnn, aborting.\n" );
48
79
abort ();
49
80
}
50
81
51
- e -> name = (char * )"DCNN" ;
52
- e -> comment = (char * )"I just select dcnn's best move." ;
53
- e -> genmove = dcnn_genmove ;
54
- e -> best_moves = dcnn_best_moves ;
55
82
}
56
83
0 commit comments