Time limits are updated when the engine stops pondering

This commit is contained in:
Mattia Giambirtone 2024-05-13 18:31:23 +02:00
parent d9e183caf3
commit 836e9e6a34
Signed by: nocturn9x
GPG Key ID: 37B83AB6C3BE6514
2 changed files with 12 additions and 5 deletions

View File

@ -121,6 +121,7 @@ type
transpositionTable: ptr TTable
history: ptr HistoryTable
killers: ptr KillersTable
maxSearchTime: int64
# We keep one extra entry so we don't need any special casing
# inside the search function when constructing pv lines
pvMoves: array[MAX_DEPTH + 1, array[MAX_DEPTH + 1, Move]]
@ -248,11 +249,17 @@ proc reorderMoves(self: SearchManager, moves: var MoveList, ply: int) =
proc timedOut(self: SearchManager): bool = getMonoTime() >= self.hardLimit
proc isPondering*(self: var SearchManager): bool = self.pondering.load()
proc stopPondering*(self: var SearchManager) = self.pondering.store(false)
proc cancelled(self: var SearchManager): bool = self.stop.load()
proc elapsedTime(self: SearchManager): int64 = (getMonoTime() - self.searchStart).inMilliseconds()
proc stopPondering*(self: var SearchManager) =
self.pondering.store(false)
let t = getMonoTime()
self.hardLimit = t + initDuration(milliseconds=self.maxSearchTime)
self.softLimit = t + initDuration(milliseconds=self.maxSearchTime div 3)
proc log(self: SearchManager, depth: int) =
let
elapsedMsec = self.elapsedTime().uint64
@ -641,16 +648,15 @@ proc findBestLine*(self: var SearchManager, timeRemaining, increment: int64, max
## variation instead of the best move
# Apparently negative remaining time is a thing. Welp
let
maxSearchTime = if not timePerMove: max(1, (timeRemaining div 10) + ((increment div 3) * 2)) else: timeRemaining
softLimit = if not timePerMove: maxSearchTime div 3 else: maxSearchTime
self.maxSearchTime = if not timePerMove: max(1, (timeRemaining div 10) + ((increment div 3) * 2)) else: timeRemaining
let softLimit = if not timePerMove: self.maxSearchTime div 3 else: self.maxSearchTime
result = @[]
var pv: array[256, Move]
self.maxNodes = maxNodes
self.pondering.store(ponder)
self.searchMoves = searchMoves
self.searchStart = getMonoTime()
self.hardLimit = self.searchStart + initDuration(milliseconds=maxSearchTime)
self.hardLimit = self.searchStart + initDuration(milliseconds=self.maxSearchTime)
self.softLimit = self.searchStart + initDuration(milliseconds=softLimit)
var maxDepth = maxDepth
if maxDepth == -1:

View File

@ -353,6 +353,7 @@ proc startUCISession* =
echo "id name Nimfish 0.1"
echo "id author Nocturn9x & Contributors (see LICENSE)"
echo "option name Hash type spin default 64 min 1 max 33554432"
echo "option name Threads type spin default 1 min 1 max 1"
echo "uciok"
var
cmd: UCICommand