1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

Improve time managment

If we need some more and we are in time
advantage take it.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2008-09-18 10:32:12 +01:00
parent d583176baf
commit 18860cce40
3 changed files with 18 additions and 12 deletions

View file

@ -123,7 +123,8 @@ void benchmark(const std::string& commandLine) {
for (it = positions.begin(); it != positions.end(); ++it) for (it = positions.begin(); it != positions.end(); ++it)
{ {
Move moves[1] = {MOVE_NONE}; Move moves[1] = {MOVE_NONE};
int dummy[2] = {0, 0};
Position pos(*it); Position pos(*it);
think(pos, true, false, 0, 0, 0, 0, 0, 0, secsPerPos * 1000, moves); think(pos, true, false, 0, dummy, dummy, 0, 0, 0, secsPerPos * 1000, moves);
} }
} }

View file

@ -181,7 +181,7 @@ namespace {
// Time managment variables // Time managment variables
int SearchStartTime; int SearchStartTime;
int MaxNodes, MaxDepth; int MaxNodes, MaxDepth;
int MaxSearchTime, AbsoluteMaxSearchTime, ExtraSearchTime; int MaxSearchTime, AbsoluteMaxSearchTime, ExtraSearchTime, TimeAdvantage;
Move BestRootMove, PonderMove, EasyMove; Move BestRootMove, PonderMove, EasyMove;
int RootMoveNumber; int RootMoveNumber;
bool InfiniteSearch; bool InfiniteSearch;
@ -407,14 +407,6 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move,
init_eval(ActiveThreads); init_eval(ActiveThreads);
} }
// Write information to search log file:
if(UseLogFile) {
LogFile << "Searching: " << pos.to_fen() << '\n';
LogFile << "infinite: " << infinite << " ponder: " << ponder
<< " time: " << time << " increment: " << increment
<< " moves to go: " << movesToGo << '\n';
}
// Wake up sleeping threads: // Wake up sleeping threads:
wake_sleeping_threads(); wake_sleeping_threads();
@ -425,7 +417,8 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move,
int myTime = time[side_to_move]; int myTime = time[side_to_move];
int myIncrement = increment[side_to_move]; int myIncrement = increment[side_to_move];
int oppTime = time[1 - side_to_move]; int oppTime = time[1 - side_to_move];
int oppIncrement = increment[1 - side_to_move];
TimeAdvantage = myTime - oppTime;
if(!movesToGo) { // Sudden death time control if(!movesToGo) { // Sudden death time control
if(increment) { if(increment) {
@ -465,6 +458,15 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move,
else else
NodesBetweenPolls = 30000; NodesBetweenPolls = 30000;
// Write information to search log file:
if(UseLogFile) {
LogFile << "Searching: " << pos.to_fen() << '\n';
LogFile << "infinite: " << infinite << " ponder: " << ponder
<< " time: " << myTime << " increment: " << myIncrement
<< " moves to go: " << movesToGo << '\n';
}
// We're ready to start thinking. Call the iterative deepening loop // We're ready to start thinking. Call the iterative deepening loop
// function: // function:
id_loop(pos, searchMoves); id_loop(pos, searchMoves);
@ -640,6 +642,10 @@ namespace {
BestMoveChangesByIteration[Iteration] * (MaxSearchTime / 2) + BestMoveChangesByIteration[Iteration] * (MaxSearchTime / 2) +
BestMoveChangesByIteration[Iteration-1] * (MaxSearchTime / 3); BestMoveChangesByIteration[Iteration-1] * (MaxSearchTime / 3);
// If we need some more and we are in time advantage take it.
if (ExtraSearchTime > 0 && TimeAdvantage > 2 * MaxSearchTime)
ExtraSearchTime += MaxSearchTime / 2;
// Stop search if most of MaxSearchTime is consumed at the end of the // Stop search if most of MaxSearchTime is consumed at the end of the
// iteration. We probably don't have enough time to search the first // iteration. We probably don't have enough time to search the first
// move at the next iteration anyway. // move at the next iteration anyway.

View file

@ -134,7 +134,6 @@ namespace {
TT.clear(); TT.clear();
Position::init_piece_square_tables(); Position::init_piece_square_tables();
RootPosition.from_fen(StartPosition); RootPosition.from_fen(StartPosition);
} }
else if (token == "isready") else if (token == "isready")
std::cout << "readyok" << std::endl; std::cout << "readyok" << std::endl;