Order check moves used in qsearch
authorMarco Costalba <mcostalba@gmail.com>
Sun, 17 Jan 2010 13:55:53 +0000 (14:55 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 19 Jan 2010 10:22:49 +0000 (11:22 +0100)
Use the same scoring system used for evasions. Small if any
increase, but should be in at least for completeness.

After 999 games at 1+0
Mod vs Orig +208 =601 -190 +6 ELO

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

index f4f475fb18baa75d7cdb4535723d455daf14be4f..8d8060b55571f9b4420ba29a674e791ce48f58e9 100644 (file)
@@ -141,7 +141,7 @@ void MovePicker::go_next_phase() {
   case PH_EVASIONS:
       assert(pos.is_check());
       lastMove = generate_evasions(pos, moves);
-      score_evasions();
+      score_evasions_or_checks();
       return;
 
   case PH_QCAPTURES:
@@ -150,8 +150,8 @@ void MovePicker::go_next_phase() {
       return;
 
   case PH_QCHECKS:
-      // Perhaps we should order moves move here?  FIXME
       lastMove = generate_non_capture_checks(pos, moves);
+      score_evasions_or_checks();
       return;
 
   case PH_STOP:
@@ -224,7 +224,7 @@ void MovePicker::score_noncaptures() {
   }
 }
 
-void MovePicker::score_evasions() {
+void MovePicker::score_evasions_or_checks() {
   // Try good captures ordered by MVV/LVA, then non-captures if
   // destination square is not under attack, ordered by history
   // value, and at the end bad-captures and non-captures with a
@@ -232,6 +232,10 @@ void MovePicker::score_evasions() {
   Move m;
   int seeScore;
 
+  // Skip if we don't have at least two moves to order
+  if (lastMove < moves + 2)
+      return;
+
   for (MoveStack* cur = moves; cur != lastMove; cur++)
   {
       m = cur->move;
index b42f839bc8bc571fcf3dc4a3e544b6dad4400076..a9a3561acf3fd888f4727f7e34649d47892f8a4b 100644 (file)
@@ -58,7 +58,7 @@ public:
 private:
   void score_captures();
   void score_noncaptures();
-  void score_evasions();
+  void score_evasions_or_checks();
   void go_next_phase();
 
   const Position& pos;