Increase centralization bonus of bare King
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 9 Oct 2014 16:48:22 +0000 (18:48 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 9 Oct 2014 17:04:50 +0000 (19:04 +0200)
Any bare King is detected before starting the search, by counting
pieces. Its centralization points are then multiplied by 5. In addition
null move is switched off by faking material count R = 4. This helps
a lot in Makruk KNFFK end-games. The hash table is invalidated to soften
the shock of that.
 This can only work when white and black King are defined as different
pieces, and the feature is triggered by piece 3 and 4 being royal.

fairymax.c

index 5ec3380..9b80061 100644 (file)
@@ -580,6 +580,9 @@ int main(int argc, char **argv)
                         tlim = (0.6-0.06*(BW-8))*(TimeLeft+(m-1)*TimeInc)/(m+7);\r
                         if(tlim>TimeLeft/15) tlim = TimeLeft/15;\r
                         PromPiece = 0; /* Always promote to Queen ourselves */\r
+                        for(N=K=0;K<S;K++)N+=b[K]?b[K]&16?S:1:0; /* count pieces for detecting bare King */\r
+                        if(w[3]<0&w[4]<0){if(N>>8<2)centr[4]=5;if(!(N&S-2))centr[3]=5;Z+=R>4;R=4;}\r
+printf("# %04x pieces, centr = (%d,%d)\n", N, centr[3], centr[4]);\r
                         N=0;K=I;\r
                         if(hill) centr[3] = R>20 ? 1 : 22-R;\r
                         if (D(Side,-I,I,Q,O,LL|S,3)==I) {\r
@@ -587,7 +590,7 @@ int main(int argc, char **argv)
                             m = GetTickCount() - Ticks;\r
                             printf("# times @ %u: real=%d cpu=%1.0f\n", m + Ticks, m,\r
                                       (CPUtime() - cpuT)/CLOCKS_PER_SEC);\r
-printf("promo = %d (%c) GT = %d\n", prom, prom + '`', GT); \r
+printf("# promo = %d (%c) GT = %d\n", prom, prom + '`', GT); \r
                             printf("move ");\r
                             printf("%c%c%c%c",'a'+(K&15),'0'+BH-(K>>4),\r
                                           'a'+(L&15),'0'+BH-(L>>4));\r