我试图实现我的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++实现

最佳答案

我能看到的唯一困难是递归,但这并不是真正的问题,只要用当前时间调用它,并在每次调用开始时检查所用时间是否大于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

09-25 20:45