Negamax通常如下所示:
function negamax(node, depth, α, β, color) is
if depth = 0 or node is a terminal node then
return color × the heuristic value of node
childNodes := generateMoves(node)
childNodes := orderMoves(childNodes)
value := −∞
foreach child in childNodes do
value := max(value, −negamax(child, depth − 1, −β, −α, −color))
α := max(α, value)
if α ≥ β then
break (* cut-off *)
return value
如果最大化的玩家叫出,则初始叫叫
negamax(rootNode, depth, −∞, +∞, 1)
。我以最大化玩家称呼它的方式实现了Negamax,但是每个
rootNode
都是最大化玩家动作之一:function negamaxHandler() is
bestValue := −∞
bestNode := null
childNodes := generateMoves(currentGameState)
foreach child in childNodes do
value := negamax(child, depth-1, ???, ???, ???)
if value > bestValue then
bestValue := value
bestNode := child
return bestNode
因为Negamax返回一个值,所以我想要一个板状态(移动)。因此,我手动进行了Negamax的第一级操作,因此我可以分析最佳移动方向。但是我应该调用什么值
negamax
?为了更具说明性,如果最大化名为negamaxHandler
的播放器,应negamaxHandler
调用:negamax(child, depth-1, −∞, +∞, 1)
-negamax(child, depth-1, −∞, +∞, 1)
negamax(child, depth-1, +∞, −∞, -1)
-negamax(child, depth-1, +∞, −∞, -1)
或者是其他东西?澄清:
最大限度地提高玩家通话次数
negamaxHandler
中每个对negamax
的顶级调用都应最小化 最佳答案
正确的函数调用最终是-negamax(child, depth-1, −∞, +∞, -1)
,尽管negamaxHandler
函数需要更改:
function negamaxHandler(α, β, color) is
bestValue := −∞
bestNode := null
childNodes := generateMoves(currentGameState)
foreach child in childNodes do
value := -negamax(child, depth-1, -β, -α, -color)
if value > bestValue then
bestValue := value
bestNode := child
α := max(bestValue, α)
if α ≥ β then
break
return bestNode
将
negamaxHandler
称为negamaxHandler(−∞, +∞, 1)
。