Summary Wordfish 2.0
Refine root search bounds
options.add("Skill Level", Option(20, 0, 20));
options.add("Move Overhead", Option(10, 0, 5000));
options.add("Slow Mover", Option(100, 10, 1000));
options.add("nodestime", Option(0, 0, 10000));
search.cpp
// Reset aspiration window starting size using last iteration's
// final value (previousScore). Tripple the constant factor to
// widen the initial window.
delta = 15 + std::abs(rootMoves[pvIdx].meanSquaredScore) / 11131;
Value prev = rootMoves[pvIdx].previousScore;
alpha = std::max(prev - delta, -VALUE_INFINITE);
beta = std::min(prev + delta, VALUE_INFINITE);
Move prevBest = rootMoves[pvIdx].pv[0];
// Adjust optimism based on root move's previous score
optimism[us] = 136 * prev / (std::abs(prev) + 93);
....
// In case of failing low/high increase aspiration window and
// re-search, otherwise exit the loop. New bounds depend on the
// old window, the score +/- delta and whether the best move
// has changed.
bool bestMoveChanged = rootMoves[pvIdx].pv[0] != prevBest;
prevBest = rootMoves[pvIdx].pv[0];
...
beta = (alpha + beta) / 2; // ignore FLB[0] params
...
if (bestMoveChanged)
alpha = std::max(bestValue - delta, -VALUE_INFINITE);
else
alpha = (alpha + beta) / 2;
...
delta += 2 * delta; // triple C behaviour on subsequent tries
Timeman.cpp
// Scale allocated time according to the Slow Mover option (percentage)
double slowMover = options["Slow Mover"] / 100.0;
optScale *= slowMover;
maxScale *= slowMover;
Download last update