最大最小法及α-β剪枝算法图解

(网上讲的都不是很好理解,贡献一下之前听慕课做的笔记,适合初学者比较简洁明了。)

要想理解α-β剪枝算法,必须从最大最小法的博弈问题讲起!注意不懂的同学不要跳过这一节。

  1. 最大最小法

       场景:双方博弈 

       前提:假设有两个人比赛取数字,一个人想尽可能的取大,另一个人想尽可能取小,数字的大小作为双方胜负的判断标准。从最底层叶子节点开始取数,两个人一人取一次,每次只能从上一次(即下一层)的结果中取数,最终根据最后一层节点(也就是最上方根节点)的值的大小(学名叫做评估值)进行胜负角逐。想取大的人给他取名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)。

(——这里的假设前提:博弈双方均会选择对自己最有利的方法去做。)

考察深度越深,算法博弈水平越高。不需要生成所有博弈树,只要到规定的深度即可。

 e58a0a0f9fef47f088eb060c6e21034b.png

89f60b88b4b845329fb678f5344c72fc.png


       2.最大最小法优化:α-β剪枝

       目的是减少博弈树扩展,减少使用内存,增加决策深度。

当前节点为MAX时,取左侧第一个评估值就是α值,为下限,若其他下层节点小于α则可直接剪枝;

当前节点为MIN时,取左侧第一个评估值就是β值,为上限,若其他下层节点大于β则可直接剪枝。

(看不懂吧😂,看不懂就对了,直接看下面案例就明白了~)

38bbbb993587405390759c2a4d628e4b.png

c22b835aabea43b682a29e5637cbace3.png

 

实际使用案例

6d8f6ea7307a42169e1a5fb41e35707a.png

下面为自己看图推理的过程:

前提背景和前面刚说的最大最小博弈一样,

假定第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)大于β则可直接剪枝。

 

综上,为了避免每次都死脑细胞的推理一遍,所以α-β剪枝直接给出一个结论,以后根据下图的规则,直接使用即可避免麻烦。

c22b835aabea43b682a29e5637cbace3.png

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值