size_t PVSize, PVIdx;
TimeManager TimeMgr;
- float BestMoveChanges;
+ double BestMoveChanges;
Value DrawValue[COLOR_NB];
HistoryStats History;
GainsStats Gains;
if (Reductions[0][0][hd][mc] > 2 * ONE_PLY)
Reductions[0][0][hd][mc] += ONE_PLY;
+
+ else if (Reductions[0][0][hd][mc] > 1 * ONE_PLY)
+ Reductions[0][0][hd][mc] += ONE_PLY / 2;
}
// Init futility margins array
while (++depth <= MAX_PLY && !Signals.stop && (!Limits.depth || depth <= Limits.depth))
{
// Age out PV variability metric
- BestMoveChanges *= 0.8f;
+ BestMoveChanges *= 0.8;
// Save last iteration's scores before first PV line is searched and all
// the move scores but the (new) PV are set to -VALUE_INFINITE.
if ( (ss->staticEval = bestValue = tte->eval_value()) == VALUE_NONE
||(ss->evalMargin = tte->eval_margin()) == VALUE_NONE)
ss->staticEval = bestValue = evaluate(pos, ss->evalMargin);
+
+ // Can ttValue be used as a better position evaluation?
+ if (ttValue != VALUE_NONE)
+ if (tte->bound() & (ttValue > bestValue ? BOUND_LOWER : BOUND_UPPER))
+ bestValue = ttValue;
}
else
ss->staticEval = bestValue = evaluate(pos, ss->evalMargin);
if (PvNode && bestValue > alpha)
alpha = bestValue;
- futilityBase = ss->staticEval + ss->evalMargin + Value(128);
+ futilityBase = bestValue + ss->evalMargin + Value(128);
}
// Initialize a MovePicker object for the current position, and prepare