Suppress bad gatings in variant seirawan
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 17 Nov 2010 14:35:45 +0000 (15:35 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Wed, 17 Nov 2010 14:35:45 +0000 (15:35 +0100)
For moves done by the engine, the QS score after gating is compared to
the original score of the move (which did not consider gating), and if
it is much lower, the gating is cancelled.

fairymax.c

index 205e89b..85783a1 100644 (file)
@@ -226,7 +226,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
           Fifty = t|p<3?0:Fifty+1;\r
           sp=ps;\r
           if(!(u&32)&PromPiece&(K&112)==(k?0:112))\r
-           prom=b[K]=39+k-PromPiece,J++,pl[k+14-PromPiece]--; /* gating    */\r
+           prom=b[K]=39+k-PromPiece,J+=333,pl[k+14-PromPiece]--; /* gating    */\r
                      return l;}                /*   & not in check, signal */\r
          v=m;                                  /* (prevent fail-lows on    */\r
         }                                      /*   K-capt. replies)       */\r
@@ -550,6 +550,8 @@ int main(int argc, char **argv)
                         N=0;K=I;\r
                         if (D(Side,-I,I,Q,O,LL|S,3)==I) {\r
                             Side ^= BLACK^WHITE;\r
+                            if(b[K]&&Score+D(Side,-I,I,Q,2*S,2*S,2)>S)\r
+                                prom=b[K]=0,J-=333,pl[30-Side-PromPiece]++; /* undo bad gating */\r
                             if(UnderProm>=0 && UnderProm != L)\r
                             {    printf("tellics I hate under-promotions!\n");\r
                                  printf("resign { underpromotion } \n");\r