Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: My pawn evaluation code (Bugfix)

Author: Michel Langeveld

Date: 08:30:51 11/25/01

Go up one level in this thread


Fixed some errors in the passer code...

   //grouping rule
   //isolated pawns
   //passers
   //double and triple pawns
   bool whiteGroup = false;
   bool blackGroup = false;
   int whiteGroups = 0;
   int blackGroups = 0;
   bool whiteIsolated = false;
   bool blackIsolated = false;

   for (int i=0; i<8; i++)
   {
      if (evalStructure.whitePawnsPlace[i] > 0)
      {

         //double pawns
         if (evalStructure.whitePawnsPlace[i] == 2)
         {
              score -= PAWNDOUBLE_PENALTY;
         }
         if (evalStructure.whitePawnsPlace[i] == 3)
         {
            score -= PAWNTRIPLE_PENALTY;
         }

         //passer?
         if (evalStructure.blackPawnsPlace[i] == 0)
         {
            if (
                 (i != 0 &&
                  evalStructure.blackPawnsPlace[i-1] == 0 &&
                  evalStructure.whitePawnsPlace[i-1] > 0 &&
                  evalStructure.blackPawnsPlace[i-2] == 0) ||
                 (i != 7 &&
                  evalStructure.blackPawnsPlace[i+1] == 0 &&
                  evalStructure.whitePawnsPlace[i+1] > 0 &&
                  evalStructure.whitePawnsPlace[i+2] == 0)
               )
            {
               score += PAWNPASSER_BONUS;
            }
         }

         //grouping rule and isolated pawns
         if (whiteGroup == false)
         {
            whiteGroup = true;
            whiteGroups++;
            score -= PAWNGROUPS_PENALTY;       //pawngroup bonus
            whiteIsolated = true;
            score -= PAWNISOLATED_PENALTY;     //this pawn is isolated if nomore
follow
         }
         else
         {
            if (whiteIsolated)
            {
               whiteIsolated = false;
               score += PAWNISOLATED_PENALTY;
            }
         }
      }
      else
      {
         whiteGroup = false;
         whiteIsolated = false;
      }

      if (evalStructure.blackPawnsPlace[i] > 0)
      {
         //double pawns
         if (evalStructure.blackPawnsPlace[i] == 2)
         {
            score += PAWNDOUBLE_PENALTY;
         }
         if (evalStructure.blackPawnsPlace[i] == 3)
         {
            score += PAWNTRIPLE_PENALTY;
         }

         //passer?
         if (evalStructure.whitePawnsPlace[i] == 0)
         {
            if (
                 (i != 0 &&
                  evalStructure.whitePawnsPlace[i-1] == 0 &&
                  evalStructure.blackPawnsPlace[i-1] > 0 &&
                  evalStructure.blackPawnsPlace[i-2] == 0) ||
                 (i != 7 &&
                  evalStructure.whitePawnsPlace[i+1] == 0 &&
                  evalStructure.blackPawnsPlace[i+1] > 0 &&
                  evalStructure.blackPawnsPlace[i+2] == 0)
               )
            {
               score -= PAWNPASSER_BONUS;
            }
         }

         //grouping rule and isolated pawns
         if (blackGroup == false)
         {
            blackGroup = true;
            blackGroups++;
            score += PAWNGROUPS_PENALTY;     //pawngroup bonus
            blackIsolated = true;
            score += PAWNISOLATED_PENALTY;   //this pawn is isolated if nomore
follow
         }
         else
         {
            if (blackIsolated)
            {
               blackIsolated = false;
               score -= PAWNISOLATED_PENALTY;
            }
         }
      }
      else
      {
         blackGroup = false;
         blackIsolated = false;
      }
   }



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

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