X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=5621c508f219d7ed7725c68f46b4a28032973fc4;hp=02806cc713ef881bf9b16f40fdc8b63d6f958bb6;hb=de02768af7b37c903e3227b85ec4d81ec79ba69a;hpb=99cd513264be1ad61848bbefd678be0feaa08061 diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 02806cc7..5621c508 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -221,6 +221,8 @@ namespace { const int BishopCheck = 588; const int KnightCheck = 924; + // Threshold for lazy evaluation + const Value LazyEval = Value(1500); // eval_init() initializes king and attack bitboards for a given color // adding pawn attacks. To be done at the beginning of the evaluation. @@ -782,6 +784,18 @@ namespace { return sf; } + + Value lazy_eval(Value mg, Value eg) { + + if (mg > LazyEval && eg > LazyEval) + return LazyEval + ((mg + eg) / 2 - LazyEval) / 4; + + else if (mg < -LazyEval && eg < -LazyEval) + return -LazyEval + ((mg + eg) / 2 + LazyEval) / 4; + + return VALUE_ZERO; + } + } // namespace @@ -813,6 +827,12 @@ Value Eval::evaluate(const Position& pos) { ei.pi = Pawns::probe(pos); score += ei.pi->pawns_score(); + // We have taken into account all cheap evaluation terms. + // If score exceeds a threshold return a lazy evaluation. + Value lazy = lazy_eval(mg_value(score), eg_value(score)); + if (lazy) + return pos.side_to_move() == WHITE ? lazy : -lazy; + // Initialize attack and king safety bitboards ei.attackedBy[WHITE][ALL_PIECES] = ei.attackedBy[BLACK][ALL_PIECES] = 0; ei.attackedBy[WHITE][KING] = pos.attacks_from(pos.square(WHITE));