博弈树搜索
在下图中,第一层节点表示开始局面,我方先走,第二层节点表示我方可走的三个位置,第三层节点表示对于我方的每一种走法对手的各种走法,下方数字代表了对每个局面的评价值。这里的评价值都是相对于我方来说的。
根据常规,我方在第二层选择时会选择评价值最大的节点去走,在第三层选择时,要考虑对手走相对我方最不利的棋,因此选择评价值最低的节点,这样评价值从最底层更新到最高层,被称为极小极大搜索过程。
举例说明,节点值为-2, 2节点值为1,选择最小值,因此3节点被更新为-2,传递到上层,目前4节点>=-2,接着走中间这条路,根据5节点传递到6节点,目前6节点<=-3,现在因为4节点>=-2,6节点<=-3,出现剪枝,6节点的其余节点便可以不用访问,这就被称为alpha-beta剪枝技术。
以上说明了父子节点间可以进行alpha-beta剪枝,那隔代之间可不可以呢,如下图已知1节点<=0,2节点>=4,选择为空集,是不是应该出现剪枝呢?
下面我们来证明这个问题。
假设2节点值经过中间节点传递到了3节点(若3节点值不是由2节点传递的,则2节点的剪枝与否与3节点不起关系),2节点处发生剪枝,当且仅当其他子节点值大于4才会对2节点值产生影响,假设为5,不管2节点值为4还是5传递到3节点,都对1节点产生不了影响,因为1节点要求<=0,因此2节点处可以发生剪枝。
引入alpha值和beta值
由上面论证看出,隔代剪枝可行,这样也大大提升了剪枝的效果,但同时带来了编程的复杂度,于是我们想到,为每个节点设立 α 值和 β 值,初始 α=−