我试图实现我的negamax alpha beta算法的时间限制,但我似乎无法弄明白。我想要实现的是:开始计算一个移动,如果计算在5秒内完成,则返回此时的最佳移动。
我该怎么做? 甚至可以用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
如果需要,我可以添加我的negamax算法的c ++实现
答案 0 :(得分:1)
我能看到的唯一困难是递归,但这不是真正的问题,只需用当前时间调用它,并在每次调用开始时检查时间是否超过5秒:
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
为方便起见,您可以使用包装器:
function negamaxWrap(node, depth, α, β, color)
return negamax(node, depth, α, β, color, currentTime)
如何确保您获得最佳价值?当堆栈展开时,返回的值仍将通过测试:
bestValue := max( bestValue, v )
因此,您将获得到目前为止找到的max
个值。