3.1 Alpha-Beta算法
虽然博弈树的状态是有限的,但是状态个数却非常多.假设博弈树的深度为d,每个结点有b个分支,即分支因子(branchingfactor)为b,那么使用Min-Max方法搜索这个博弈树需要搜索个结点.
然而幸运的是,Min-Max方法的一些搜索是没有必要的,故此可以剪除(cut-off)那些没有必要搜索,即对搜索进行剪枝(prune).Alpha-Beta算法是一种有效而常用的剪枝算法.
Alpha-Beta算法是在Min-Max方法基础上的一个改进.它维护一个搜索窗口(search window):[α, β].其中α表示在搜索进行到当前状态,当前对抗者能确保达到的最大的结点值.在进一步的搜索中,将竭力提高α这个下限.而β表示在搜索进行到当前状态,在对手逼迫下,当前对抗者所达到的最大的博弈值.如果α > β,那么就没有必要再搜索这个结点及其子结点了.
实际上,可以证明,剪除的这一段搜索也不可能搜索到最小最大值.也可以证明[4],使用搜索窗口[α = -∞, β = +∞]对根位置(root position)进行搜索,Alpha-Beta算法可以返回最小最大值.
AlphaBeta(node, alpha, beta)
1: if node.depth = 0 then
2: return EvaluateNegaMax(node)
3: for i ← 1 to node.branch.length
4: new_node ← Traverse(nod