个人对Alpha-Beta搜索算法的理解

Alpha-Beta是对Max-Min搜索的剪枝。
那么Max-Min究竟是什么呢?
这个Max-Min算法可以应用于很多棋类游戏,例如五子棋。

博弈树

五子棋很明显的一个特点就是,你将尽最大努力在横竖斜方向使五个棋子连续排在一起,而你的对手将对你穷追堵截,最后谁先达到目标谁就获胜。
棋类游戏都有一个特点,你下一手,我下一手,那么如何使我下的每一手棋都是最优呢?枚举。
枚举出现在棋盘上我能下的每一手棋,在我下的每一手棋的基础上再去穷举对手的所有下法。。。如此下去,再由结果重新回溯至当前棋盘,就能知道当前棋盘的最优步。在这个枚举的过程中,一个棋盘衍生出N个棋盘,N个棋盘再衍生,这就是一个N叉树,也就是一颗博弈树。在每个棋盘当中,我们先规定有个分值,对应于这幅棋盘,对于我方而言,自然是分值越高,棋面越优。至于如何计算这个分值,这个过程就叫评估函数,这里暂且不提,每个棋类游戏的评估函数都不同。我们先假设我们已经有了每个棋盘所对应的分值,那么接下来的任务就是从博弈树中找到我们想要的分值。

Max-Min搜索

AB两个选手下棋,以A为思考对象,肯定想要使得棋面分数尽量地高,但对B而言,恰好相反。即矩形节点每次都想从子节点中取得极大值,而圆形节点则每次想从子节点中取得极小值。如下图代表下棋过程各个棋面的变化过程,假设已经知道了叶子节点棋盘的各分值,计算出根节点的分值应该不难,4B1=Min(3,17)=3,4B2=Min(2,12)=2,3A1=Max(4B1,4B2)=3依次反复计算。
在这里插入图片描述
这就相当于进行对树按左右中的顺序进行DFS搜索。但对于N叉树,其指数函数是爆炸式增长的。要想能够深层次地尽可能多地穷举更多层次的走法,就得提高搜索的算法效率。

Alpha-Beta剪枝搜索算法

这个算法其实就是相当于对上面的Max-Min进行剪枝。剪枝就是对一些分支进行裁剪。以上图为例,我们再来看看Max-Min的搜索过程。当得到4B1=3时,此时搜索到5A3这个点,也就是2。在这种情况下,其实3A1的值已经是确定了。
对4B2的右节点5B4进行分析。

  • 假设5B4依然是12,此时4B2=2,3A1=3
  • 当5B4为0,4B2=0,3A1=3

可以发现此时不管4B2还有多少节点又都取了什么值,都无法影响到3A1节点的值,那么对这些节点进行搜索就行无意义的,对他们进行裁剪。
从上面这个情况可以提炼出下面这个模型,当A<min1时,就可以对图示节点进行剪枝。
在这里插入图片描述
对于一开始的Max-Min继续进行搜索,此时3A1=3,要想确定2A1的值需先搜索3A2这颗子树。4B3=15,此时不管4B4这颗子树如何,2A1的值也已经被确定下来了。

  • 假设4B4是16,此时3A2=16,2A1=3
  • 当4B4是14,此时3A2=15,2A1=3

从而也能提炼出下面的剪枝模型,忽略节点的形状,当A>max1时,可以对图示节点进行剪枝。
在这里插入图片描述

标题启发式搜索

在Alpha-Beta基础上使用排序进行启发式搜索。TODO

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值