2017-04-12 83 views
0

即時嘗試實現我的negamax alpha beta算法的時間限制,但我似乎無法弄清楚。我試圖實現的是:開始計算移動,如果計算沒有在5秒內完成,則返回此時的最佳移動。功能的C++時間限制

我該怎麼做? 它甚至可能與negamax?

的negamax僞代碼:

01 function negamax(node, depth, α, β, color) 
02  if depth = 0 or node is a terminal node 
03   return color * the heuristic value of node 

04  childNodes := GenerateMoves(node) 
05  childNodes := OrderMoves(childNodes) 
06  bestValue := −∞ 
07  foreach child in childNodes 
08   v := −negamax(child, depth − 1, −β, −α, −color) 
09   bestValue := max(bestValue, v) 
10   α := max(α, v) 
11   if α ≥ β 
12    break 
13  return bestValue 

如果需要的話我可以加我的C++實現的negamax算法

+2

只需檢查循環中經過的時間。 –

+0

@ KarolyHorvath好的,但是我怎樣才能確保我在5秒後返回當前最佳值? – FrankK

+0

「最佳價值」是什麼意思? –

回答

1

我能看到的唯一的困難是遞歸,但那不是真正的問題,

01 function negamax(node, depth, α, β, color, startTime) 
02  if (currentTime - startTime > 5sec) or depth = 0 or node is a terminal node 
03   return color * the heuristic value of node 

爲了方便起見,你可以使用包裝:剛與當前時間和在每個呼叫檢查的開始。如果經過時間是更大的超過5秒叫它

function negamaxWrap(node, depth, α, β, color) 
    return negamax(node, depth, α, β, color, currentTime) 

如何確保您獲得最佳價值?當堆棧unwinded返回值將仍然通過測試:

bestValue := max(bestValue, v) 

這樣你會得到迄今爲止發現的值max

+0

這是否也意味着返回的節點是目前發現的最佳節點? – FrankK

+0

@ user3499284增加了一句 – user463035818

+0

令人驚歎,我會試試這個。 – FrankK