Use linear interpolation with game phase
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 10 Apr 2014 16:59:55 +0000 (18:59 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 10 Apr 2014 17:59:25 +0000 (19:59 +0200)
The weight of anticipated promotion gain now decreases linearly with
filling of the board, rather than quadratically. As a compensation,
it now starts at 23% for a full board, rather than 8%.

hachu.c

diff --git a/hachu.c b/hachu.c
index d2c6ea8..ff76544 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -878,7 +878,7 @@ SetUp(char *array, int var)
        p[i].pst = p[i].value <= 150 ? PST_ADVANCE : PST_NEUTRAL; // light steppers advance\r
     if(j > 0 && p[i].bulk == 6) p[i].pst = PST_WFLYER, p[i].mobWeight = 4; // SM defends zone\r
     if((j = p[i].promo) > 0 && g)\r
-      p[i].promoGain = (p[j].value - p[i].value - g)*1.25, p[i].value = p[j].value - g;\r
+      p[i].promoGain = (p[j].value - p[i].value - g)*0.9, p[i].value = p[j].value - g;\r
     else p[i].promoGain = 0;\r
     board[p[i].pos] = i;\r
     rootEval += p[i].value + PST[p[i].pst + p[i].pos];\r
@@ -893,7 +893,7 @@ SetUp(char *array, int var)
     if(j > 0 && p[i].pst == PST_WJUMPER) p[i].pst = PST_BJUMPER;  // use black pre-prom bonus\r
     if(j > 0 && p[i].bulk == 6) p[i].pst = PST_BFLYER, p[i].mobWeight = 4; // SM defends zone\r
     if((j = p[i].promo) > 0 && g)\r
-      p[i].promoGain = (p[j].value - p[i].value - g)*1.25, p[i].value = p[j].value - g;\r
+      p[i].promoGain = (p[j].value - p[i].value - g)*0.9, p[i].value = p[j].value - g;\r
     else p[i].promoGain = 0;\r
     if(i == kylin[BLACK]) p[i].promoGain = 1.25*KYLIN, p[i].value += KYLIN;\r
     board[p[i].pos] = i;\r
@@ -1727,7 +1727,7 @@ Evaluate (int difEval)
     }\r
 #endif\r
 \r
-  return difEval - (filling*filling*promoDelta >> 16) + (stm ? score : -score);\r
+  return difEval - (filling*promoDelta >> 8) + (stm ? score : -score);\r
 }\r
 \r
 inline void\r