X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftimeman.cpp;h=051d9726aa9ae29cb6398d00d79db23b090653bc;hp=fc2a327df253528a77ce9f80f1b286728124f93d;hb=be641e881fdfdf3354453381f832fe7822e7c731;hpb=92faa74dfa862fbdef409017a4ccd993c549f723 diff --git a/src/timeman.cpp b/src/timeman.cpp index fc2a327d..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" @@ -44,7 +45,7 @@ namespace { double move_importance(int ply) { - return 1 / pow((1 + exp((ply - xshift) / xscale)), skewfactor) + 1e-3; // Ensure non-zero + return pow((1 + exp((ply - xshift) / xscale)), -skewfactor) + DBL_MIN; // Ensure non-zero } @@ -59,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 @@ -89,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.