(网上讲的都不是很好理解,贡献一下之前听慕课做的笔记,适合初学者比较简洁明了。)
要想理解α-β剪枝算法,必须从最大最小法的博弈问题讲起!注意不懂的同学不要跳过这一节。
- 最大最小法
场景:双方博弈
前提:假设有两个人比赛取数字,一个人想尽可能的取大,另一个人想尽可能取小,数字的大小作为双方胜负的判断标准。从最底层叶子节点开始取数,两个人一人取一次,每次只能从上一次(即下一层)的结果中取数,最终根据最后一层节点(也就是最上方根节点)的值的大小(学名叫做评估值)进行胜负角逐。想取大的人给他取名MAX,他在根结点的评估值越大时越会赢(+ꝏ一定赢),想取小的人叫做MIN,他在根结点的评估值越小时越会赢(-ꝏ一定赢)。若值为0时表示两人平手。
如下图,考察距离最终根结点向前3步时(即考察深度为3),各节点的评估值。假设最后一步(第0层)是MAX来取数,往前三步分别是MIN,MAX,MIN取数。倒推着来看,若两个人都想赢,分别会再各自取数时怎么去做。MAX在根节点S选择后继节点时,下一层的评估值分别是3,1,则MAX应选择更大的一条路即SA。
看图上标注的第0-第3层,在第0层时,MAX可以选择第1层的AB节点的值,往前倒推,MIN在第1层时AB的值又分别可以选择第2层CDE和FG的值,MAX在第2层时可以选择第3层H-Q的值。
首先看最后一步,当处于第2层时MAX要作出决定,从H-Q中选择一个更大的值,那么C节点应该选择的就是H(因为H表示5,比I表示的0大,为了赢MAX要尽量选择更大的值才有可能赢);D对应K,EFG的评估值分别为最大的LOQ,即3,3,1;
MAX在第2层选完以后,MIN在第1层时为了赢必会选值更小的,即A选3(D或E),B选1(G)。
(——这里的假设前提:博弈双方均会选择对自己最有利的方法去做。)
考察深度越深,算法博弈水平越高。不需要生成所有博弈树,只要到规定的深度即可。
2.最大最小法优化:α-β剪枝。
目的是减少博弈树扩展,减少使用内存,增加决策深度。
当前节点为MAX时,取左侧第一个评估值就是α值,为下限,若其他下层节点小于α则可直接剪枝;
当前节点为MIN时,取左侧第一个评估值就是β值,为上限,若其他下层节点大于β则可直接剪枝。
(看不懂吧😂,看不懂就对了,直接看下面案例就明白了~)
实际使用案例:
下面为自己看图推理的过程:
前提背景和前面刚说的最大最小博弈一样,
假定第3层MIN来取值,第2层MAX来取值,第1层MIN,第0层(根结点S)MAX
即为了获胜,第3层,CFJLOR都是想取MIN值; 第2层,BIVW都是想取MAX值;
第1层AU想取MIN值; 第0层S想取MAX值。
一层一层来看:首先C想取MIN,就从根节点的DE中,找到MIN值为D(0),则C的值取0,此时将C的值=0,赋给上层的B作为其α值;
B 想取MAX值,就要比较下方的C、F两个结点,F值不知,需要再往F下层看。由于F想取MIN值,先看下层最左边G值为-3,将G的值= -3作为F的β值。
到这里就很明确了:由于B 想取下方结点CF中的最大值、F想取下方结点GH中的最小值,所以不论H的值是多少,最终F的取值一定是小于等于G值的,也就是F此时的β值,-3 ;
而此时再看B ,β= -3,小于α=0 , 由于B要取一个最大值,所以接下来就没必要再看H 的值了,不论H是多少都改变不了C大于F的命运,因此可以直接把F这一枝去掉不管了,直接剪枝!(唱一首destiny……~)
根据以上烦人的推理,总结出的结论就是前文所说的:
当前节点为MAX(此处指B)时,取左侧第一个评估值(此处指C)就是α值,为下限,若其他下层节点(此处指F)小于α则可直接剪枝;
同理推理A\B\I结点及其下方枝叶,也可以得到:
当前节点为MIN(此处指A)时,取左侧第一个评估值(此处指B)就是β值,为上限,若其他下层节点(此处指I)大于β则可直接剪枝。
综上,为了避免每次都死脑细胞的推理一遍,所以α-β剪枝直接给出一个结论,以后根据下图的规则,直接使用即可避免麻烦。