1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Rewrite time formula

Time management is really too complex, our aim is
to simplify it, but for time being at least rewrite
in an understandable way.

No functional change.
This commit is contained in:
Marco Costalba 2016-01-16 09:03:56 +01:00
parent 89723339d9
commit 356147d99a
2 changed files with 19 additions and 15 deletions

View file

@ -188,7 +188,7 @@ void Search::clear() {
th->counterMoves.clear(); th->counterMoves.clear();
} }
Threads.main()->previousMoveScore = VALUE_INFINITE; Threads.main()->previousScore = VALUE_INFINITE;
} }
@ -338,7 +338,7 @@ void MainThread::search() {
bestThread = th; bestThread = th;
} }
previousMoveScore = bestThread->rootMoves[0].score; previousScore = bestThread->rootMoves[0].score;
// Send new PV when needed // Send new PV when needed
if (bestThread != this) if (bestThread != this)
@ -538,13 +538,18 @@ void Thread::search() {
// Stop the search if only one legal move is available, or if all // Stop the search if only one legal move is available, or if all
// of the available time has been used, or if we matched an easyMove // of the available time has been used, or if we matched an easyMove
// from the previous search and just did a fast verification. // from the previous search and just did a fast verification.
const bool F[] = { !mainThread->failedLow,
bestValue >= mainThread->previousScore };
int improvingFactor = 640 - 160*F[0] - 126*F[1] - 124*F[0]*F[1];
bool doEasyMove = rootMoves[0].pv[0] == easyMove
&& mainThread->bestMoveChanges < 0.03
&& Time.elapsed() > Time.available() * 25 / 206;
if ( rootMoves.size() == 1 if ( rootMoves.size() == 1
|| Time.elapsed() > Time.available() * ( 640 - 160 * !mainThread->failedLow || Time.elapsed() > Time.available() * improvingFactor / 640
- 126 * (bestValue >= mainThread->previousMoveScore) || (mainThread->easyMovePlayed = doEasyMove))
- 124 * (bestValue >= mainThread->previousMoveScore && !mainThread->failedLow))/640
|| ( mainThread->easyMovePlayed = ( rootMoves[0].pv[0] == easyMove
&& mainThread->bestMoveChanges < 0.03
&& Time.elapsed() > Time.available() * 25/206)))
{ {
// If we are allowed to ponder do not stop the search now but // If we are allowed to ponder do not stop the search now but
// keep pondering until the GUI sends "ponderhit" or "stop". // keep pondering until the GUI sends "ponderhit" or "stop".
@ -999,11 +1004,10 @@ moves_loop: // When in check search starts from here
&& cmh[pos.piece_on(to_sq(move))][to_sq(move)] <= VALUE_ZERO)) && cmh[pos.piece_on(to_sq(move))][to_sq(move)] <= VALUE_ZERO))
r += ONE_PLY; r += ONE_PLY;
// Decrease reduction for moves with a good history and // Decrease/increase reduction for moves with a good/bad history
// increase reduction for moves with a bad history int rHist = ( thisThread->history[pos.piece_on(to_sq(move))][to_sq(move)]
int rDecrease = ( thisThread->history[pos.piece_on(to_sq(move))][to_sq(move)] + cmh[pos.piece_on(to_sq(move))][to_sq(move)]) / 14980;
+ cmh[pos.piece_on(to_sq(move))][to_sq(move)]) / 14980; r = std::max(DEPTH_ZERO, r - rHist * ONE_PLY);
r = std::max(DEPTH_ZERO, r - rDecrease * ONE_PLY);
// Decrease reduction for moves that escape a capture. Filter out // Decrease reduction for moves that escape a capture. Filter out
// castling moves, because they are coded as "king captures rook" and // castling moves, because they are coded as "king captures rook" and
@ -1472,7 +1476,7 @@ moves_loop: // When in check search starts from here
int maxScore = -VALUE_INFINITE; int maxScore = -VALUE_INFINITE;
// Choose best move. For each move score we add two terms, both dependent on // Choose best move. For each move score we add two terms, both dependent on
// weakness. One is deterministic and bigger for weaker levels, and one is // weakness. One is deterministic and bigger for weaker levels, and one is
// random. Then we choose the move with the resulting highest score. // random. Then we choose the move with the resulting highest score.
for (size_t i = 0; i < multiPV; ++i) for (size_t i = 0; i < multiPV; ++i)
{ {

View file

@ -80,7 +80,7 @@ struct MainThread : public Thread {
bool easyMovePlayed, failedLow; bool easyMovePlayed, failedLow;
double bestMoveChanges; double bestMoveChanges;
Value previousMoveScore; Value previousScore;
}; };