Some code reformat in evaluate_pieces
authorMarco Costalba <mcostalba@gmail.com>
Sat, 11 May 2013 07:29:02 +0000 (09:29 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 11 May 2013 09:13:06 +0000 (11:13 +0200)
No functional change.

src/evaluate.cpp
src/pawns.h
src/types.h

index 409024f1112685bcc97e0008d0bb23ee28c38dc9..3a10acbaaaac59886ee63d093e8510127e196aef 100644 (file)
@@ -150,37 +150,23 @@ namespace {
 
   #undef S
 
-  const Score BishopPinBonus = make_score(66, 11);
-
-  // Bonus for having the side to move (modified by Joona Kiiski)
   const Score Tempo = make_score(24, 11);
 
-  // Rooks and queens on the 7th rank
-  const Score RookOn7thBonus  = make_score(11, 20);
-  const Score QueenOn7thBonus = make_score( 3,  8);
-
-  // Rooks and queens attacking pawns on the same rank
-  const Score RookOnPawnBonus  = make_score(10, 28);
-  const Score QueenOnPawnBonus = make_score( 4, 20);
-
-  // Rooks on open files (modified by Joona Kiiski)
-  const Score RookOpenFileBonus     = make_score(43, 21);
-  const Score RookHalfOpenFileBonus = make_score(19, 10);
-
-  // Penalty for rooks trapped inside a friendly king which has lost the
-  // right to castle.
-  const Value TrappedRookPenalty = Value(180);
-
-  // Penalty for bishop with pawns on the same coloured squares
-  const Score BishopPawnsPenalty = make_score(8, 12);
+  const Score BishopPinBonus         = make_score(66, 11);
+  const Score RookOn7thBonus         = make_score(11, 20);
+  const Score QueenOn7thBonus        = make_score( 3,  8);
+  const Score RookOnPawnBonus        = make_score(10, 28);
+  const Score QueenOnPawnBonus       = make_score( 4, 20);
+  const Score RookOpenFileBonus      = make_score(43, 21);
+  const Score RookHalfOpenFileBonus  = make_score(19, 10);
+  const Score BishopPawnsPenalty     = make_score(8, 12);
+  const Score UndefendedMinorPenalty = make_score(25, 10);
+  const Score TrappedRookPenalty     = make_score(90, 0);
 
   // Penalty for a bishop on a1/h1 (a8/h8 for black) which is trapped by
   // a friendly pawn on b2/g2 (b7/g7 for black). This can obviously only
   // happen in Chess960 games.
-  const Score TrappedBishopA1H1Penalty = make_score(100, 100);
-
-  // Penalty for an undefended bishop or knight
-  const Score UndefendedMinorPenalty = make_score(25, 10);
+  const Score TrappedBishopA1H1Penalty = make_score(50, 50);
 
   // The SpaceMask[Color] contains the area of the board which is considered
   // by the space evaluation. In the middle game, each side is given a bonus
@@ -535,9 +521,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
   Score evaluate_pieces(const Position& pos, EvalInfo& ei, Score& mobility, Bitboard mobilityArea) {
 
     Bitboard b;
-    Square s, ksq;
-    int mob;
-    File f;
+    Square s;
     Score score = SCORE_ZERO;
 
     const Color Them = (Us == WHITE ? BLACK : WHITE);
@@ -548,14 +532,9 @@ Value do_evaluate(const Position& pos, Value& margin) {
     while ((s = *pl++) != SQ_NONE)
     {
         // Find attacked squares, including x-ray attacks for bishops and rooks
-        if (Piece == KNIGHT || Piece == QUEEN)
-            b = pos.attacks_from<Piece>(s);
-        else if (Piece == BISHOP)
-            b = attacks_bb<BISHOP>(s, pos.pieces() ^ pos.pieces(Us, QUEEN));
-        else if (Piece == ROOK)
-            b = attacks_bb<ROOK>(s, pos.pieces() ^ pos.pieces(Us, ROOK, QUEEN));
-        else
-            assert(false);
+        b = Piece == BISHOP ? attacks_bb<BISHOP>(s, pos.pieces() ^ pos.pieces(Us, QUEEN))
+          : Piece ==   ROOK ? attacks_bb<  ROOK>(s, pos.pieces() ^ pos.pieces(Us, ROOK, QUEEN))
+                            : pos.attacks_from<Piece>(s);
 
         ei.attackedBy[Us][Piece] |= b;
 
@@ -568,9 +547,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
                 ei.kingAdjacentZoneAttacksCount[Us] += popcount<Max15>(bb);
         }
 
-        mob = (Piece != QUEEN ? popcount<Max15>(b & mobilityArea)
-                              : popcount<Full >(b & mobilityArea));
-
+        int mob = popcount<Piece == QUEEN ? Full : Max15>(b & mobilityArea);
         mobility += MobilityBonus[Piece][mob];
 
         // Decrease score if we are attacked by an enemy pawn. Remaining part
@@ -578,8 +555,8 @@ Value do_evaluate(const Position& pos, Value& margin) {
         if (ei.attackedBy[Them][PAWN] & s)
             score -= ThreatenedByPawnPenalty[Piece];
 
-        // Otherwise give a bonus if we are a bishop and can pin a piece or
-        // can give a discovered check through an x-ray attack.
+        // Otherwise give a bonus if we are a bishop and can pin a piece or can
+        // give a discovered check through an x-ray attack.
         else if (    Piece == BISHOP
                  && (PseudoAttacks[Piece][pos.king_square(Them)] & s)
                  && !more_than_one(BetweenBB[s][pos.king_square(Them)] & pos.pieces()))
@@ -594,67 +571,54 @@ Value do_evaluate(const Position& pos, Value& margin) {
             && !(pos.pieces(Them, PAWN) & attack_span_mask(Us, s)))
             score += evaluate_outposts<Piece, Us>(pos, ei, s);
 
-        if ((Piece == ROOK || Piece == QUEEN) && relative_rank(Us, s) >= RANK_5)
+        if (  (Piece == ROOK || Piece == QUEEN)
+            && relative_rank(Us, s) >= RANK_5)
         {
-            // Major piece on 7th rank
+            // Major piece on 7th rank and enemy king trapped on 8th
             if (   relative_rank(Us, s) == RANK_7
                 && relative_rank(Us, pos.king_square(Them)) == RANK_8)
-                score += (Piece == ROOK ? RookOn7thBonus : QueenOn7thBonus);
+                score += Piece == ROOK ? RookOn7thBonus : QueenOn7thBonus;
 
-            // Major piece attacking pawns on the same rank
+            // Major piece attacking enemy pawns on the same rank
             Bitboard pawns = pos.pieces(Them, PAWN) & rank_bb(s);
             if (pawns)
-                score += (Piece == ROOK ? RookOnPawnBonus
-                                        : QueenOnPawnBonus) * popcount<Max15>(pawns);
-        }
-
-        // Special extra evaluation for bishops
-        if (Piece == BISHOP && pos.is_chess960())
-        {
-            // An important Chess960 pattern: A cornered bishop blocked by
-            // a friendly pawn diagonally in front of it is a very serious
-            // problem, especially when that pawn is also blocked.
-            if (s == relative_square(Us, SQ_A1) || s == relative_square(Us, SQ_H1))
-            {
-                Square d = pawn_push(Us) + (file_of(s) == FILE_A ? DELTA_E : DELTA_W);
-                if (pos.piece_on(s + d) == make_piece(Us, PAWN))
-                {
-                    if (!pos.is_empty(s + d + pawn_push(Us)))
-                        score -= 2*TrappedBishopA1H1Penalty;
-                    else if (pos.piece_on(s + 2*d) == make_piece(Us, PAWN))
-                        score -= TrappedBishopA1H1Penalty;
-                    else
-                        score -= TrappedBishopA1H1Penalty / 2;
-                }
-            }
+                score += popcount<Max15>(pawns) * (Piece == ROOK ? RookOnPawnBonus : QueenOnPawnBonus);
         }
 
         // Special extra evaluation for rooks
         if (Piece == ROOK)
         {
-            // Open and half-open files
-            f = file_of(s);
-            if (ei.pi->file_is_half_open(Us, f))
-            {
-                if (ei.pi->file_is_half_open(Them, f))
-                    score += RookOpenFileBonus;
-                else
-                    score += RookHalfOpenFileBonus;
-            }
-
-            if (mob > 6 || ei.pi->file_is_half_open(Us, f))
+            // Give a bonus for a rook on a open or half-open file
+            if (ei.pi->half_open(Us, file_of(s)))
+                score += ei.pi->half_open(Them, file_of(s)) ? RookOpenFileBonus
+                                                            : RookHalfOpenFileBonus;
+            if (mob > 6 || ei.pi->half_open(Us, file_of(s)))
                 continue;
 
-            ksq = pos.king_square(Us);
+            Square ksq = pos.king_square(Us);
 
             // Penalize rooks which are trapped inside a king. Penalize more if
             // king has lost right to castle.
             if (   ((file_of(ksq) < FILE_E) == (file_of(s) < file_of(ksq)))
                 && rank_of(ksq) == rank_of(s)
                 && relative_rank(Us, ksq) == RANK_1
-                && !ei.pi->has_open_file_on_side(Us, file_of(ksq), file_of(ksq) < FILE_E))
-                score -= make_score(pos.can_castle(Us) ? (TrappedRookPenalty - mob * 16) / 2
-                                                       : (TrappedRookPenalty - mob * 16), 0);
+                && !ei.pi->half_open_on_side(Us, file_of(ksq), file_of(ksq) < FILE_E))
+                score -= (TrappedRookPenalty - make_score(mob * 8, 0)) * (pos.can_castle(Us) ? 1 : 2);
+        }
+
+        // An important Chess960 pattern: A cornered bishop blocked by a friendly
+        // pawn diagonally in front of it is a very serious problem, especially
+        // when that pawn is also blocked.
+        if (   Piece == BISHOP
+            && pos.is_chess960()
+            && (s == relative_square(Us, SQ_A1) || s == relative_square(Us, SQ_H1)))
+        {
+            const enum Piece P = make_piece(Us, PAWN);
+            Square d = pawn_push(Us) + (file_of(s) == FILE_A ? DELTA_E : DELTA_W);
+            if (pos.piece_on(s + d) == P)
+                score -= !pos.is_empty(s + d + pawn_push(Us)) ? TrappedBishopA1H1Penalty * 4
+                        : pos.piece_on(s + d + d) == P        ? TrappedBishopA1H1Penalty * 2
+                                                              : TrappedBishopA1H1Penalty;
         }
     }
 
index 39fc9e3f16aa94c0acdebe3191448ca32178c0b4..664bce2d82dd2cf94a2b13911794642e1f45cc7b 100644 (file)
@@ -37,9 +37,10 @@ struct Entry {
   Score pawns_value() const { return value; }
   Bitboard pawn_attacks(Color c) const { return pawnAttacks[c]; }
   Bitboard passed_pawns(Color c) const { return passedPawns[c]; }
-  int file_is_half_open(Color c, File f) const { return halfOpenFiles[c] & (1 << int(f)); }
   int pawns_on_same_color_squares(Color c, Square s) const { return pawnsOnSquares[c][!!(BlackSquares & s)]; }
-  int has_open_file_on_side(Color c, File f, bool left) const {
+  int half_open(Color c, File f) const { return halfOpenFiles[c] & (1 << int(f)); }
+  int half_open_on_side(Color c, File f, bool left) const {
+
     return halfOpenFiles[c] & (left ? ((1 << int(f)) - 1) : ~((1 << int(f+1)) - 1));
   }
 
index dae86db310d6d80bc715e99c7aafd9ca482225e4..cd0d361953663f2aeaf911662b430fa62e83ecaa 100644 (file)
@@ -268,7 +268,7 @@ inline Score make_score(int mg, int eg) { return Score((mg << 16) + eg); }
 /// Extracting the signed lower and upper 16 bits it not so trivial because
 /// according to the standard a simple cast to short is implementation defined
 /// and so is a right shift of a signed integer.
-inline Value mg_value(Score s) { return Value(((s + 32768) & ~0xffff) / 0x10000); }
+inline Value mg_value(Score s) { return Value(((s + 0x8000) & ~0xffff) / 0x10000); }
 
 /// On Intel 64 bit we have a small speed regression with the standard conforming
 /// version, so use a faster code in this case that, although not 100% standard