Properly calculate material eval in asymmetric setups
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 7 Nov 2010 20:46:33 +0000 (21:46 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sun, 7 Nov 2010 21:00:24 +0000 (22:00 +0100)
InitGame assumed that Q=0 in the opening position, but with different
armies this needs not be true. Now it is properly calculated. In the
calculation of R it as also no longer assumed that piece 3 is royal, and
spare Kings are accounted for.

fairymax.c

index be12a63..8d6a125 100644 (file)
@@ -366,8 +366,10 @@ InitEngine()
 \r
 InitGame()\r
 {\r
- int i,j;\r
+ int i,j,k=0;\r
 \r
+ Side = WHITE; Q=0; O=S;\r
+ Fifty = 0; R = 0;\r
  for(i=0;i<16*BH;i++)b[i]=0;\r
  for(i=0;i<32;i++)pl[i]=0;\r
  K=BW;W(K--)\r
@@ -377,10 +379,13 @@ InitGame()
   if(w[oo[K]] == -1)pl[oo[K]]=1;\r
   L=8;W(L--)b[16*L+K+257]=(K-BW/2)*(K-BW/2)+(L-3.5)*(L-3.5); /* center-pts table   */\r
  }                                                   /*(in unused half b[])*/\r
- Side = WHITE; Q=0; O=S;\r
- Fifty = 0; R = 0;\r
- for(i=0; i<BW; i++) if(i!=3) R += (w[oo[i]]/FAC) + (w[oo[i+16]]/FAC);\r
- UnderProm = -1; pl[WHITE] = pl[BLACK] = 2*BW;\r
+ for(i=0; i<BW; i++) {\r
+  R += abs(w[oo[i]])/FAC + abs(w[oo[i+16]])/FAC;\r
+  Q += abs(w[oo[i]]) - abs(w[oo[i+16]]) + w[1] - w[2];\r
+  if(w[oo[i]] < 0) k = w[oo[i]];\r
+ }\r
+ R -= 2*(-k/FAC);\r
+ UnderProm = -1; pl[WHITE] = pl[BLACK] = 2*BW; \r
  pm = !pl[BLACK+7] && pl[BLACK+9] && pl[WHITE+7] ? 2 : 0; // Unlike white, black has no 'Q', so promote to 9, which he does have.\r
 }\r
 \r