α-β剪枝算法
前面介绍的基本搜索算法,在实际应用是是十分费时的,因为它需要考虑所有可能的棋步。有研究表明,在黑白棋的中盘阶段,平均每个局面大约有10步棋可供选择[1]。如果程序前瞻10步(搜索深度为10),就需要考虑大约100亿个局面。假设计算机以每秒1000万个局面的速度进行运算,每下一步棋大约需要运算十几分钟。因此,在有限的时间内,程序无法进行很深的搜索,这就大大制约了程序的棋力。
有没有更高效的搜索方法呢?Edwards、Timothy(1961年)[2]、Brudno(1963年)[3]等人相继在研究中发现,程序搜索过程中有很多局面是完全可以忽略的,并提出了α-β剪枝算法(Alpha-beta Pruning)。我们就仍以图1所示的局面为例,简要说明剪枝算法的原理。
图1 白先,当前最佳估值为0
假设白棋已经搜索了D6的后续变化,得出这步棋的估值为0。接着开始搜索F4这步棋,白棋下F4后形成图2所示的局面。
图2 黑先,当前最佳估值为+6
在这一局面中,黑棋相继搜索了C3、D3、E3三步棋,当