函数

时间:2017-04-12 14:06:18

标签: c++ algorithm

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

1 个答案:

答案 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个值。