Extend definition of stable disks
authorFabian Fichter <ianfab@users.noreply.github.com>
Sat, 4 Jul 2020 09:04:52 +0000 (11:04 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Sat, 4 Jul 2020 09:04:52 +0000 (11:04 +0200)
reversi
LLR: 2.97 (-2.94,2.94) [0.00,10.00]
Total: 422 W: 255 L: 150 D: 17

src/evaluate.cpp

index 22e6f6d..37a5038 100644 (file)
@@ -1008,11 +1008,17 @@ namespace {
     // Potential piece flips
     if (pos.flip_enclosed_pieces())
     {
-        // Stable
-        Bitboard corners = pos.pieces(Us) & (FileABB | file_bb(pos.max_file())) & (Rank1BB | rank_bb(pos.max_rank()));
+        // Stable pieces
+        Bitboard edges = (FileABB | file_bb(pos.max_file()) | Rank1BB | rank_bb(pos.max_rank())) & pos.board_bb();
+        Bitboard edgePieces = pos.pieces(Us) & edges;
         Bitboard stable = 0;
-        while (corners)
-            stable |= attacks_bb(Us, ROOK, pop_lsb(&corners), ~pos.pieces(~Us)) & pos.pieces(Us);
+        while (edgePieces)
+        {
+            Square s = pop_lsb(&edgePieces);
+            Bitboard connectedEdge = attacks_bb(Us, ROOK, s, ~(pos.pieces() & edges)) & edges;
+            if (!(connectedEdge & ~pos.pieces()) || !more_than_one(connectedEdge & ~pos.pieces(Us)))
+                stable |= s;
+        }
         score += make_score(300, 300) * popcount(stable);
 
         // Unstable