5 对抗搜索(11.9)


1 博弈

1、博弈:是一类多Agent的竞争活动,如下棋、战争等。

2、博弈的类型

  • 双人完备信息博奔:两位选手(例如MAX和MIN)对抗,轮滚走步,每一方不仅知道对方已经走过的棋步,而且还能估计出对方未来的走步。

  • 机遇性博弈:存在不可预测性的博弈,例如掷币等。本博文不考虑此类博弈。

3、博弈树:若把双人完备信息博弈过程用图表示出来,就得到一棵【与/或树】,这种【与/或树】被称为博弈树。在博奔树中,那些下一步该MAX走步的节点称为MAX节点,下一步该MIN走步的节点称为MIN节点。

4、博弈树的特点

(1)博弈的初始状态是初始节点;
(2)博弈树中的“或”节点和“与”节点是逐层交替出现的;
(3)整个博弈过程始终站在某一方的立场上,例如MAX方所有能使自己一方获胜的终局都是本原问题,相应的节点是可解节点;所有使对方获胜的终都是不可解节点。


2 极大极小过程

对于简单的博弈问题,可生成整个博奔树,并找到必胜的策略。对于复杂的博弈问题,不可能生成整个搜索树,如国际象棋大约有10120个节点。一种可行的方法是用当前正在考察的节点生成一棵部分博弈树,并利用估价函数f(n)对叶节点进行静态估值

(1)对叶节点的估值方法是:那些对MAX有利的节点,估价函数就取正值;那对MIN有利的节点,其估价函数取负值,那些使双方均等的节点,其估价函数取接近于0的值。

(2)对非叶节点的估值方法:不直接计算非叶节点的值,而是必须从叶节点开始向上倒推。其倒推方法是:

  • 对于MAX节点,由于MAX方总是选择使估值最大的走步,因此,MAX节点的倒推值应该取其后继节点估值的最大值。

  • 对于MIN节点,由于MIN方总是选择使估值最小的走步,因此,MIN节点的倒推值应取其后继节点估值的最小值。

这样一步一步的计算倒推值,直至求出初始节点的倒推值为止的过程,称为极大极小过程

2.1 一字棋游戏

设有一个三行三列的棋盘,如下图所示:
在这里插入图片描述
两个棋手轮流走步,每个棋手走步时往空格上摆一个自己的棋子,谁先使自己的棋子成三子一线为赢。设MAX方的棋子用×标记,MIN方的棋子用O标记,并规定MAX方先走。

估价函数:e=e(+P)-e(-P)。其中e(+P)=【棋盘P上有可能使×成三子为一线的数目】;e(-P)=【棋盘P上有可能使O成三子为线的数目】。当MAX必胜,则e为正无穷大;若MIN必胜e为负无穷大。具有对称性的棋盘可认为是同棋盘。如下图(下图为图1)所示:
在这里插入图片描述
上图为图1,则e=e(+P)-e(-P)=5-4=1。怎么算的呢?首先,图1的4个棋盘都一样,看第一行第二列那个棋盘,×现在有7种摆法,如下:
在这里插入图片描述
在上面的棋盘上,可使×成三子为一线的数目为5,即e(+P)=5。在图1第一行第二列那个棋盘中O现在也有7种摆法,如下:
在这里插入图片描述
在上面的棋盘上,可使O成三子为一线的数目为4,即e(+P)=4。因此,图1的e=e(+P)-e(-P)=5-4=1。还有另外一种计算e的方法:在空棋盘上,共有8条3子一线的路线:(1)三行(红色);(2)三列(黄色);(3)两条对角线(蓝色)。如下(图2):
在这里插入图片描述
上面是图2,下面是图1(上面也有图1,我为了方便,再放一次):
在这里插入图片描述
图1的4个棋盘都一样,看第一行第一列那个棋盘:棋盘上分别放了一个O和1个×,其中O占了三条线,分别为图2的第一行、第一列、正对角线,如下:
在这里插入图片描述
因此,无论如何,×不可能在O占的这三条线上三子连线,但是剩8-3=5条可以三子连线,因此e(+P)=5。同样地,看图1第一行第一列那个棋盘,×占了四条线,分别为图2的第二行、第二列、正负对角线,如下:
在这里插入图片描述
因此,无论如何,O不可能在×占的这四条线上三子连线,但是剩8-4=4条可以三子连线,因此e(-P)=4。最后得到e=e(+P)-e(-P)=5-4=1。

