]> git.sesse.net Git - stockfish/commitdiff
Retire quick_evaluate()
authorJoona Kiiski <joona.kiiski@gmail.com>
Sun, 17 Jan 2010 11:55:10 +0000 (13:55 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 17 Jan 2010 12:15:44 +0000 (13:15 +0100)
No change in functionality signature

The only functional change is that when we reach PLY_MAX,
we now return VALUE_DRAW instead of evaluating position.

But we reach PLY_MAX only when position is dead drawn and
transposition table is filled with draw scores, so this
shouldn't matter at all.

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

index b50a023b557c3aad61691721c638c1df7b6ee68a..07a1e2102abd7a923ddbc0bbb98a055ada85ea19 100644 (file)
@@ -436,21 +436,6 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) {
 
 } // namespace
 
-/// quick_evaluate() does a very approximate evaluation of the current position.
-/// It currently considers only material and piece square table scores. Perhaps
-/// we should add scores from the pawn and material hash tables?
-
-Value quick_evaluate(const Position &pos) {
-
-  assert(pos.is_ok());
-
-  static const ScaleFactor sf[2] = {SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL};
-
-  Value v = scale_by_game_phase(pos.value(), MaterialInfoTable::game_phase(pos), sf);
-  return (pos.side_to_move() == WHITE ? v : -v);
-}
-
-
 /// init_eval() initializes various tables used by the evaluation function
 
 void init_eval(int threads) {
index cf56a58aa4a3cb042af7b9d3f54a2b0730e19d3c..43c361239844584c42fa770855a5d10b18619347 100644 (file)
@@ -104,7 +104,6 @@ struct EvalInfo {
 ////
 
 extern Value evaluate(const Position& pos, EvalInfo& ei, int threadID);
-extern Value quick_evaluate(const Position& pos);
 extern void init_eval(int threads);
 extern void quit_eval();
 extern void read_weights(Color sideToMove);
index 40808c6adfc77797484fb196cb8c14310d16837e..c740b3c3ec4df3f88c8bd9ffe84f888848fbfb7b 100644 (file)
@@ -1098,7 +1098,6 @@ namespace {
     assert(threadID >= 0 && threadID < ActiveThreads);
 
     Move movesSearched[256];
-    EvalInfo ei;
     StateInfo st;
     const TTEntry* tte;
     Move ttMove, move;
@@ -1119,12 +1118,9 @@ namespace {
     if (AbortSearch || thread_should_stop(threadID))
         return Value(0);
 
-    if (pos.is_draw())
+    if (pos.is_draw() || ply >= PLY_MAX - 1)
         return VALUE_DRAW;
 
-    if (ply >= PLY_MAX - 1)
-        return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
-
     // Mate distance pruning
     oldAlpha = alpha;
     alpha = Max(value_mated_in(ply), alpha);
@@ -1349,12 +1345,9 @@ namespace {
     if (AbortSearch || thread_should_stop(threadID))
         return Value(0);
 
-    if (pos.is_draw())
+    if (pos.is_draw() || ply >= PLY_MAX - 1)
         return VALUE_DRAW;
 
-    if (ply >= PLY_MAX - 1)
-        return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
-
     // Mate distance pruning
     if (value_mated_in(ply) >= beta)
         return beta;
@@ -1379,22 +1372,24 @@ namespace {
     isCheck = pos.is_check();
     ei.futilityMargin = Value(0); // Manually initialize futilityMargin
 
-    // Evaluate the position statically
-    if (isCheck)
-        staticValue = quick_evaluate(pos);
-    else if (tte && (tte->type() & VALUE_TYPE_EVAL))
-        staticValue = value_from_tt(tte->value(), ply);
-    else
-        staticValue = evaluate(pos, ei, threadID);
-
     // Calculate depth dependant futility pruning parameters
     const int FutilityMoveCountMargin = 3 + (1 << (3 * int(depth) / 8));
     const int FutilityValueMargin = 112 * bitScanReverse32(int(depth) * int(depth) / 2);
 
-    // Enhance score accuracy with TT value if possible
-    ss[ply].eval = staticValue;
-    futilityValue = staticValue + FutilityValueMargin;
-    staticValue = refine_eval(tte, staticValue, ply);
+    // Evaluate the position statically
+    if (isCheck)
+        ss[ply].eval = VALUE_NONE;
+    else
+    {
+        if (tte && (tte->type() & VALUE_TYPE_EVAL))
+            staticValue = value_from_tt(tte->value(), ply);
+        else
+            staticValue = evaluate(pos, ei, threadID);
+
+        ss[ply].eval = staticValue;
+        futilityValue = staticValue + FutilityValueMargin;
+        staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible
+    }
 
     // Null move search
     if (    allowNullmove
@@ -1660,12 +1655,9 @@ namespace {
     if (AbortSearch || thread_should_stop(threadID))
         return Value(0);
 
-    if (pos.is_draw())
+    if (pos.is_draw() || ply >= PLY_MAX - 1)
         return VALUE_DRAW;
 
-    if (ply >= PLY_MAX - 1)
-        return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
-
     // Transposition table lookup. At PV nodes, we don't use the TT for
     // pruning, but only for move ordering.
     tte = TT.retrieve(pos.get_key());