我为逆转游戏编写AI播放器,我决定使用NegaMax或MiniMax。 Pseodocode:
function negamax(node, depth, α, β, color)
if node is a terminal node or depth = 0
return color * the heuristic value of node
else
foreach child of node
val := -negamax(child, depth-1, -β, -α, -color)
{the following if statement constitutes alpha-beta pruning}
if val≥β
return val
if val≥α
α:=val
return α
但是我需要将Node发送给这个函数,我该如何创建这个节点?就像创建节点,所有可能的移动状态,然后创建子节点为每个人可能移动节点?
如果你可以帮助α,β值......
答案 0 :(得分:1)
节点可能意味着代表单个州。在游戏中,这是棋盘的状态(对于奥赛罗来说,棋子的位置,它的移动等等)。通常在使用alpha / beta修剪的游戏中,生成所有下一个状态是可能的,但是生成所有可能位置的所有状态都不是。
如果你正在使用Java,那么一个Node对象可能有一个方法getChildren()来从该状态生成所有可能的移动,它们本身就是Node对象。
对于α,β值,这些值在Integer.MIN_VALUE和Integer.MAX_VALUE初始化