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