mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-25 03:26:24 +08:00
Spend much less time in positions where one move is much better than all other alternatives. We carry forward pv stability information from the previous search to identify such positions. It's based on my old InstaMove idea but with two significant improvements. 1) Much better instability detection inside the search itself. 2) When it's time to make a FastMove we no longer make it instantly but still spend at least 10% of normal time verifying it. Credit to Gull for the inspiration. BIG thanks to Gary because this would not work without accurate PV! 20K ELO: 8.22 +-3.0 (95%) LOS: 100.0% Total: 20000 W: 4203 L: 3730 D: 12067 STC LLR: 2.96 (-2.94,2.94) [-1.50,4.50] Total: 23266 W: 4662 L: 4492 D: 14112 LTC LLR: 2.95 (-2.94,2.94) [0.00,6.00] Total: 12470 W: 2091 L: 1931 D: 8448 Resolves #283
40 lines
1.5 KiB
C++
40 lines
1.5 KiB
C++
/*
|
|
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
|
|
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
|
|
Copyright (C) 2008-2015 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
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Stockfish is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef TIMEMAN_H_INCLUDED
|
|
#define TIMEMAN_H_INCLUDED
|
|
|
|
/// The TimeManager class computes the optimal time to think depending on the
|
|
/// maximum available time, the game move number and other parameters.
|
|
|
|
class TimeManager {
|
|
public:
|
|
void init(const Search::LimitsType& limits, Color us, int ply);
|
|
void pv_instability(double bestMoveChanges) { unstablePvFactor = 1 + bestMoveChanges; }
|
|
int available_time() const { return int(optimumSearchTime * unstablePvFactor * 0.76); }
|
|
int maximum_time() const { return maximumSearchTime; }
|
|
|
|
private:
|
|
int optimumSearchTime;
|
|
int maximumSearchTime;
|
|
double unstablePvFactor;
|
|
};
|
|
|
|
#endif // #ifndef TIMEMAN_H_INCLUDED
|