diff --git a/src/search.cpp b/src/search.cpp index 3874852b..e9afc1c5 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -325,7 +325,7 @@ void Thread::search() { // Age out PV variability metric if (mainThread) - mainThread->bestMoveChanges *= 0.505, mainThread->failedLow = false; + mainThread->bestMoveChanges *= 0.517, mainThread->failedLow = false; // Save the last iteration's scores before first PV line is searched and // all the move scores except the (new) PV are set to -VALUE_INFINITE. @@ -444,21 +444,21 @@ void Thread::search() { const int F[] = { mainThread->failedLow, bestValue - mainThread->previousScore }; - int improvingFactor = std::max(229, std::min(715, 357 + 119 * F[0] - 6 * F[1])); + int improvingFactor = std::max(246, std::min(832, 306 + 119 * F[0] - 6 * F[1])); // If the bestMove is stable over several iterations, reduce time accordingly timeReduction = 1.0; for (int i : {3, 4, 5}) if (lastBestMoveDepth * i < completedDepth) - timeReduction *= 1.3; + timeReduction *= 1.25; // Use part of the gained time from a previous stable move for the current move double unstablePvFactor = 1.0 + mainThread->bestMoveChanges; - unstablePvFactor *= std::pow(mainThread->previousTimeReduction, 0.51) / timeReduction; + unstablePvFactor *= std::pow(mainThread->previousTimeReduction, 0.528) / timeReduction; // Stop the search if we have only one legal move, or if available time elapsed if ( rootMoves.size() == 1 - || Time.elapsed() > Time.optimum() * unstablePvFactor * improvingFactor / 605) + || Time.elapsed() > Time.optimum() * unstablePvFactor * improvingFactor / 581) { // If we are allowed to ponder do not stop the search now but // keep pondering until the GUI sends "ponderhit" or "stop". diff --git a/src/timeman.cpp b/src/timeman.cpp index 035fe335..f6ead0b2 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -33,8 +33,8 @@ namespace { enum TimeType { OptimumTime, MaxTime }; const int MoveHorizon = 50; // Plan time management at most this many moves ahead - const double MaxRatio = 7.09; // When in trouble, we can step over reserved time with this ratio - const double StealRatio = 0.35; // However we must not steal time from remaining moves over this ratio + const double MaxRatio = 7.3; // When in trouble, we can step over reserved time with this ratio + const double StealRatio = 0.34; // However we must not steal time from remaining moves over this ratio // move_importance() is a skew-logistic function based on naive statistical @@ -44,9 +44,9 @@ namespace { double move_importance(int ply) { - const double XScale = 7.64; - const double XShift = 58.4; - const double Skew = 0.183; + const double XScale = 6.85; + const double XShift = 64.5; + const double Skew = 0.171; return pow((1 + exp((ply - XShift) / XScale)), -Skew) + DBL_MIN; // Ensure non-zero } diff --git a/src/ucioption.cpp b/src/ucioption.cpp index aa2e2d8a..4d925d68 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -68,7 +68,7 @@ void init(OptionsMap& o) { o["Skill Level"] << Option(20, 0, 20); o["Move Overhead"] << Option(30, 0, 5000); o["Minimum Thinking Time"] << Option(20, 0, 5000); - o["Slow Mover"] << Option(89, 10, 1000); + o["Slow Mover"] << Option(84, 10, 1000); o["nodestime"] << Option(0, 0, 10000); o["UCI_Chess960"] << Option(false); o["SyzygyPath"] << Option("", on_tb_path);