Move eval to old file.
[rattatechess.git] / engine.h
blobc8ae1425af660d2aa133163b21048f91b473f82d
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;
44 class Engine
46 public:
47 class Cmd;
48 class Variable;
50 typedef std::map<std::string, Cmd> CmdSet;
51 typedef std::map<std::string, Variable> VariableSet;
53 Board board;
55 Move* mv_done;
56 int mv_done_num;
58 /* the max depth of the engine */
59 int st_depth;
60 int st_nodes;
62 /* the color of the engine */
63 uint8_t st_computer_color;
65 /* the time the engine will use to think */
66 int time_best_csec;
68 /* if there is a fixed time for a move, or else 0 */
69 int time_fixed;
71 /* time move per section, time per section and inc... */
72 int time_mps;
73 int time_base;
74 int time_inc;
76 /* clok and other clock in sec/100 */
77 int time_clock_csec;
78 int time_oth_clock_csec;
80 /* flags for options of the engine */
81 int analysis_limit;
83 bool ponder;
84 bool post;
85 //uint8_t eng_color;
86 uint64_t processed_nodes;
87 int max_think_time;
89 /* flag for output behaviour */
90 bool io_xboard;
91 bool io_san;
92 bool io_colors;
94 /* engine status */
95 int status;
96 int eng_status;
97 const char *status_string;
98 bool thinking;
99 int start_think_time;
100 uint8_t analysis_color;
101 //bool can_claim_draw;
103 FILE *log;
104 CmdSet commands;
105 VariableSet variables;
106 jmp_buf back;
108 HashEntry *hash_table;
109 void *book_mmap;
110 uint32_t book_size;
112 char opponent[256];
113 int w_rating;
114 int b_rating;
116 static Engine* instance;
118 /* variables */
119 int v_book_creation_max_depth;
120 int v_book_creation_max_alternatives;
121 int v_book_creation_min_games;
122 int v_book_creation_min_probability;
123 int v_book_creation_weigh_win;
124 int v_book_creation_weigh_draw;
125 int v_book_creation_weigh_lose;
127 int v_search_null_reduction;
128 int v_search_threat_extension;
129 int v_search_threat_threshold;
131 int v_eval_draw;
133 void cmd__check(int argc, char *argv[]);
134 void cmd__attacks(int argc, char *argv[]);
135 void cmd__see(int argc, char *argv[]);
136 void cmd__shat(int argc, char *argv[]);
137 void cmd__find_moves(int argc, char *argv[]);
138 void cmd__gen_hash(int argc, char *argv[]);
139 void cmd__rewrite_hash(int argc, char *argv[]);
140 void cmd_quit(int argc, char *argv[]);
141 void cmd_ping(int argc, char *argv[]);
142 void cmd_bench(int argc, char *argv[]);
143 void cmd_perft(int argc, char *argv[]);
144 void cmd_perftall(int argc, char *argv[]);
145 void cmd_sd(int argc, char *argv[]);
146 void cmd_st(int argc, char *argv[]);
147 void cmd_sn(int argc, char *argv[]);
148 void cmd_otim(int argc, char *argv[]);
149 void cmd_time(int argc, char *argv[]);
150 void cmd_level(int argc, char *argv[]);
151 void cmd_help(int argc, char *argv[]);
152 void cmd_force(int argc, char *argv[]);
153 void cmd_undo(int argc, char *argv[]);
154 void cmd_remove(int argc, char *argv[]);
155 void cmd_new(int argc, char *argv[]);
156 void cmd_white(int argc, char *argv[]);
157 void cmd_black(int argc, char *argv[]);
158 void cmd_go(int argc, char *argv[]);
159 void cmd_setboard(int argc, char *argv[]);
160 void cmd_edit(int argc, char *argv[]);
161 void cmd_load(int argc, char *argv[]);
162 void cmd_save(int argc, char *argv[]);
163 void cmd_load_pgn(int argc, char *argv[]);
164 void cmd_epdtest(int argc, char *argv[]);
165 void cmd_challenge(int argc, char *argv[]);
166 void cmd_create_book(int argc, char *argv[]);
167 void cmd_open_book(int argc, char *argv[]);
168 void cmd_close_book(int argc, char *argv[]);
169 void cmd_test(int argc, char *argv[]);
170 void cmd_protover(int argc, char *argv[]);
171 void cmd_accepted(int argc, char *argv[]);
172 void cmd_rejected(int argc, char *argv[]);
173 void cmd_xboard(int argc, char *argv[]);
174 void cmd_analyze(int argc, char *argv[]);
175 void cmd_exit(int argc, char *argv[]);
176 void cmd_easy(int argc, char *argv[]);
177 void cmd_hard(int argc, char *argv[]);
178 void cmd_post(int argc, char *argv[]);
179 void cmd_nopost(int argc, char *argv[]);
180 void cmd_result(int argc, char *argv[]);
181 void cmd_DOT(int argc, char *argv[]);
182 void cmd_QUESTION(int argc, char *argv[]);
183 void cmd_name(int argc, char *argv[]);
184 void cmd_rating(int argc, char *argv[]);
185 void cmd_var(int argc, char *argv[]);
186 void cmd_varhelp(int argc, char *argv[]);
188 void create_hash();
189 void reset_hash();
190 void make_old_hash();
192 HashEntry* probe_hash(const HashKey& hk);
193 void prefetch_hash(const HashKey& hk);
194 void write_hash(int16_t lo, int16_t up, int depth, int best_cont);
196 bool check_time();
197 bool check_draw();
198 bool insufficient_material();
200 void rewind_thinking();
201 void restore_thinking();
202 void print_stat();
203 void move_now();
204 bool null_move_ok();
205 int16_t search(int ply, int depth, bool pv,
206 int16_t alpha, int16_t beta);
207 void moves_heuristic(Move *mv, int num_mv, int ply,
208 int orig_depth, Move best_mv_hash, bool quiesce, Move* prev);
209 void moves_quiescence_heuristic(Move *mv, int num_mv, const Move& hash,
210 int static_eval, int alpha, int beta, int depth, Move* prev);
211 static void sort_moves(Move* m,int num);
212 static void incremental_sort_moves(Move* m,int num);
214 void calc_best_time();
217 friend class Board;
219 public:
220 Engine();
221 static Engine *eng();
223 uint8_t color_to_move();
224 uint8_t computer_color();
225 int get_status();
226 int move_number();
228 void register_commands();
229 void register_variables();
231 void process_input();
232 void output(const char* fmt, ...) PRINTF(2, 3);
234 Move find_best_move();
236 void move(Move mv);
237 void retract_move();
238 void undo();
239 void start();
240 void start(unsigned char color);
241 void force();
242 void analyze();
243 void do_ponder();
244 void new_game();
245 uint64_t perft(int lev);
246 void set_depth(int depth);
247 void set_max_nodes(int nodes);
248 void set_time_control(int mps, int basesec, int inc);
249 void set_time_fixed(int time);
250 void set_my_clock(int time);
251 void set_other_clock(int time);
253 int parse_move(Move* mv,char* str);
254 char* move_to_coord(char* str,Move* mv);
255 char* move_to_alg(char* str,Move* mv);
257 /* io functions */
258 void save_pgn(FILE *f, const char *result1, const char *result);
259 void print_moves(Move* m,int num,bool nums=1);
260 void print_board(); //prints colored board to stdout
261 void read_board(char* brd, char* color, char* castle,
262 char* passing, int moves_to_draw, int num_moves);
263 void read_board(char* str);//reads from f a Forsythe-Edwards notation board
264 void read_board(FILE* f); //reads from f a Forsythe-Edwards notation board
265 void write_board(FILE* f); //writes to f a Forsythe-Edwards notation board
266 int load_pgn(FILE *f);
267 int run_epd_prog(const char* prog, int time, const char* file, bool quiet = true);
268 void challenge(const char* prog, int time, const char* file);
270 void create_book(int argc, char *argv[]);
271 bool open_book(const char *f);
272 void close_book();
273 bool probe_book(const HashKey& h, Move* m);
275 typedef std::map< HashKey, std::list< Move > > Lines;
276 Lines lines;
277 bool open_lines(const char *f);
278 void close_lines();
279 bool probe_lines(const HashKey& h, Move* m);
281 bool parse_command(char *str);
283 void autotune();
286 #endif //__ENGINE_H__