1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Introduce lazy evaluation

After we have taken into account all cheap evaluation
terms, we check whether the score exceeds a given threshold.
If this is the case, we return a scaled down evaluation.

STC:
LLR: 3.35 (-2.94,2.94) [0.00,5.00]
Total: 12575 W: 2316 L: 2122 D: 8137

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 67480 W: 9016 L: 8677 D: 49787

Current version is the one rewritten by ceebo
further edited by me.

Bench: 5367704
This commit is contained in:
Stefano Cardanobile 2017-01-10 19:03:27 +01:00 committed by Marco Costalba
parent 99cd513264
commit de02768af7

View file

@ -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<KING>(pos.square<KING>(WHITE));