Alpha-Beta Pruning

Game tree :博弈树

有双人/多人博弈树,如下two-ply game tree

我们从leaf向上看,leaf深度为0,依次往上加,每层代表不同方状态。

比如上图0层我有9种可能的状态,对应于我不同的得分,我的目标就是MAX,即操作使得我能得分最大,而1层是对手可能的状态,他的目标是MIN,即让我的分数最小化。

则对于B,他可能取3,12,8,由于对手要MIN,故B=3。同理,C=2,D=2。

而对于A,可以取3,2,2,我需要MAX,因此我取A=3。

这样可以暴力搜索最佳路径,使得root最大,即我最大化自己的得分。

 

Alpha-Beta pruning是一种剪枝搜索策略,把明显不满足的枝叶剪掉。

还是以上图为例子,比如我们得到了B=3,可推得A我们至少可以得到A=3这个结果了。

此时搜索C的时候,发现第一个C=2,由于对手要MIN,因此C最多为2,2<3 =>我们是不可能选择C的,因为有更优的B。因此C无需继续搜索即可剪枝。

因此,具体搜索流程如下:

节点有[a,b]表示可取值范围

(a)刚开始只有一个状态3,故B可取最小值为3

(b)12>3,B操作是MIN,不取12

(c)8>3,同理,不取。此时确定B=3,同时向root深搜,A做MAX操作,目前最大可取到3

(d)2的出现表明C不可能取超过2的数(对C来说MIN操作有更优解是2),但A最小都可以取到3,因此C是不可能被A考虑的,故无需考虑C的其他分支,剪枝。

(e)D可取到14,14>3,延伸上去

(f)最终D只能取到2,A取最优解3.

 

伪代码,有点像剪枝深搜:

posted on 2015-11-21 23:28  IvanSSSS  阅读(1693)  评论(0编辑  收藏  举报

导航