α,β剪枝详解\alpha,\beta剪枝详解α,β剪枝详解

示例图

步骤详解

基础原理

这里我们先要理解什么是α,β\alpha,\betaα,β剪枝:α\alphaα是下界,β\betaβ是上界。

此外,作为博弈的双方,最大值方(用方块表示)总是试图做出决策使值最大,最小值方(用圆表示)总是试图做出决策使值最小,这里我们带入最大值方,站在A的角度,判断究竟是选择B还是C能满足我们的目标。

步骤详解

1. 从A开始深度优先搜索,一直搜索到I,得到值为1,因此下界alpha为1,也就是说D的决策最差为1。
2. 再次搜索,从D->J,得到J的值为3,因为D是最大值方,所以此时alpha为3(因为最大值方总是会选择最大的那个)
3. 由于D的所有的值已经确定,所以D的值为3。
4. 由于D的值确定,所以可以回到B(这里的原则是如果子节点中有个值确定,就可以返回上下界给父节点),B是最小值方,知道D的值为3,所以他要尽可能使值小,他把上界beta更新为3。
5. 从D开始搜索E,E搜索到K为4,E的下界更新为4,这个时候其实不用去搜索E的其他子节点了,因为4已经大于B的上界beta3,也就是说在E这个结点,可能选到一个值大于从D中得到的值,B不会傻乎乎的给E这个机会,这也是剪枝的地方
由此,我们大致可以归纳出求最大值的方法:
1. 如果是叶子节点直接返回
2. 搜索子节点,如果某个子节点大于beta,则返回;否则一直寻找子结点中的最大值,并且试图更新alpha值
具体实现在“代码实现”部分(max_value(node,alpha,beta))
6. 所以B的值为3,由此可以确定A的下界为3,从A开始搜索,一直到O,得到值为2
7. F的alpha更新为2,再次搜索P,得到值为1,1<alpha,所以不产生影响
8. F的值确定为2,C的上界确定为2,C的上界小于A的下界,所以现在剪枝。
由此,我们可以大致归纳出求最小值的方法:
1. 如果使叶子节点直接返回
2. 搜索子节点,如果某个子节点小于等于alpha,则返回;(针对父节点)否则一直寻找子节点中的最小值,并试图更新beta(针对子节点)
具体实现在“代码实现”部分(min_value(node,alpha,beta))

代码实现

