Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Knowledge

Author: Sergei S. Markoff

Date: 23:57:50 09/26/04

Go up one level in this thread


>     But you don't give a draw (0) score here. And what sergie is talking
>about is giving a 0 score.

Oh, no-no. I'm using dividing/adidtions, because not all of this positions are
really drawn.

I have a lot of knowledge like that. It's "inexact" knowledge.



==== begin ====

// remark: c0 is current evaluation.
// getevalq -- special function to determine if king can't stop the pawn
// returns 1 if it can't stop it;

const int b_pawn_compensation[8]={0,100,100,90,75,55,35,0};
const int b_pawn_compensation_out[8]={0,90,90,70,45,25,10,0};

const int pawn_compensation[8]={0,95,95,70,45,30,15,0};
const int pawn_compensation_out[8]={0,60,60,35,15,7,3,0};

int ThreePawnsEval(int c0)
{
 if(!passed_b&&!passed_w)
 {
  if(NumOfPieces[WHITE]==NumOfPieces[BLACK])
   if((Majors[WHITE]&&Minors[WHITE])||(Minors[WHITE]>1))
    if(Majors[WHITE]==Majors[BLACK])
    {
     if(NumberOfPawns[WHITE]>NumberOfPawns[BLACK])
     {
      FIELD pawn_pos=FirstOne(Pawns[WHITE]);
      int
out_of_square=getevalq(SideToMove,pawn_pos,KingPos[WHITE],KingPos[BLACK]);

      if(Bishops[BLACK])
      {
       if(out_of_square)
       {
        c0+=b_pawn_compensation_out[N_HOR(pawn_pos)];
        if(c0>-13) c0=-12+(c0>>3);
       }
        else
       {
        c0+=b_pawn_compensation[N_HOR(pawn_pos)];
        if(c0>-13) c0=-12+(c0>>3);
       }
      }
       else
      {
       if(out_of_square)
       {
        c0+=pawn_compensation_out[N_HOR(pawn_pos)];
        if(c0>-13) c0=-12+(c0>>3);
       }
        else
       {
        c0+=pawn_compensation[N_HOR(pawn_pos)];
        if(c0>-13) c0=-12+(c0>>3);
       }
      }
     }
      else
     {
      FIELD pawn_pos=LastOne(Pawns[BLACK]);
      int
out_of_square=getevalq(ChangeSide(SideToMove),63-pawn_pos,63-KingPos[BLACK],63-KingPos[WHITE]);

      if(Bishops[WHITE])
      {
       if(out_of_square)
       {
        c0-=b_pawn_compensation_out[7-N_HOR(pawn_pos)];
        if(c0<13) c0=12+(c0>>3);
       }
        else
       {
        c0-=b_pawn_compensation[7-N_HOR(pawn_pos)];
        if(c0<13) c0=12+(c0>>3);
       }
      }
       else
      {
       if(out_of_square)
       {
        c0-=pawn_compensation_out[7-N_HOR(pawn_pos)];
        if(c0<13) c0=12+(c0>>3);
       }
        else
       {
        c0-=pawn_compensation[7-N_HOR(pawn_pos)];
        if(c0<13) c0=12+(c0>>3);
       }
      }
     }
    }
 }

 return (c0);
}

int OnePawnEval(int c0)
{
 if(NumOfPieces[WHITE]==NumOfPieces[BLACK])
 if(Majors[WHITE]==Majors[BLACK])
 {
  if((Majors[WHITE]&&Minors[WHITE])||(Minors[WHITE]>1))
  {
   if(NumberOfPawns[WHITE])
   {
    FIELD pawn_pos=LastOne(Pawns[WHITE]);
    int
out_of_square=getevalq(SideToMove,pawn_pos,KingPos[WHITE],KingPos[BLACK]);

    if(Bishops[BLACK])
    {
     if(out_of_square)
     {
      c0+=b_pawn_compensation_out[N_HOR(pawn_pos)];
      if(c0>-13) c0=-12+(c0>>3);
     }
      else
     {
      c0+=b_pawn_compensation[N_HOR(pawn_pos)];
      if(c0>-13) c0=-12+(c0>>3);
     }
    }
     else
    {
     if(out_of_square)
     {
      c0+=pawn_compensation_out[N_HOR(pawn_pos)];
      if(c0>-13) c0=-12+(c0>>3);
     }
      else
     {
      c0+=pawn_compensation[N_HOR(pawn_pos)];
      if(c0>-13) c0=-12+(c0>>3);
     }
    }
   }
    else
   {
    FIELD pawn_pos=LastOne(Pawns[BLACK]);
    int
out_of_square=getevalq(ChangeSide(SideToMove),63-pawn_pos,63-KingPos[BLACK],63-KingPos[WHITE]);

    if(Bishops[WHITE])
    {
     if(out_of_square)
     {
      c0-=b_pawn_compensation_out[7-N_HOR(pawn_pos)];
      if(c0<13) c0=12+(c0>>3);
     }
      else
     {
      c0-=b_pawn_compensation[7-N_HOR(pawn_pos)];
      if(c0<13) c0=12+(c0>>3);
     }
    }
     else
    {
     if(out_of_square)
     {
      c0-=pawn_compensation_out[7-N_HOR(pawn_pos)];
      if(c0<13) c0=12+(c0>>3);
     }
      else
     {
      c0-=pawn_compensation[7-N_HOR(pawn_pos)];
      if(c0<13) c0=12+(c0>>3);
     }
    }
   }
  }
   else if(NumOfPieces[WHITE]&&(NumOfPieces[WHITE]<9))
  {
   if(pawns_w)
   {
    FIELD sq=FirstOne(Pawns[WHITE]);
    if(preventsw[sq]&KingSquare[BLACK]) c0>>=1;
   }
    else
   {
    FIELD sq=LastOne(Pawns[BLACK]);
    if(preventsb[sq]&KingSquare[WHITE]) c0>>=1;
   }
  }
 }

 return (c0);
}

...

  {
   int total_pawns=NumberOfPawns[WHITE]+NumberOfPawns[BLACK];
   if(total_pawns==3) c0=ThreePawnsEval(c0);
    else if(total_pawns==1) c0=OnePawnEval(c0);
  }

===== end =====



This page took 0.03 seconds to execute

Last modified: Thu, 07 Jul 11 08:48:38 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.