Main Page | File List

computation.h

00001 /* '='='=' '@' '='='='='='='='='=' '@' '='='='='='='='='=' '@' '='='='| */
00002 /* ='='=' '@'@' '='='='='='='='=' '@'@' '='='='='='='='=' '@'@' '='='=| */
00003 /* '='=' '@':'@' '='='='='='='=' '@':'@' '='='='='='='=' '@':'@' '='='| */
00004 /* ='=' '@':':'@' '='='='='='=' '@':':'@' '='='='='='=' '@':':'@' '='=| */
00005 /* '=' '@':':':'@' '='='='='=' '@':':':'@' '='='='='=' '@':':':'@' '='| */
00006 /* =' '@':':':':'@' '='='='=' '@':':':':'@' '='='='=' '@':':':':'@' '=| */
00007 /* ' '@':'                                                       '@' '| */
00008 /*  '@'         3rd Year Project - ROY SCHESTOWITZ - 2002          @' | */
00009 /* '@                                                               @'| */
00010 /* @':':':':':':':':'@' ' '@':':':':':':':':'@' ' '@':':':':':':':':'@| */
00011 /* ':':':':':':':':':'@' '@':':':':':':':':':'@' '@':':':':':':':':':'| */
00012 /* :':':':':':':':':':'@'@':':':':':':':':':':'@'@':':':':':':':':':':| */
00013 /* ':':':': : :':':':':'@':':':':': : :':':':':'@':':':':': : :':':':'| */
00014 /*  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
00015 /*              Name:           computation.h                           */
00016 /*              Version:        0.6.6                                   */
00017 /*              Date:           12/2/2003                               */
00018 /*                                                                      */
00019 /*              Datastructures for the main procedure to compute a      */
00020 /*              smart move in the game                                  */
00021 /*                                                                      */
00022 /*  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
00023 
00024 /************************************************************************/
00025 /**********************  INCLUDES  **************************************/
00026 /************************************************************************/
00027 
00028 
00029 /************************************************************************/
00030 /**********************  DEFINES  ***************************************/
00031 /************************************************************************/
00032 
00033 /************************** Line values *******************************/
00034 //The following definition are followed by a map showing position X in
00035 //the upper left side of the board
00036 
00037 /*==================*/
00039 /*==================*/
00040 
00041 #define LINE_STRAIGHT_EDGE              5
00042 
00043 //  X***
00044 //  X***
00045 //  X***
00046 //  X***
00047 
00048 #define LINE_STRAIGHT_NEAR_EDGE         3
00049 
00050 //  *X**
00051 //  *X**
00052 //  *X**
00053 //  *X**
00054 
00055 #define LINE_STRAIGHT_NEAR_MIDDLE       2
00056 
00057 //  **X*
00058 //  **X*
00059 //  **X*
00060 //  **X*
00061 
00062 #define LINE_STRAIGHT_MIDDLE            2
00063 
00064 //  ***X
00065 //  ***X
00066 //  ***X
00067 //  ***X
00068 
00069 
00070 /*==================*/
00072 /*==================*/
00073 
00074 #define LINE_DIAGONAL_MIDDLE                            5
00075 
00076 //  X*******
00077 //  *X******
00078 //  **X*****
00079 //  ***X****
00080 //  ****X***
00081 //  *****X**
00082 //  ******X*
00083 //  *******X
00084 
00085 #define LINE_DIAGONAL_NEAR_MIDDLE                       4
00086 
00087 //  ********
00088 //  X*******
00089 //  *X******
00090 //  **X*****
00091 //  ***X****
00092 //  ****X***
00093 //  *****X**
00094 //  ******X*
00095 
00096 #define LINE_DIAGONAL_BETWEEN_MIDDLE_AND_CORNER         3
00097 
00098 //  ********
00099 //  ********
00100 //  X*******
00101 //  *X******
00102 //  **X*****
00103 //  ***X****
00104 //  ****X***
00105 //  *****X**
00106 
00107 #define LINE_DIAGONAL_NEAR_CORNER                       2
00108 
00109 //  ********
00110 //  ********
00111 //  ********
00112 //  X*******
00113 //  *X******
00114 //  **X*****
00115 //  ***X****
00116 //  ****X***
00117 
00118 #define LINE_DIAGONAL_CORNER                            1
00119 
00120 //  ********
00121 //  ********
00122 //  ********
00123 //  ********
00124 //  X*******
00125 //  *X******
00126 //  **X*****
00127 //  ***X****
00128 
00129 /*=============================*/
00131 /*=============================*/
00132 
00133 #define INCOMPLETE_LINE_STRAIGHT_EDGE           4
00134 
00135 //  ****
00136 //  X***
00137 //  X***
00138 //  X***
00139 //  X***
00140 //  X***
00141 //  X***
00142 //  X***
00143 //
00144 //   OR
00145 //
00146 //  X***
00147 //  X***
00148 //  X***
00149 //  X***
00150 //  X***
00151 //  X***
00152 //  X***
00153 //  ****
00154 
00155 #define INCOMPLETE_LINE_STRAIGHT_NEAR_EDGE      3
00156 
00157 //  ****
00158 //  *X**
00159 //  *X**
00160 //  *X**
00161 //  *X**
00162 //  *X**
00163 //  *X**
00164 //  *X**
00165 //
00166 //   OR
00167 //
00168 //  *X**
00169 //  *X**
00170 //  *X**
00171 //  *X**
00172 //  *X**
00173 //  *X**
00174 //  *X**
00175 //  ****
00176 
00177 #define INCOMPLETE_LINE_STRAIGHT_NEAR_MIDDLE    2
00178 
00179 //  ****
00180 //  **X*
00181 //  **X*
00182 //  **X*
00183 //  **X*
00184 //  **X*
00185 //  **X*
00186 //  **X*
00187 //
00188 //   OR
00189 //
00190 //  **X*
00191 //  **X*
00192 //  **X*
00193 //  **X*
00194 //  **X*
00195 //  **X*
00196 //  **X*
00197 //  ****
00198 
00199 #define INCOMPLETE_LINE_STRAIGHT_MIDDLE         2
00200 
00201 //  ****
00202 //  ***X
00203 //  ***X
00204 //  ***X
00205 //  ***X
00206 //  ***X
00207 //  ***X
00208 //  ***X
00209 //
00210 //   OR
00211 //
00212 //  ***X
00213 //  ***X
00214 //  ***X
00215 //  ***X
00216 //  ***X
00217 //  ***X
00218 //  ***X
00219 //  ****
00220 
00221 
00222 
00223 /*=============================*/
00225 /*=============================*/
00226 
00227 #define INCOMPLETE_LINE_DIAGONAL_MIDDLE                         5
00228 
00229 //  X*******
00230 //  *X******
00231 //  **X*****
00232 //  ***X****
00233 //  ****X***
00234 //  *****X**
00235 //  ******X*
00236 //  ********
00237 //
00238 //    OR
00239 //
00240 //  ********
00241 //  *X******
00242 //  **X*****
00243 //  ***X****
00244 //  ****X***
00245 //  *****X**
00246 //  ******X*
00247 //  *******X
00248 
00249 #define INCOMPLETE_LINE_DIAGONAL_NEAR_MIDDLE                    4
00250 
00251 //  ********
00252 //  X*******
00253 //  *X******
00254 //  **X*****
00255 //  ***X****
00256 //  ****X***
00257 //  *****X**
00258 //  ********
00259 //
00260 //    OR
00261 //
00262 //  ********
00263 //  ********
00264 //  *X******
00265 //  **X*****
00266 //  ***X****
00267 //  ****X***
00268 //  *****X**
00269 //  ******X*
00270 #define INCOMPLETE_LINE_DIAGONAL_BETWEEN_MIDDLE_AND_CORNER      3
00271 
00272 //  ********
00273 //  ********
00274 //  X*******
00275 //  *X******
00276 //  **X*****
00277 //  ***X****
00278 //  ****X***
00279 //  ********
00280 //
00281 //    OR
00282 //
00283 //  ********
00284 //  ********
00285 //  ********
00286 //  *X******
00287 //  **X*****
00288 //  ***X****
00289 //  ****X***
00290 //  *****X**
00291 
00292 #define INCOMPLETE_LINE_DIAGONAL_NEAR_CORNER                    2
00293 
00294 //  ********
00295 //  ********
00296 //  ********
00297 //  X*******
00298 //  *X******
00299 //  **X*****
00300 //  ***X****
00301 //  ********
00302 //
00303 //    OR
00304 //
00305 //  ********
00306 //  ********
00307 //  ********
00308 //  ********
00309 //  *X******
00310 //  **X*****
00311 //  ***X****
00312 //  ****X***
00313 
00314 #define INCOMPLETE_LINE_DIAGONAL_CORNER                         1
00315 
00316 //  ********
00317 //  ********
00318 //  ********
00319 //  ********
00320 //  ********
00321 //  *X******
00322 //  **X*****
00323 //  ***X****
00324 //
00325 //    OR
00326 //
00327 //  ********
00328 //  ********
00329 //  ********
00330 //  ********
00331 //  X*******
00332 //  *X******
00333 //  **X*****
00334 //  ********
00335 
00336 
00337 
00338 /************************** Position values *******************************/
00339 //The following definition are followed by a map showing position X in
00340 //the upper left side of the board
00341 
00342 #define CORNER_POS                      10000
00343 
00344 //  X***
00345 //  ****
00346 //  ****
00347 //  ****
00348 
00349 #define SIDE_MIDDLE_POS                 800
00350 
00351 //  ***X
00352 //  ****
00353 //  ****
00354 //  X***
00355 
00356 #define SIDE_FAR_POS                    1000
00357 
00358 //  **X*
00359 //  ****
00360 //  X***
00361 //  ****
00362 
00363 #define MIDDLE_4_POS                    50
00364 
00365 //  ****
00366 //  ****
00367 //  ****
00368 //  ***X
00369 
00370 #define MIDDLE_8_POS                    10
00371 
00372 //  ****
00373 //  ****
00374 //  ***X
00375 //  **X*
00376 
00377 #define MIDDLE_DIAGONAL_4_POS           30
00378 
00379 //  ****
00380 //  ****
00381 //  **X*
00382 //  ****
00383 
00384 #define NEAR_SIDES_MIDDLE_POS           -500
00385 
00386 //  ****
00387 //  ***X
00388 //  ****
00389 //  *X**
00390 
00391 #define NEAR_SIDES_FAR_POS              -450
00392 
00393 //  ****
00394 //  **X*
00395 //  *X**
00396 //  ****
00397 
00398 #define DIAGONAL_NEAR_CORNER_POS        -5000
00399 
00400 //  ****
00401 //  *X**
00402 //  ****
00403 //  ****
00404 
00405 #define SIDES_NEAR_CORNER_POS           -3000
00406 
00407 //  *X**
00408 //  X***
00409 //  ****
00410 //  ****
00411 
00412 
00413 
00414 /***************************/
00416 /***************************/
00417 
00418 #define EVALUATE_POSITION_ACTIVE                        1
00419 // sets the evaluation by positions of stones
00420 
00421 #define EVALUATE_MOBILITY_ACTIVE                        1
00422 // sets the evaluation by mobility difference
00423 
00424 #define EVALUATE_SCORE_ACTIVE                           1
00425 // sets the evaluation by score difference
00426 
00427 #define EVALUATE_LINES_ACTIVE                           1
00428 // sets the evaluation by control of lines
00429 
00430 
00431 /********************************/
00433 /********************************/
00434 
00435 #define STRAIGHT_COMPLETE_LINES_ACTIVE                  1
00436 // complete straight lines
00437 
00438 #define DIAGONAL_COMPLETE_LINES_ACTIVE                  1
00439 // complete diagonal lines
00440 
00441 #define STRAIGHT_INCOMPLETE_LINES_ACTIVE                1
00442 // incomplete straight lines
00443 
00444 #define DIAGONAL_INCOMPLETE_LINES_ACTIVE                1
00445 // incomplete diagonal lines
00446 
00447 
00448 /************************************************/
00449 /********* Evaluation Coefficients **************/
00450 /************************************************/
00451 
00452 #define SCORE_COEFFICIENT                               50
00453 // defines the number of points a score unit is worth
00454 
00455 #define MOBILITY_COEFFICIENT                            70
00456 // defines the number of points a mobility unit is worth
00457 
00458 #define POSITION_VALUE_COEFFICIENT                      1
00459 // defines the coefficient of a given position value
00460 
00461 #define LINE_STATE_COEFFICIENT                          1
00462 // defines the coefficient of a lines value
00463 
00464 /************************/
00466 /************************/
00467 
00468 #define LINING_COEFFICIENT_STRAIGHT_COMPLETE            12
00469 // defines the coefficient of a given straight line layout value
00470 
00471 #define LINING_COEFFICIENT_DIAGONAL_COMPLETE            10
00472 // defines the coefficient of a given diagonal line layout value
00473 
00474 #define LINING_COEFFICIENT_STRAIGHT_INCOMPLETE          5
00475 // defines the coefficient of a given straight incomplete line layout value
00476 
00477 #define LINING_COEFFICIENT_DIAGONAL_INCOMPLETE          4
00478 // defines the coefficient of a given diagonal incomplete line layout value
00479 
00480 /******************/
00482 /******************/
00483 
00484 
00485 #define MOVE_FACTOR                                     100
00486 // the initial factor for a given possible move
00487 
00488 #define MOVE_FACTOR_DIVIDER                             10
00489 // the dynamic behaviour of the factor - the speed it grows smaller
00490 
00491 #define MOVES_UPPER_BOUND                               60
00492 // defines the upper bound of moves available
00493 
00494 #define SCORE_LOWER_BOUND                               -10000000
00495 // defines the minimum score obtainable - lower bound
00496 
00497 /************************/
00499 /************************/
00500 
00501 #define BEGINNER_RANDOMISATION_KEY                      4
00502 // Defines the number N which in the expression N/100 defines the chance
00503 // that a given move will be taken in the difficulty beginner
00504 // it also defines the maximum offset (pre-cent) added to an evaluation
00505 
00506 #define NOVICE_RANDOMISATION_KEY                        5
00507 // Defines the maximum offset (pre-cent) added to an evaluation
00508 // when the the current difficulty is novice
00509 
00510 #define EXPERT_RANDOMISATION_KEY                        4
00511 // Defines the maximum offset (pre-cent) added to an evaluation
00512 // when the the current difficulty is expert
00513 
00514 #define PRE_MASTER_RANDOMISATION_KEY                    6
00515 // Defines the maximum offset (pre-cent) added to an evaluation
00516 // when the the current difficulty is pre-master
00517 
00518 #define MASTER_RANDOMISATION_KEY                        6
00519 // Defines the maximum offset (pre-cent) added to an evaluation
00520 // when the the current difficulty is master
00521 
00522 /************************/
00524 /************************/
00525 
00526 #define  OPENING_LIBRARY_HASH_SIZE                      50
00527 //The size of the hashtable that stores the opening library
00528 
00529 
00530 /************************************************************************/
00531 /**********************  DATA STRUCTURES  *******************************/
00532 /************************************************************************/
00533 
00534 typedef struct
00535 {
00536   int score;
00537   int i;
00538   int j;
00539 }
00540 move_score;
00541 
00542 /************************************************************************/
00543 /**********************  PROTOTYPES  ************************************/
00544 /************************************************************************/
00545 
00546 /*******************/
00548 /*******************/
00549 
00550 void cpu_move ( int color );
00551 board_map compute_move_for_color ( board_map inputboard, int color );
00552 board_map make_nth_best_move ( board_map inputboard, int color,
00553                                int priority );
00554 
00555 /******************/
00557 /******************/
00558 
00559 int calculate_mobility_difference_of_board ( board_map inputboard,
00560                                              int color );
00561 int calculate_score_difference_of_board ( board_map inputboard, int color );
00562 int get_mobility_of_color ( board_map inputboard, int color );
00563 
00564 /******************/
00566 /******************/
00567 
00568 int find_value_of_position ( int i, int j, int color );
00569 int evaluate ( int, board_map );
00570 int evaluate_lines ( board_map input_board, int color );
00571 
00572 /***************************/
00574 /***************************/
00575 
00576 int evaluate_straight_lines_complete ( board_map input_board, int color );
00577 int evaluate_diagonal_lines_complete ( board_map input_board, int color );
00578 int evaluate_straight_lines_incomplete ( board_map input_board, int color );
00579 int evaluate_diagonal_lines_incomplete ( board_map input_board, int color );
00580 
00581 
00582 /************/
00584 /************/
00585 
00586 int zero_one_random ( void );
00587 int random_number ( int N );
00588 void init_opening_library ( void );
00589 char *find_board_state_ident ( void );
00590 int load_opening_library_file ( char *filename );
00591 
00592 /*                                                                      */
00593 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
00594 /*                     end of computation.h                             */
00595 /************************************************************************/

Generated on Mon May 23 01:16:01 2005 by doxygen 1.3.2