def max_value(self,node,alpha,beta):if(self.isTerminal(node)){   #如果使叶子节点return node.get_value();}clf = float('-inf') #初始值设置为-inffor chld in node.children:   #遍历子节点clf = max(clf,min_value(chld,alpha,beta))if clf >= beta:return clfalpha = max(alpha,clf)node.val = clfreturn clf
def min_value(self,node,alpha,beta):if(self.isTerminal(node)){return node.get_value();}clf = float('inf')for chld in node.children:chld = min(clf,max_value(chld,alpha,beta))if clf <= alpha:return clfbeta = min(beta,clf)node.val = clfreturn clf

难点分析

个人觉得这个剪枝方法的难点在于不明白到底是在哪里剪枝?

其实这里的剪枝是在父节点与子节点间的,假如我们站在C的角度上,它的父节点A因为B(B=2),设定了下界为2,此时C进行探索,如果F的值为1,那么C就不用再探索了,因为A不会给C这个机会去得到F;我们再站在G的角度上,G的父节点由于探索了F,因此设定上界为(F=2),而此时G探索到Q(3),那么G也可以不用探索了,因为C不会给G这个机会去选择Q。

所以剪枝是在父节点和子节点间的:最大值方给出下界的压力,最小值方给出上界的压力(所以代码中最小值方一直更新下界,就是为了找到一个更好的下界)。

alpha,beta剪枝详解相关推荐

  1. 最清晰易懂的MinMax算法和Alpha-Beta剪枝详解

    最清晰易懂的MinMax算法和Alpha-Beta剪枝详解 参考文章 http://web.cs.ucla.edu/~rosen/161/notes/alphabeta.html https://ww ...

  2. 五子棋AI算法第三篇-Alpha Beta剪枝

    剪枝是必须的 五子棋AI教程第二版发布啦,地址:https://github.com/lihongxun945/myblog/labels/%E4%BA%94%E5%AD%90%E6%A3%8BAI% ...

  3. alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝

    剪枝是必须的 上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250 ...

  4. 基于python的AI五子棋实现(极大极小值搜索和alpha beta剪枝)

    1.极大极小值搜索介绍 人机博弈是人工智能的重要分支,人们在这一领域探索的过程中产生了大量的研究成果,而极小化极大算法(minimax)是其中最基础的算法,它由Shannon在1950年正式提出. M ...

  5. 五子棋AI算法-Alpha Beta剪枝

    上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250000,在我的 ...

  6. 【Python】Beta分布详解

    投硬币,硬币是正还是反,这属于两点分布的问题. 疯狂投硬币,正面出现的次数,服从二项分布:[Python]从二项分布到泊松分布 二项分布中,若特定时间内的伯努利试验次数趋于无穷大,那么在某一时刻发生某 ...

  7. python alpha beta 剪枝_一看就懂的 Alpha-Beta 剪枝算法详解

    Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度. 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β  则N有解. 若 α > β 则N无解. ...

  8. alpha beta 剪枝算法

    摘自wikipedia alpha-β修剪的好处在于可以消除搜索树的分支.这样,搜索时间可以限制在"更有希望"的子​​树中,并且可以在同一时间执行更深入的搜索.该算法和极小化极大算 ...

  9. Android动画效果translate、scale、alpha、rotate详解

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

最新文章

  1. Linux下基于密钥的安全验证实现方法
  2. [BUUCTF-pwn]——ciscn_2019_n_3
  3. 前后端分离的项目部署到tomcat_前后端分离后,tomcat服务器部署和发布
  4. signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
  5. 大话知识图谱--构建知识图谱第一步定义数据模型
  6. python对图像二值化_python如何二值化图像
  7. MFC中的CString类使用方法指南
  8. linux串口查看mxser,Ubuntu8.04安装CP-168U的串口连接问题
  9. 32位算术逻辑运算单元alu设计_依据基本原理构建现代计算机(二)—— ALU
  10. 如何在win10系统上安装linux子系统
  11. 软件单元测试(Unit Test )最佳实践
  12. Win10自带工具DISM修复系统
  13. 如何用软件测试固态颗粒,【英睿达 BX500固态硬盘使用总结】颗粒|读写速度|写入测试|建议_摘要频道_什么值得买...
  14. 厉害了!百度智能云NIRO Pro智能机器人半年内连获三项产品设计大奖
  15. 中国十大基金公司排行榜
  16. 紫米芋泥麻薯咸蛋黄肉松盒子
  17. 大一新生HTML期末作业,网页制作作业——明星介绍易烊千玺网站HTML+CSS
  18. POJ 2159 分组密码与流密码
  19. java飞机大战飞机背景滚动_飞机大战背景/音效动起来
  20. 解决:Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足的问题

热门文章

  1. Java字符串中判断是否有汉字
  2. Photoshop快速把动漫照片转成线描效果
  3. VUE_UI.UI组件和CLI脚手架
  4. ElementUi中NavMenu 导航菜单router用法
  5. 投诉方:Incopro Limited,知识产权名:Arduino
  6. SVN报错 Error: 'XXX' does not support the HTTP/DAV protocol
  7. PPP模式风正劲,安防企业要不要一起飞?
  8. 音频文件服务器,获取服务器地址的音频文件
  9. python正则表达式查找单词_正则表达式查找特定单词之后的所有单词?
  10. 解决在VMware上安装windows10全屏有黑边的问题