那就开始游戏吧。初始状态是一个空棋盘S0,先×走。因为不考虑对称的棋盘,所以×的走法有三种:S1,S2,S3。如下:
在这里插入图片描述
注意:因为【下一步该MAX走步的节点称为MAX节点;下一步该MIN走步的节点称为MIN节点。】,因此在上图中S0那一层即第一层为MAX节点,S1S2S3那一层即第二层为MIN节点。到第二层了,现在棋盘该O走了,如下:
在这里插入图片描述
根据上图:S1对应的O走法有5种,S2对应的O走法有5种,S3对应的O走法有2种。这12种棋盘在第三层了,第三层为MAX节点。这12个棋盘的估价函数值e=e(+P)-e(-P)根据计算,已经写在下图中了:
在这里插入图片描述
但是等一下,其实现在O和×都还没走步呢!首先,上图是一颗博弈树,也称为【与/或树】。S0为空棋盘,×先下,×在S0下可以走S1或S2或S3,而O在这三种情况下可以分别有5、5、2共12种走法。也就是说,这些都是×在思考第一步该怎么走,×想:“我走的步必须对我最有利,对O最有害”。也就是说在S1或S2或S3三种情况下,×会选对自己最有利的,也就是选3个中e最大的那一个,那S1或S2或S3的e怎么算呢?

在本节也就是第二节开始时说了:对非叶节点的估值方法:不直接计算非叶节点的值,而是必须从叶节点开始向上倒推。其倒推方法是:(1)对于MAX节点,由于MAX方总是选择使估值最大的走步,因此,MAX节点的倒推值应该取其后继节点估值的最大值。(2)对于MIN节点,由于MIN方总是选择使估值最小的走步,因此,MIN节点的倒推值应取其后继节点估值的最小值。

现在第二层,也就是S1,S2,S3就是非叶节点。根据上面的方法,因为这三个是MIN节点,所以倒推值应取其后继节点估值的最小值,也就是说【e(S1)=-1,e(S2)=-2,e(S3)=1】,现在第二层的e都有了,那第一层,也就是S0取刚刚计算的-1、-2、1的最大值1,即【e(S0)=1】,如下:
在这里插入图片描述
那现在就确定了,在空棋盘下,×放在S3位置的时候,对×最有利;×走后就轮到O走了,O只有两种走法,它不傻的话就会选S4:因为e(S4)=1,e(S5)=2,O是MIN节点,所以取后继中估价函数值最小的走法,也就是现在走S4对O最好。可惜,MIN方脑子不好,走了S5,如下(和S5一样,只是棋盘换了个方向):
在这里插入图片描述
现在上图就是现在的棋盘,从这里开始,重新开始画博弈树,现在轮到×走步,于是第一层为MAX节点,×有以下四种走法:
在这里插入图片描述
现在只考虑最左面的那个走法吧,也就是说现在棋盘是这样的:
在这里插入图片描述
现在轮到O走了,有以下六种走法:
在这里插入图片描述
那上图中的父节点的e就很好算了:首先后继棋盘有6种,然后计算每个棋盘的e值,如下:
在这里插入图片描述
因为父节点(就是上图的那个节点)是MIN节点,所以倒推值应取其后继节点估值的最小值,也就是说e=1。

可以根据现有的棋盘,不断地去做预测。以MAX方,也就是×为例,利用画出的博弈树,根据后继节点计算MAX节点的e,然后选择对MAX方最有利的走法,也就是e最大的走法,在MIN方走步后,再画博弈树,再继续计算e,再选择对MAX方最有利的走法,也就是e最大的走法…如此循环,直至将O方击败或者自己失败。如此,一字棋游戏(博弈游戏)就根据极大极小过程方法进行完毕了。

