Fixes to pluto heuristic, small cleanups.
[rattatechess.git] / engine.h
blobff186f47fffc388720234d27aa6e28c96d2206bb
1 /***************************************************************************
2 engine.h - description
3 -------------------
4 begin : mer ott 23 2002
5 copyright : (C) 2002-2005 by Maurizio Monge
6 email : monge@linuz.sns.it
7 ***************************************************************************/
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
18 #ifndef __ENGINE_H__
19 #define __ENGINE_H__
22 #define PLAYING 1
23 #define _10 2
24 #define _01 3
25 #define _12 4
27 //#define PLAYING 1
28 #define ANALYZING 2
29 #define FORCING 3
31 #define TIME_LIMIT 1
32 #define DEPTH_LIMIT 2
33 #define NODES_LIMIT 3
36 #include <map>
37 #include <string>
38 #include <list>
39 #include <setjmp.h>
40 #include "board.h"
42 class Engine;
43 class SearchGui;
45 class Engine
47 public:
48 class Cmd;
49 class Variable;
51 typedef std::map<std::string, Cmd> CmdSet;
52 typedef std::map<std::string, Variable> VariableSet;
54 Board board;
56 SearchGui* search_gui;
58 Move* mv_done;
59 int mv_done_num;
61 SaveBuf *save_buf;
62 int save_buf_num;
64 /* the max depth of the engine */
65 int st_depth;
66 int st_nodes;
68 /* the color of the engine */
69 uint8_t st_computer_color;
71 /* the time the engine will use to think */
72 int time_best_csec;
74 /* if there is a fixed time for a move, or else 0 */
75 int time_fixed;
77 /* time move per section, time per section and inc... */
78 int time_mps;
79 int time_base;
80 int time_inc;
82 /* clok and other clock in sec/100 */
83 int time_clock_csec;
84 int time_oth_clock_csec;
86 /* flags for options of the engine */
87 int analysis_limit;
89 bool ponder;
90 bool post;
91 //uint8_t eng_color;
92 uint64_t processed_nodes;
93 int max_think_time;
95 /* flag for output behaviour */
96 bool io_xboard;
97 bool io_san;
98 bool io_colors;
100 /* engine status */
101 int status;
102 int eng_status;
103 const char *status_string;
104 bool thinking;
105 int start_think_time;
106 uint8_t analysis_color;
108 FILE *log;
109 CmdSet commands;
110 VariableSet variables;
111 jmp_buf back;
113 HashEntry *hash_table;
114 void *book_mmap;
115 uint32_t book_size;
117 char opponent[256];
118 int w_rating;
119 int b_rating;
121 static Engine* instance;
123 /* variables */
124 int v_book_creation_max_depth;
125 int v_book_creation_max_alternatives;
126 int v_book_creation_min_games;
127 int v_book_creation_min_probability;
128 int v_book_creation_weigh_win;
129 int v_book_creation_weigh_draw;
130 int v_book_creation_weigh_lose;
132 int v_search_null_reduction;
133 int v_search_threat_extension;
134 int v_search_threat_threshold;
136 int v_eval_draw;
138 void cmd__check(int argc, char *argv[]);
139 void cmd__attacks(int argc, char *argv[]);
140 void cmd__see(int argc, char *argv[]);
141 void cmd__shat(int argc, char *argv[]);
142 void cmd__find_moves(int argc, char *argv[]);
143 void cmd__gen_hash(int argc, char *argv[]);
144 void cmd__gon(int argc, char *argv[]);
145 void cmd__goff(int argc, char *argv[]);
146 void cmd_quit(int argc, char *argv[]);
147 void cmd_ping(int argc, char *argv[]);
148 void cmd_bench(int argc, char *argv[]);
149 void cmd_perft(int argc, char *argv[]);
150 void cmd_perftall(int argc, char *argv[]);
151 void cmd_sd(int argc, char *argv[]);
152 void cmd_st(int argc, char *argv[]);
153 void cmd_sn(int argc, char *argv[]);
154 void cmd_otim(int argc, char *argv[]);
155 void cmd_time(int argc, char *argv[]);
156 void cmd_level(int argc, char *argv[]);
157 void cmd_help(int argc, char *argv[]);
158 void cmd_force(int argc, char *argv[]);
159 void cmd_undo(int argc, char *argv[]);
160 void cmd_remove(int argc, char *argv[]);
161 void cmd_new(int argc, char *argv[]);
162 void cmd_white(int argc, char *argv[]);
163 void cmd_black(int argc, char *argv[]);
164 void cmd_go(int argc, char *argv[]);
165 void cmd_setboard(int argc, char *argv[]);
166 void cmd_edit(int argc, char *argv[]);
167 void cmd_load(int argc, char *argv[]);
168 void cmd_save(int argc, char *argv[]);
169 void cmd_load_pgn(int argc, char *argv[]);
170 void cmd_epdtest(int argc, char *argv[]);
171 void cmd_challenge(int argc, char *argv[]);
172 void cmd_create_book(int argc, char *argv[]);
173 void cmd_open_book(int argc, char *argv[]);
174 void cmd_close_book(int argc, char *argv[]);
175 void cmd_test(int argc, char *argv[]);
176 void cmd_protover(int argc, char *argv[]);
177 void cmd_accepted(int argc, char *argv[]);
178 void cmd_rejected(int argc, char *argv[]);
179 void cmd_xboard(int argc, char *argv[]);
180 void cmd_analyze(int argc, char *argv[]);
181 void cmd_exit(int argc, char *argv[]);
182 void cmd_easy(int argc, char *argv[]);
183 void cmd_hard(int argc, char *argv[]);
184 void cmd_post(int argc, char *argv[]);
185 void cmd_nopost(int argc, char *argv[]);
186 void cmd_result(int argc, char *argv[]);
187 void cmd_DOT(int argc, char *argv[]);
188 void cmd_QUESTION(int argc, char *argv[]);
189 void cmd_name(int argc, char *argv[]);
190 void cmd_rating(int argc, char *argv[]);
191 void cmd_var(int argc, char *argv[]);
192 void cmd_varhelp(int argc, char *argv[]);
194 void create_hash();
195 void reset_hash();
196 void make_old_hash();
198 HashEntry* probe_hash(const HashKey& hk);
199 void prefetch_hash(const HashKey& hk);
200 void write_hash(const HashKey& hk, int16_t lo, int16_t up, int depth, int best_cont, bool no_good_moves);
202 bool check_time();
203 bool check_draw();
204 bool check_repetition(int nfold);
206 void print_stat();
207 void move_now();
208 static void sort_moves(Move* m,int num);
209 static void incremental_sort_moves(Move* m,int num);
211 void calc_best_time();
214 friend class Board;
216 public:
217 Engine();
218 static Engine *eng();
220 uint8_t color_to_move();
221 uint8_t computer_color();
222 int get_status();
223 int move_number();
225 void register_commands();
226 void register_variables();
228 void process_input();
229 void output(const char* fmt, ...) PRINTF(2, 3);
231 Move find_best_move();
233 void move(Move mv);
234 void retract_move();
235 void undo();
236 void start();
237 void start(unsigned char color);
238 void force();
239 void analyze();
240 void do_ponder();
241 void new_game();
242 uint64_t perft(int lev);
243 void set_depth(int depth);
244 void set_max_nodes(int nodes);
245 void set_time_control(int mps, int basesec, int inc);
246 void set_time_fixed(int time);
247 void set_my_clock(int time);
248 void set_other_clock(int time);
250 /* io functions */
251 void save_pgn(FILE *f, const char *result1, const char *result);
252 void print_moves(Move* m,int num,bool nums=1);
253 void print_board(); //prints colored board to stdout
254 void read_board(char* brd, char* color, char* castle,
255 char* passing, int moves_to_draw, int num_moves);
256 void read_board(char* str);//reads from f a Forsythe-Edwards notation board
257 void read_board(FILE* f); //reads from f a Forsythe-Edwards notation board
258 void write_board(FILE* f); //writes to f a Forsythe-Edwards notation board
259 int load_pgn(FILE *f);
260 int run_epd_prog(const char* prog, int time, const char* file, bool quiet = true);
261 void challenge(const char* prog, int time, const char* file);
263 void create_book(int argc, char *argv[]);
264 bool open_book(const char *f);
265 void close_book();
266 Move probe_book(Board *b);
268 typedef std::map<HashKey, std::map<Move, int> > Lines;
269 Lines lines;
270 bool open_lines(const char *f);
271 void close_lines();
272 Move probe_lines(Board *b);
274 bool parse_command(char *str);
276 void autotune();
279 #endif //__ENGINE_H__