Clarify difference between king zone and adjacent zone
authorMarco Costalba <mcostalba@gmail.com>
Thu, 25 Sep 2008 13:08:41 +0000 (15:08 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 26 Sep 2008 03:54:49 +0000 (05:54 +0200)
There are subtle differences in the king evaluation
that should be clear to avoid misunderstandings.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/evaluate.cpp
src/evaluate.h

index 89b074eb2f16a63b1594e97da5b107f27f616e9a..3f95f0d32a253598e57073721efa2df70f1df67c 100644 (file)
@@ -501,9 +501,11 @@ void init_eval(int threads) {
 /// quit_eval() releases heap-allocated memory at program termination.
 
 void quit_eval() {
-  for(int i = 0; i < THREAD_MAX; i++) {
-    delete PawnTable[i];
-    delete MaterialTable[i];
+
+  for (int i = 0; i < THREAD_MAX; i++)
+  {
+      delete PawnTable[i];
+      delete MaterialTable[i];
   }
 }
 
@@ -542,11 +544,11 @@ namespace {
     // King attack
     if (b & ei.kingZone[us])
     {
-      ei.kingAttackersCount[us]++;
-      ei.kingAttackersWeight[us] += AttackWeight;
-      Bitboard bb = (b & ei.attackedBy[them][KING]);
-      if (bb)
-          ei.kingZoneAttacksCount[us] += count_1s_max_15(bb);
+        ei.kingAttackersCount[us]++;
+        ei.kingAttackersWeight[us] += AttackWeight;
+        Bitboard bb = (b & ei.attackedBy[them][KING]);
+        if (bb)
+            ei.kingAdjacentZoneAttacksCount[us] += count_1s_max_15(bb);
     }
 
     // Mobility
@@ -717,7 +719,7 @@ namespace {
     Color them = opposite_color(us);
     if(p.queen_count(them) >= 1 && ei.kingAttackersCount[them] >= 2
        && p.non_pawn_material(them) >= QueenValueMidgame + RookValueMidgame
-       && ei.kingZoneAttacksCount[them]) {
+       && ei.kingAdjacentZoneAttacksCount[them]) {
 
       // Is it the attackers turn to move?
       bool sente = (them == p.side_to_move());
@@ -738,7 +740,7 @@ namespace {
       // quality of the pawn shelter.
       int attackUnits =
         Min((ei.kingAttackersCount[them] * ei.kingAttackersWeight[them]) / 2, 25)
-        + (ei.kingZoneAttacksCount[them] + count_1s_max_15(undefended)) * 3
+        + (ei.kingAdjacentZoneAttacksCount[them] + count_1s_max_15(undefended)) * 3
         + InitKingDanger[relative_square(us, s)] - shelter / 32;
 
       // Analyse safe queen contact checks:
index 0d59a754f2173323671dc16e5f58edbeb7b19068..05183a0a5ccb5973fcf917f130c9a04023df04f4 100644 (file)
@@ -65,22 +65,23 @@ struct EvalInfo {
   // f7, g7, h7, f6, g6 and h6.
   Bitboard kingZone[2];
 
-  // kingAttackersCount[color] is the number of pieces of the given color which
-  // attack a square adjacent to the enemy king.
+  // kingAttackersCount[color] is the number of pieces of the given color
+  // which attack a square in the kingZone of the enemy king.
   int kingAttackersCount[2];
 
   // kingAttackersWeight[color] is the sum of the "weight" of the pieces of the
-  // given color which attack a square adjacent to the enemy king.  The weights
-  // of the individual piece types are given by the variables QueenAttackWeight,
-  // RookAttackWeight, BishopAttackWeight and KnightAttackWeight in evaluate.cpp
+  // given color which attack a square in the kingZone of the enemy king. The
+  // weights of the individual piece types are given by the variables
+  // QueenAttackWeight, RookAttackWeight, BishopAttackWeight and
+  // KnightAttackWeight in evaluate.cpp
   int kingAttackersWeight[2];
 
-  // kingZoneAttacksCount[color] is the number of attacks to squares directly
-  // adjacent to the king of the given color.  Pieces which attack more
-  // than one square are counted multiple times.  For instance, if black's
+  // kingAdjacentZoneAttacksCount[color] is the number of attacks to squares
+  // directly adjacent to the king of the given color. Pieces which attack
+  // more than one square are counted multiple times. For instance, if black's
   // king is on g8 and there's a white knight on g5, this knight adds
-  // 2 to kingZoneAttacksCount[BLACK].
-  int kingZoneAttacksCount[2];
+  // 2 to kingAdjacentZoneAttacksCount[BLACK].
+  int kingAdjacentZoneAttacksCount[2];
 
   // mateThreat[color] is a move for the given side which gives a direct mate.
   Move mateThreat[2];