下面讲α-β剪枝。


3 α-β剪枝

1、剪枝(Pruning):极大极小过程是先生成与/或树,然后再计算各节点的估值,这种生成节点和计算估值相分离的搜索方式,需要生成规定深度内的所有节点,因此搜索效率较低。如果能边生成节点边对节点估值,并剪去一些没用的分枝,这种技术被称为α-β剪枝。

2、剪枝方法

1)MAX节点的α值为当前子节点的最大倒推值;

2)MIN节点的β值为当前子节点的最小倒推值;

3)α-β剪枝的规则如下:

  • 任何MAX节点n的α值大于或等于它先辈节点的β值,则n以下的分枝可停止搜索,并令节点n的推值为α。这种剪枝称为β剪枝。

  • 任何MIN节点n的β值小于或等于它先辈节点的α值,则n以下的分枝可停止搜索,并令节点n的倒推值为β。这种剪枝称为α剪枝。

3.1 α-β剪枝的简单例子

看下面的图片:最上面的紫色节点为MAX节点,第二层的棕色节点A1,A2,A3为MIN节点,这三个节点的子节点即叶子节点共有9个,每个叶子节点的e值已经写在自己下面:
在这里插入图片描述
现在根据叶子节点的e值计算第二层的A1,A2,A3,即MIN节点的e值。MIN节点的倒推值应取其后继节点估值的最小值,即【e(A1)=3,e(A2)=2,e(A3)=2】,如下:
在这里插入图片描述
现在考虑下面的情况:在9个后继中,没计算A2后两个后继的e值,将二者的e值设为X和Y。那现在为了计算第一层根节点即MAX节点的e值有必要算X和Y吗?不需要。因为它的e值取的是e(A1)、e(A2)、e(A3)的最大值,而e(A1)、e(A2)、e(A3)取的是各自三个后继节点e值的最小值,即:

e(root)=max{min(3,12,8),min(2,X,Y),min(14,5,2)}=max{3,min(2,X,Y),2}=max(3,Z,2),Z=min (2,X,Y)≤2

所以e(root)=max(3,Z,2)=3,计算MAX节点的e值根本不需要计算XY!这样大大减少了计算量!!
在这里插入图片描述

3.2 α-β剪枝的具体例子

如下图所示,其中最下面一层节点旁边的数字是假设的估值:
在这里插入图片描述
在上图中,根据K、L、M的估值推出节点F的倒推值为4(取4、8、6的最小值4),即F的β值为4。由此可推出节点C的倒推值≥4。由N可知G的倒推值≤1,而C的倒推值≥4,所以无论G的另一个子节点的估值是多少,都不可能取G的值,所以可以将G的其它分支剪掉,此时C的α值为4。看下图:
在这里插入图片描述
上图中,把C节点圈了起来。现在A的子节点有C和D,C的α值已经定为4,所以C的那些分支就不需要再看,只关注节点C和节点D及节点D的分支就好。根据P、Q的估值推出节点H的倒推值为5(取5、8的最小值5),即H的β值为5。由此可推出节点D的倒推值≥5。由C可知A的倒推值≤4,而D的倒推值≥5,所以无论D的另一个子节点的估值是多少,都不可能取D的值,所以可以将D的其它分支剪掉,此时A的β值为4。看下图:
在这里插入图片描述
上图中,把A节点圈了起来。现在S0的子节点有A和B,A的β值已经定为4,所以A的那些分支就不需要再看,只关注节点A和节点B及节点B的分支就好。根据R的估值推出节点I的倒推值≤0,根据S的估值推出节点J的倒推值≤-6。由此可推出节点E的倒推值≥0。由E可知B的倒推值≤0,而S0的倒推值≥4,所以无论B的其他子节点的估值是多少,都不可能取B的值,所以可以将B的其它分支剪掉,此时S0的α值≥4。


END

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值