From: Marco Costalba Date: Thu, 25 Sep 2008 13:08:41 +0000 (+0200) Subject: Clarify difference between king zone and adjacent zone X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=2e3faae067e31d79f9157074c9e37f4631b8d59f Clarify difference between king zone and adjacent zone There are subtle differences in the king evaluation that should be clear to avoid misunderstandings. Signed-off-by: Marco Costalba --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 89b074eb..3f95f0d3 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -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: diff --git a/src/evaluate.h b/src/evaluate.h index 0d59a754..05183a0a 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -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];