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

Reintroduce eval optimizaion from null search

Now that conversion to eval cache is finished
we can reintroduce this optimization.

bench: 5149248
This commit is contained in:
Marco Costalba 2012-12-01 18:06:29 +01:00
parent 98cd8239cc
commit 23bdd06442

View file

@ -1090,7 +1090,7 @@ split_point_start: // At split points actual search starts from here
Key posKey;
Move ttMove, move, bestMove;
Value bestValue, value, ttValue, futilityValue, futilityBase, oldAlpha;
bool givesCheck, enoughMaterial, evasionPrunable;
bool givesCheck, enoughMaterial, evasionPrunable, fromNull;
Depth ttDepth;
// To flag BOUND_EXACT a node with eval above alpha and no available moves
@ -1099,6 +1099,7 @@ split_point_start: // At split points actual search starts from here
ss->currentMove = bestMove = MOVE_NONE;
ss->ply = (ss-1)->ply + 1;
fromNull = (ss-1)->currentMove == MOVE_NULL;
// Check for an instant draw or maximum ply reached
if (pos.is_draw<false, false>() || ss->ply > MAX_PLY)
@ -1136,7 +1137,14 @@ split_point_start: // At split points actual search starts from here
}
else
{
ss->staticEval = bestValue = evaluate(pos, ss->evalMargin);
if (fromNull)
{
// Approximated score. Real one is slightly higher due to tempo
ss->staticEval = bestValue = -(ss-1)->staticEval;
ss->evalMargin = VALUE_ZERO;
}
else
ss->staticEval = bestValue = evaluate(pos, ss->evalMargin);
// Stand pat. Return immediately if static value is at least beta
if (bestValue >= beta)
@ -1171,6 +1179,7 @@ split_point_start: // At split points actual search starts from here
// Futility pruning
if ( !PvNode
&& !InCheck
&& !fromNull
&& !givesCheck
&& move != ttMove
&& enoughMaterial