Subversion Repositories Games.Chess Giants

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "chess.h"
  2. /* *INDENT-OFF* */
  3. /*
  4.  ************************************************************
  5.  *                                                          *
  6.  *  Pawn scoring terms.                                     *
  7.  *                                                          *
  8.  ************************************************************
  9.  */
  10. const int pawn_can_promote          = 525;
  11. const int pawn_file_width           =   8;
  12. const int pawn_unsupported[2]       = { -8, -4 };
  13. const int pawn_defects[2][8] = {
  14.   { 0, 0, 0, 1, 2, 3, 0, 0 },               /* [black][8] */
  15.   { 0, 0, 3, 2, 1, 0, 0, 0 }                /* [white][8] */
  16. };
  17. const int passed_pawn[8] = { 0, 0, 0, 2, 6, 12, 21, 0 };
  18. const int passed_pawn_base[2] = { 4, 8 };
  19. const int passed_pawn_free_advance = 8;
  20. const int passed_pawn_free_advance_1 = 5;
  21. const int passed_pawn_defended = 3;
  22. const int passed_pawn_defended_1 = 2;
  23. const int passed_pawn_candidate[2][8] = {
  24.   { 0, 2, 2,  6, 13, 32, 0, 0 },            /* [mg][rank] */
  25.   { 0, 5, 5, 11, 27, 65, 0, 0 }             /* [eg][rank] */
  26. };
  27. const int pawn_doubled[2][8] = {
  28.   { 5,  8,  9,  9,  9,  9,  8,  5},
  29.   {17, 19, 19, 19, 19, 19, 19, 17}
  30. };
  31. const int pawn_isolated[2][8] = {
  32.   {14, 21, 23, 23, 23, 23, 21, 14},
  33.   {10, 14, 16, 16, 16, 16, 14, 10}
  34. };
  35. const int pawn_backward[2][8] = {
  36.   {12, 17, 19, 19, 19, 19, 17, 12},
  37.   { 8, 11, 16, 16, 16, 16, 11,  8}
  38. };
  39. const int pawn_connected[8][8] = {
  40.   {  0,   0,   0,   0,   0,   0,   0,   0},
  41.   {  0,   1,   1,   2,   2,   1,   1,   0},
  42.   {  1,   2,   2,   3,   3,   2,   2,   1},
  43.   {  3,   5,   5,   6,   6,   5,   5,   3},
  44.   { 11,  13,  13,  14,  14,  13,  13,  11},
  45.   { 25,  27,  27,  28,  28,  27,  27,  25},
  46.   { 48,  52,  52,  53,  53,  52,  52,  48},
  47.   {  0,   0,   0,   0,   0,   0,   0,   0}
  48. };
  49. const int pval[2][2][64] = {
  50.   {{ 0,   0,   0,   0,   0,   0,   0,   0,
  51.    -10,   0,   0,   0,   0,   0,   0, -10,
  52.    -10,   0,   0,   0,   0,   0,   0, -10,
  53.    -10,   0,   6,  10,  10,   6,   0, -10,  /* [mg][black][64] */
  54.    -10,   0,  10,  21,  21,  10,   0, -10,
  55.    -10,   0,   7,  11,  11,   7,   0, -10,
  56.    -10,   0,   0,   0,   0,   0,   0, -10,
  57.      0,   0,   0,   0,   0,   0,   0,   0 },
  58.  
  59.    { 0,   0,   0,   0,   0,   0,   0,   0,
  60.    -10,   0,   0,   0,   0,   0,   0, -10,
  61.    -10,   0,   7,  11,  11,   7,   0, -10,
  62.    -10,   0,  10,  21,  21,  10,   0, -10,  /* [mg][white][64] */
  63.    -10,   0,   6,  10,  10,   6,   0, -10,
  64.    -10,   0,   0,   0,   0,   0,   0, -10,
  65.    -10,   0,   0,   0,   0,   0,   0, -10,
  66.      0,   0,   0,   0,   0,   0,   0,   0 }},
  67.  
  68.   {{ 0,   0,   0,   0,   0,   0,   0,   0,
  69.     -4,   1,   1,   1,   1,   1,   1,  -4,
  70.     -4,   1,   1,   1,   1,   1,   1,  -4,
  71.     -4,   1,   4,   6,   6,   4,   1,  -4,  /* [eg][black][64] */
  72.     -4,   1,   6,  12,  12,   6,   1,  -4,
  73.     -4,   1,   5,   7,   7,   5,   1,  -4,
  74.     -4,   1,   1,   1,   1,   1,   1,  -4,
  75.      0,   0,   0,   0,   0,   0,   0,   0 },
  76.  
  77.    { 0,   0,   0,   0,   0,   0,   0,   0,
  78.     -4,   1,   1,   1,   1,   1,   1,  -4,
  79.     -4,   1,   5,   7,   7,   5,   1,  -4,
  80.     -4,   1,   6,  12,  12,   6,   1,  -4,  /* [eg][white][64] */
  81.     -4,   1,   4,   6,   6,   4,   1,  -4,
  82.     -4,   1,   1,   1,   1,   1,   1,  -4,
  83.     -4,   1,   1,   1,   1,   1,   1,  -4,
  84.      0,   0,   0,   0,   0,   0,   0,   0 }}
  85. };
  86. /*
  87.  ************************************************************
  88.  *                                                          *
  89.  *  Knight scoring terms.                                   *
  90.  *                                                          *
  91.  ************************************************************
  92.  */
  93. const int king_tropism_n[8] = { 3, 3, 3, 2, 1, 0, 0, 0 };
  94. const int knight_outpost[2][64] = {
  95.   { 0, 0, 0, 0, 0, 0, 0, 0,
  96.     0, 0, 0, 0, 0, 0, 0, 0,
  97.     0, 1, 4, 4, 4, 4, 1, 0,
  98.     0, 2, 6, 8, 8, 6, 2, 0,
  99.     0, 1, 4, 4, 4, 4, 1, 0,   /* [black][64] */
  100.     0, 0, 0, 0, 0, 0, 0, 0,
  101.     0, 0, 0, 0, 0, 0, 0, 0,
  102.     0, 0, 0, 0, 0, 0, 0, 0 },
  103.  
  104.   { 0, 0, 0, 0, 0, 0, 0, 0,
  105.     0, 0, 0, 0, 0, 0, 0, 0,
  106.     0, 0, 0, 0, 0, 0, 0, 0,
  107.     0, 1, 4, 4, 4, 4, 1, 0,
  108.     0, 2, 6, 8, 8, 6, 2, 0,   /* [white][64] */
  109.     0, 1, 4, 4, 4, 4, 1, 0,
  110.     0, 0, 0, 0, 0, 0, 0, 0,
  111.     0, 0, 0, 0, 0, 0, 0, 0 }
  112. };
  113. const int nval[2][2][64] = {
  114.   {{ -41, -29, -27, -15, -15, -27, -29, -41,
  115.       -9,   4,  14,  20,  20,  14,   4,  -9,
  116.       -7,  10,  23,  29,  29,  23,  10,  -7,
  117.       -5,  12,  25,  32,  32,  25,  12,  -5,  /* [mg][black][64] */
  118.       -5,  10,  23,  28,  28,  23,  10,  -5,
  119.       -7,  -2,  19,  19,  19,  19,  -2,  -7,
  120.       -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
  121.      -31, -29, -27, -25, -25, -27, -29, -31 },
  122.  
  123.    { -31, -29, -27, -25, -25, -27, -29, -31,
  124.       -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
  125.       -7,  -2,  19,  19,  19,  19,  -2,  -7,
  126.       -5,  10,  23,  28,  28,  23,  10,  -5,  /* [mg][white][64] */
  127.       -5,  12,  25,  32,  32,  25,  12,  -5,
  128.       -7,  10,  23,  29,  29,  23,  10,  -7,
  129.       -9,   4,  14,  20,  20,  14,   4,  -9,
  130.      -41, -29, -27, -15, -15, -27, -29, -41 }},
  131.  
  132.   {{ -41, -29, -27, -15, -15, -27, -29, -41,
  133.       -9,   4,  14,  20,  20,  14,   4,  -9,
  134.       -7,  10,  23,  29,  29,  23,  10,  -7,
  135.       -5,  12,  25,  32,  32,  25,  12,  -5,  /* [eg][black][64] */
  136.       -5,  10,  23,  28,  28,  23,  10,  -5,
  137.       -7,  -2,  19,  19,  19,  19,  -2,  -7,
  138.       -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
  139.      -31, -29, -27, -25, -25, -27, -29, -31 },
  140.  
  141.    { -31, -29, -27, -25, -25, -27, -29, -31,
  142.       -9,  -6,  -2,   0,   0,  -2,  -6,  -9,
  143.       -7,  -2,  19,  19,  19,  19,  -2,  -7,
  144.       -5,  10,  23,  28,  28,  23,  10,  -5,  /* [eg][white][64] */
  145.       -5,  12,  25,  32,  32,  25,  12,  -5,
  146.       -7,  10,  23,  29,  29,  23,  10,  -7,
  147.       -9,   4,  14,  20,  20,  14,   4,  -9,
  148.      -41, -29, -27, -15, -15, -27, -29, -41 }}
  149. };
  150. /*
  151.  ************************************************************
  152.  *                                                          *
  153.  *  Bishop scoring terms.                                   *
  154.  *                                                          *
  155.  ************************************************************
  156.  */
  157. const int bishop_trapped            = 174;
  158. const int bishop_pawns_on_color[2]  = { 4, 6 };
  159. const int bishop_wing_pawns[2]      = { 18, 36 };
  160. const int bishop_pair[2]            = { 38, 56 };
  161. const int king_tropism_b[8] = { 2, 2, 2, 1, 0, 0, 0, 0 };
  162. const int bishop_outpost[2][64] = {
  163.   { 0, 0, 0, 0, 0, 0, 0, 0,
  164.     0, 0, 0, 0, 0, 0, 0, 0,
  165.     0, 1, 3, 3, 3, 3, 1, 0,
  166.     0, 3, 5, 5, 5, 5, 3, 0,
  167.     0, 1, 2, 2, 2, 2, 1, 0,   /* [black][64] */
  168.     0, 0, 1, 1, 1, 1, 0, 0,
  169.     0, 0, 0, 0, 0, 0, 0, 0,
  170.     0, 0, 0, 0, 0, 0, 0, 0 },
  171.  
  172.   { 0, 0, 0, 0, 0, 0, 0, 0,
  173.     0, 0, 0, 0, 0, 0, 0, 0,
  174.     0, 0, 1, 1, 1, 1, 0, 0,
  175.     0, 1, 2, 2, 2, 2, 1, 0,
  176.     0, 3, 5, 5, 5, 5, 3, 0,   /* [white][64] */
  177.     0, 1, 3, 3, 3, 3, 1, 0,
  178.     0, 0, 0, 0, 0, 0, 0, 0,
  179.     0, 0, 0, 0, 0, 0, 0, 0 }
  180. };
  181. const int bval[2][2][64] = {
  182.   {{  0,   0,   0,   0,   0,   0,   0,   0,
  183.       0,   4,   4,   4,   4,   4,   4,   0,
  184.       0,   4,   8,   8,   8,   8,   4,   0,
  185.       0,   4,   8,  12,  12,   8,   4,   0,
  186.       0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][black][64] */
  187.       0,   4,   8,   8,   8,   8,   4,   0,
  188.       0,   4,   4,   4,   4,   4,   4,   0,
  189.     -15, -15, -15, -15, -15, -15, -15, -15},
  190.  
  191.    {-15, -15, -15, -15, -15, -15, -15, -15,
  192.       0,   4,   4,   4,   4,   4,   4,   0,
  193.       0,   4,   8,   8,   8,   8,   4,   0,
  194.       0,   4,   8,  12,  12,   8,   4,   0,
  195.       0,   4,   8,  12,  12,   8,   4,   0,  /* [mg][white][64] */
  196.       0,   4,   8,   8,   8,   8,   4,   0,
  197.       0,   4,   4,   4,   4,   4,   4,   0,
  198.       0,   0,   0,   0,   0,   0,   0,   0}},
  199.  
  200.   {{  0,   0,   0,   0,   0,   0,   0,   0,
  201.       0,   4,   4,   4,   4,   4,   4,   0,
  202.       0,   4,   8,   8,   8,   8,   4,   0,
  203.       0,   4,   8,  12,  12,   8,   4,   0,
  204.       0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][black][64] */
  205.       0,   4,   8,   8,   8,   8,   4,   0,
  206.       0,   4,   4,   4,   4,   4,   4,   0,
  207.     -15, -15, -15, -15, -15, -15, -15, -15},
  208.  
  209.    {-15, -15, -15, -15, -15, -15, -15, -15,
  210.       0,   4,   4,   4,   4,   4,   4,   0,
  211.       0,   4,   8,   8,   8,   8,   4,   0,
  212.       0,   4,   8,  12,  12,   8,   4,   0,
  213.       0,   4,   8,  12,  12,   8,   4,   0,  /* [eg][white][64] */
  214.       0,   4,   8,   8,   8,   8,   4,   0,
  215.       0,   4,   4,   4,   4,   4,   4,   0,
  216.       0,   0,   0,   0,   0,   0,   0,   0}}
  217. };
  218. /*
  219.  ************************************************************
  220.  *                                                          *
  221.  *  Rook scoring terms.                                     *
  222.  *                                                          *
  223.  ************************************************************
  224.  */
  225. const int rook_on_7th[2]          = { 25, 35 };
  226. const int rook_connected_7th[2]   = {  6, 10 };
  227. const int rook_open_file[2]       = { 35, 20 };
  228. const int rook_half_open_file[2]  = { 10, 10 };
  229. const int king_tropism_r[8] = { 4, 4, 3, 2, 1, 1, 1, 1 };
  230. /*
  231.  ************************************************************
  232.  *                                                          *
  233.  *  Queen scoring terms.                                    *
  234.  *                                                          *
  235.  ************************************************************
  236.  */
  237. const int king_tropism_q[8] = { 6, 6, 5, 4, 3, 2, 2, 2 };
  238. const int qval[2][2][64] = {
  239.    {{ 0,   0,   0,   0,   0,   0,   0,   0,
  240.       0,   0,   4,   4,   4,   4,   0,   0,
  241.       0,   4,   4,   6,   6,   4,   4,   0,
  242.       0,   4,   6,   8,   8,   6,   4,   0,
  243.       0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][black][64] */
  244.       0,   4,   4,   6,   6,   4,   4,   0,
  245.       0,   0,   4,   4,   4,   4,   0,   0,
  246.       0,   0,   0,   0,   0,   0,   0,   0 },
  247.  
  248.     { 0,   0,   0,   0,   0,   0,   0,   0,
  249.       0,   0,   4,   4,   4,   4,   0,   0,
  250.       0,   4,   4,   6,   6,   4,   4,   0,
  251.       0,   4,   6,   8,   8,   6,   4,   0,
  252.       0,   4,   6,   8,   8,   6,   4,   0,   /* [mg][white][64] */
  253.       0,   4,   4,   6,   6,   4,   4,   0,
  254.       0,   0,   4,   4,   4,   4,   0,   0,
  255.       0,   0,   0,   0,   0,   0,   0,   0 }},
  256.  
  257.    {{ 0,   0,   0,   0,   0,   0,   0,   0,
  258.       0,   0,   4,   4,   4,   4,   0,   0,
  259.       0,   4,   4,   6,   6,   4,   4,   0,
  260.       0,   4,   6,   8,   8,   6,   4,   0,
  261.       0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][black][64] */
  262.       0,   4,   4,   6,   6,   4,   4,   0,
  263.       0,   0,   4,   4,   4,   4,   0,   0,
  264.       0,   0,   0,   0,   0,   0,   0,   0 },
  265.  
  266.     { 0,   0,   0,   0,   0,   0,   0,   0,
  267.       0,   0,   4,   4,   4,   4,   0,   0,
  268.       0,   4,   4,   6,   6,   4,   4,   0,
  269.       0,   4,   6,   8,   8,   6,   4,   0,
  270.       0,   4,   6,   8,   8,   6,   4,   0,   /* [eg][white][64] */
  271.       0,   4,   4,   6,   6,   4,   4,   0,
  272.       0,   0,   4,   4,   4,   4,   0,   0,
  273.       0,   0,   0,   0,   0,   0,   0,   0 }}
  274. };
  275. /*
  276.  ************************************************************
  277.  *                                                          *
  278.  *  King scoring terms.                                     *
  279.  *                                                          *
  280.  ************************************************************
  281.  */
  282. int king_safety[16][16];
  283. const int king_safety_mate_threat = 600;
  284. const int king_king_tropism       =  10;
  285. const int open_file[8]            = { 6, 5, 4, 4, 4, 4, 5, 6 };
  286. const int half_open_file[8] = { 4, 4, 3, 3, 3, 3, 4, 4 };
  287. const int safety_vector[16] = {
  288.    0,  7, 14, 21, 28, 35, 42,  49,
  289.   56, 63, 70, 77, 84, 91, 98, 105
  290. };
  291. const int tropism_vector[16] = {
  292.    0,  1,  2,  3,   4,   5,  11,  20,
  293.   32, 47, 65, 86, 110, 137, 167, 200
  294. };
  295. const int kval[2][64] = {
  296.    {-40, -40, -40, -40, -40, -40, -40, -40,
  297.     -40, -10, -10, -10, -10, -10, -10, -40,
  298.     -40, -10,  60,  60,  60,  60, -10, -40,
  299.     -40, -10,  60,  60,  60,  60, -10, -40,
  300.     -40, -10,  40,  40,  40,  40, -10, -40,   /* [black][64] */
  301.     -40, -10,  20,  20,  20,  20, -10, -40,
  302.     -40, -10, -10, -10, -10, -10, -10, -40,
  303.     -40, -40, -40, -40, -40, -40, -40, -40 },
  304.  
  305.    {-40, -40, -40, -40, -40, -40, -40, -40,
  306.     -40, -10, -10, -10, -10, -10, -10, -40,
  307.     -40, -10,  20,  20,  20,  20, -10, -40,
  308.     -40, -10,  40,  40,  40,  40, -10, -40,
  309.     -40, -10,  60,  60,  60,  60, -10, -40,   /* [white][64] */
  310.     -40, -10,  60,  60,  60,  60, -10, -40,
  311.     -40, -10, -10, -10, -10, -10, -10, -40,
  312.     -40, -40, -40, -40, -40, -40, -40, -40 }
  313. };
  314. /*
  315.  ************************************************************
  316.  *                                                          *
  317.  *  Miscellaneous evaluation constants.                     *
  318.  *                                                          *
  319.  ************************************************************
  320.  */
  321. const int bad_trade = 90;
  322. const int dark_corner[2] =  { FILEA, FILEH };
  323. const int light_corner[2] = { FILEH, FILEA };
  324. const int direction[2] =    { -8, 8 };
  325. const char square_color[64] = {
  326.   1, 0, 1, 0, 1, 0, 1, 0,
  327.   0, 1, 0, 1, 0, 1, 0, 1,
  328.   1, 0, 1, 0, 1, 0, 1, 0,
  329.   0, 1, 0, 1, 0, 1, 0, 1,
  330.   1, 0, 1, 0, 1, 0, 1, 0,
  331.   0, 1, 0, 1, 0, 1, 0, 1,
  332.   1, 0, 1, 0, 1, 0, 1, 0,
  333.   0, 1, 0, 1, 0, 1, 0, 1
  334. };
  335. /*
  336.  ************************************************************
  337.  *                                                          *
  338.  *  Opening phase development terms.                        *
  339.  *                                                          *
  340.  ************************************************************
  341.  */
  342. const int development_thematic      =     12;
  343. const int development_losing_castle =     20;
  344. const int development_not_castled   =     20;
  345. const int wtm_bonus[2]              = { 5, 8 };
  346. /*
  347.  ************************************************************
  348.  *                                                          *
  349.  *  Skill command constants (should not be changed)         *
  350.  *                                                          *
  351.  ************************************************************
  352.  */
  353. uint64_t burner[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  354. const int burnc[10] = {128000, 64000, 32400, 15200, 7600,
  355.                          3800,  1960,  1040,   480,  140};
  356. /*
  357.  ************************************************************
  358.  *                                                          *
  359.  *  Mop-up scoring terms.  These are used in pawnless end-  *
  360.  *  games to mate the weaker side.  There is a special PST  *
  361.  *  B+N vs lone king to make it easier to win with very     *
  362.  *  shallow search depths.                                  *
  363.  *                                                          *
  364.  ************************************************************
  365.  */
  366. const char b_n_mate_dark_squares[64] = {
  367.   99, 90, 80, 70, 60, 50, 40, 30,
  368.   90, 80, 70, 60, 50, 40, 30, 40,
  369.   80, 70, 60, 50, 40, 30, 40, 50,
  370.   70, 60, 50, 40, 30, 40, 50, 60,
  371.   60, 50, 40, 30, 40, 50, 60, 70,
  372.   50, 40, 30, 40, 50, 60, 70, 80,
  373.   40, 30, 40, 50, 60, 70, 80, 90,
  374.   30, 40, 50, 60, 70, 80, 90, 99
  375. };
  376. const char b_n_mate_light_squares[64] = {
  377.   30, 40, 50, 60, 70, 80, 90, 99,
  378.   40, 30, 40, 50, 60, 70, 80, 90,
  379.   50, 40, 30, 40, 50, 60, 70, 80,
  380.   60, 50, 40, 30, 40, 50, 60, 70,
  381.   70, 60, 50, 40, 30, 40, 50, 60,
  382.   80, 70, 60, 50, 40, 30, 40, 50,
  383.   90, 80, 70, 60, 50, 40, 30, 40,
  384.   99, 90, 80, 70, 60, 50, 40, 30
  385. };
  386. const int mate[64] = {
  387.   200, 180, 160, 140, 140, 160, 180, 200,
  388.   180, 160, 140, 120, 120, 140, 160, 180,
  389.   160, 140, 120, 100, 100, 120, 140, 160,
  390.   140, 120, 100, 100, 100, 100, 120, 140,
  391.   140, 120, 100, 100, 100, 100, 120, 140,
  392.   160, 140, 120, 100, 100, 120, 140, 160,
  393.   180, 160, 140, 120, 120, 140, 160, 180,
  394.   200, 180, 160, 140, 140, 160, 180, 200
  395. };
  396. /* *INDENT-ON* */
  397.