X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftimeman.cpp;h=051d9726aa9ae29cb6398d00d79db23b090653bc;hp=81c2f39b77e4d40eaff30c57dadeeda6f4f2b1be;hb=be641e881fdfdf3354453381f832fe7822e7c731;hpb=59a9bc93512138eca31ec38d36d8ddd7868ed708 diff --git a/src/timeman.cpp b/src/timeman.cpp index 81c2f39b..051d9726 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2013 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2008-2014 Marco Costalba, Joona Kiiski, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ */ #include +#include #include #include "search.h" @@ -34,8 +35,6 @@ namespace { const double xscale = 9.3; const double xshift = 59.8; - const double yscale = 7780; - const double yshift = 1e-3; // Larger than 0. Ensures a non-zero importance const double skewfactor = 0.172; @@ -46,7 +45,7 @@ namespace { double move_importance(int ply) { - return yscale / pow((1 + exp((ply - xshift) / xscale)), skewfactor) + yshift; + return pow((1 + exp((ply - xshift) / xscale)), -skewfactor) + DBL_MIN; // Ensure non-zero } @@ -61,13 +60,13 @@ namespace { void TimeManager::pv_instability(double bestMoveChanges) { - unstablePVExtraTime = int(bestMoveChanges * optimumSearchTime / 1.4); + unstablePvFactor = 1 + bestMoveChanges; } void TimeManager::init(const Search::LimitsType& limits, int currentPly, Color us) { - /* We support four different kind of time controls: + /* We support four different kinds of time controls: increment == 0 && movesToGo == 0 means: x basetime [sudden death!] increment == 0 && movesToGo != 0 means: x moves in y minutes @@ -91,9 +90,9 @@ void TimeManager::init(const Search::LimitsType& limits, int currentPly, Color u int minThinkingTime = Options["Minimum Thinking Time"]; int slowMover = Options["Slow Mover"]; - // Initialize all to maximum values but unstablePVExtraTime that is reset - unstablePVExtraTime = 0; - optimumSearchTime = maximumSearchTime = limits.time[us]; + // Initialize unstablePvFactor to 1 and search times to maximum values + unstablePvFactor = 1; + optimumSearchTime = maximumSearchTime = std::max(limits.time[us], minThinkingTime); // We calculate optimum time usage for different hypothetical "moves to go"-values and choose the // minimum of calculated search time values. Usually the greatest hypMTG gives the minimum values.