MovePicker: take advantage of threat move for ordering
authorMarco Costalba <mcostalba@gmail.com>
Tue, 25 Nov 2008 10:10:02 +0000 (11:10 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 25 Nov 2008 19:40:34 +0000 (20:40 +0100)
If the null move was refuted by a capture then give a
bonus if we move away the captured piece.

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

index ee747c94525cdee18b9f78ea585abd3854cd23e8..ca0d8681a1d0515f4fc8c87110ab34124138ecd5 100644 (file)
@@ -72,6 +72,7 @@ MovePicker::MovePicker(const Position& p, bool pv, Move ttm,
   mateKiller = (ss.mateKiller == ttm)? MOVE_NONE : ss.mateKiller;
   killer1 = ss.killers[0];
   killer2 = ss.killers[1];
+  threatMove = ss.threatMove;
   depth = d;
   movesPicked = 0;
   numOfMoves = 0;
@@ -270,10 +271,16 @@ void MovePicker::score_noncaptures() {
       else
           hs = H.move_ordering_score(pos.piece_on(move_from(m)), m);
 
-      // Ensure moves in history are always sorted as first
+      // If the null move was refuted by a capture then give a
+      // bonus if we move away the captured piece.
+      if (threatMove != MOVE_NONE && move_from(m) == move_to(threatMove))
+          hs *= 3;
+
+      // Ensure history is always preferred to pst
       if (hs > 0)
           hs += 1000;
 
+      // pst based scoring
       moves[i].score = hs + pos.mg_pst_delta(m);
   }
 }
index fd1ee890f7f8646eb06b6165c6e9645940068a4a..5fff409259c1cfd8d1544b277c06c85715ede770 100644 (file)
@@ -83,7 +83,7 @@ private:
   int find_best_index(Bitboard* squares, int values[]);
 
   const Position& pos;
-  Move ttMove, mateKiller, killer1, killer2;
+  Move ttMove, mateKiller, killer1, killer2, threatMove;
   Bitboard pinned, dc;
   MoveStack moves[256], badCaptures[64];
   bool pvNode;