扩展空步削减算法:提升国际象棋程序搜索性能
在计算机国际象棋领域,搜索算法的效率和准确性至关重要。早期的暴力搜索方法因风险高而逐渐被淘汰,如今前向剪枝方法成为主流,其中空步剪枝最为流行。本文将详细介绍扩展空步削减(Extended Null-Move Reductions,NMR)算法,对比其与标准空步剪枝及其变体的性能。
1. 标准空步剪枝
暴力搜索程序因风险高而不进行节点剪枝,空步剪枝则引入了基于动态标准的剪枝方案,相比当时的静态前向剪枝方法具有更强的战术能力。
空步剪枝基于这样的假设:在任何国际象棋局面中,即使允许“不移动”(空步),这也不是最佳选择,即最佳走法优于空步。基于此,通过空步搜索可轻松获得局面的下限α。具体步骤如下:
1. 进行空步操作,即交换行棋方(处于被将军状态或连续两步空步时不可操作)。
2. 进行深度缩减的常规搜索,并保存返回值。此值可作为局面下限,因为最佳走法的值必然优于空步所得值。
3. 若该值大于等于当前上限β,则进行剪枝(失败高);若大于当前下限α,则缩小搜索窗口;若小于当前下限,则对搜索无贡献。
空步剪枝的主要优势在于剪枝操作,最佳应用方式是围绕当前上限β进行最小窗口空步搜索,以减少搜索工作量。以下是典型的空步剪枝伪代码:
#define R 2 // depth reduction value
int Search (alpha, beta, depth) {
if (depth <= 0)
return Evaluate(); // in practice, Quiescence() is