【转载】 Alpha-beta剪枝
原地址:https://www.jiqizhixin.com/graph/technologies/56dbb21e-c3f9-4e06-b16a-2e28f25b26c8
===========================================
人机博弈是人工智能的重要分支,人们在这一领域探索的过程中产生了大量的研究成果,而极小化极大算法(minimax)是其中最基础的算法,它由Shannon在1950年正式提出。Alpha-beta剪枝的本质就是一种基于极小化极大算法的改进方法。在人机博弈中,双方回合制地进行走棋,己方考虑当自己在所有可行的走法中作出某一特定选择后,对方可能会采取的走法,从而选择最有利于自己的走法。这种对弈过程就构成了一颗博弈树,双方在博弈树中不断搜索,选择对自己最为有利的子节点走棋。在搜索的过程中,将取极大值的一方称为max,
===========================================
人机博弈是人工智能的重要分支,人们在这一领域探索的过程中产生了大量的研究成果,而极小化极大算法(minimax)是其中最基础的算法,它由Shannon在1950年正式提出。Alpha-beta剪枝的本质就是一种基于极小化极大算法的改进方法。
在人机博弈中,双方回合制地进行走棋,己方考虑当自己在所有可行的走法中作出某一特定选择后,对方可能会采取的走法,从而选择最有利于自己的走法。这种对弈过程就构成了一颗博弈树,双方在博弈树中不断搜索,选择对自己最为有利的子节点走棋。在搜索的过程中,将取极大值的一方称为max,取极小值的一方称为min。max总是会选择价值最大的子节点走棋,而min则相反。这就是极小化极大算法的核心思想。
极小化极大算法最大的缺点就是会造成数据冗余,而这种冗余有两种情况:①极大值冗余;②极小值冗余。相对应地,alpha剪枝用来解决极大值冗余问题,beta剪枝则用来解决极小值冗余问题,这就构成了完整的Alpha-beta剪枝算法。接下来对极大极小值冗余和具体剪枝过程作简要介绍。
极大值冗余如图1所示,这是一颗博弈树的某一部分,节点下的数据为该节点的值,节点B的值为20,节点D的值为15,这里,C为取极小值的min节点,因此节点C的值将小于等于15;而节点A为取最大值max的节点,因此A只可能取到B的值,也是就说不再需要搜索C的其他子节点E和F的值就可以得出节点A的值。这样将节点D的后继兄弟节点减去称为Alpha剪枝。

图 1 极大值冗余的Alpha剪枝
极小值冗余如图2所示,这也是一颗博弈树的某一部分,节点B的值为10,节点D的值为19,这里,C节点为取最大值max节点。因此,C的值将大于等于19;节点A为取极小值的min节点,因此A的值只能取B的值10,也就是说不再需要求节点C的子节点E和F的值就可以得出节点A的值。这样将节点D的后继兄弟节点减去称为Beta剪枝。

图2 极小值冗余的Beta剪枝
[描述来源:Shannon, C. E. (1950). XXII. Programming a computer for playing chess. The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science, 41(314), 256-275.
URL:http://www.tandfonline.com/doi/pdf/10.1080/14786445008521796
描述来源:Knuth, D. E., & Moore, R. W. (1975). An analysis of alpha-beta pruning. Artificial intelligence, 6(4), 293-326.
URL:http://www.sciencedirect.com/science/article/pii/0004370275900193
描述来源:Su, Y. J. F. (2009). IMPROVEMENT ON ALPHA-BETA SEARCH ALGORITHM IN CHINESE CHESS [J]. Journal of Beijing Normal University (Natural Science), 2, 013.
URL:http://en.cnki.com.cn/Article_en/CJFDTotal-BSDZ200902013.htm]
===========================================
发展历史
Shannon在1950年提出了极小化极大算法,奠定了计算机博弈的理论基础。1955年,MacCarthy提出了类似Alpha-beta剪枝算法。此后,多名学者先后独立发现Alpha-beta算法并发表相关论文,比如Richards、Kotok和Brudno等人。Knuth等人在1975年优化了算法,提出了负极大值(negamax)概念,这一概念的原理本质上与极小化极大值算法并无不同,但是却不需要系统区分取极大值者和极小值者,使得算法更加统一。此外,Knuth等人也对alpha-beta剪枝算法的搜索效率进行了深入的研究,Pearl也在1982年证明了alpha-beta剪枝原理的最优性。
主要事件
| 年份 | 事件 | 相关论文 |
| 1950 | Shannon提出了极小化极大算法(minimax),奠定了计算机博弈的理论基础 | Shannon, C. E. (1950). XXII. Programming a computer for playing chess. The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science, 41(314), 256-275. |
| 1955 | MacCarthy提出了类似Alpha-beta剪枝算法的思想 | McCarthy, J. (1955). Human-Level Ai Is Harder Than It Seemed. |
| 1961 | Richards和Hart独立提出alpha-beta剪枝原理 | Richards, D. J., & Hart, T. P. (1961). The alpha-beta heuristic. |
| 1975 | Knuth提出了负极大值(negamax)概念,并深入研究了alpha-beta算法的效率问题 | Knuth, D. E., & Moore, R. W. (1975). An analysis of alpha-beta pruning. Artificial intelligence, 6(4), 293-326. |
| 1976 | Newell和Simon使用了经过多次改造的alpha-beta剪枝算法 | Newell, A., & Simon, H. A. (1976). Computer science as empirical inquiry: Symbols and search. Communications of the ACM, 19(3), 113-126. |
| 1982 | Pearl证明了alpha-beta剪枝原理的最优性 | Pearl, J. (1982). The solution for the branching factor of the alpha-beta pruning algorithm and its optimality. Communications of the ACM, 25(8), 559-564. |
| 2012 | Saffidine等人提出了alpha-beta剪枝在博弈游戏中的一揽子解决方案。论文中首先对这类博弈游戏进行了泛化抽象,定义了这类游戏的一般框架,然后基于这些框架提出了通用的(general)解决方案。 | Saffidine, A., Finnsson, H., & Buro, M. (2012, July). Alpha-Beta Pruning for Games with Simultaneous Moves. In <i>AAAI</i>. |
发展分析
瓶颈
Alpha-beta剪枝本质是alpha剪枝和beta剪枝的结合,这两种剪枝的发生条件不同,因此在博弈中总是首先需要区分取极小值和取极大值方,这在一定程度上让算法的效率打了折扣。
未来发展方向
Alpha-beta剪枝是对极小化极大算法的一种改进,但是在实际应用过程中,alpha-beta剪枝首先要区分出博弈双方谁是取极大值者,谁是取极小值者,达到剪枝条件时才会进行剪枝。这一优化方法虽然简洁明了,但在一定程度上让算法的效率打了折扣。因此在具体的博弈中,结合博弈的特定规则进行优化,比如说,将一些先验知识(prior knowledge)纳入剪枝条件中,这种基于具体应用的优化将是alpha-beta剪枝的重要发展方向。
Contributor: Keyu Qi
===========================================
注明:个人补充
一个比较详细介绍具体过程的文章,个人感觉不错,易懂:
一图流解释 Alpha-Beta 剪枝(Alpha-Beta Pruning)
Alpha-Beta剪枝用于裁剪搜索树中不需要搜索的树枝,以提高运算速度。它基本的原理是:
- 当一个 Min 节点的 β值≤任何一个父节点的α值时 ,剪掉该节点的所有子节点
- 当一个 Max 节点的 α值≥任何一个父节点的β值时 ,剪掉该节点的所有子节点
下略,具体见: https://www.7forz.com/3211/
===========================================
【转载】 Alpha-beta剪枝的更多相关文章
- 软件发布版本区别介绍-Alpha,Beta,RC,Release
Alpha: Alpha是内部测试版,一般不向外部发布,会有很多Bug.除非你也是测试人员,否则不建议使用. 是希腊字母的第一位,表示最初级的版本 alpha就是α,beta就是β alpha版就是比 ...
- 软工+C(2017第4期) Alpha/Beta换人
// 上一篇:超链接 // 下一篇:工具和结构化 注:在一次软件工程讨论课程进度设计的过程中,出现了这个关于 Alpha/Beta换人机制的讨论,这个机制在不同学校有不同的实施,本篇积累各方观点,持续 ...
- 软工+C(4): Alpha/Beta换人
// 上一篇:超链接 // 下一篇:工具和结构化 注:在一次软件工程讨论课程进度设计的过程中,出现了这个关于 Alpha/Beta换人机制的讨论,这个机制在不同学校有不同的实施,本篇积累各方观点,持续 ...
- K 班1-7,alpha,beta 作业成绩汇总
K 班1-7,alpha,beta 作业成绩汇总 千帆竞发 详细得分 短学号 名 1 2 3 4 5 6 7 alpha beta TOTAL 505 基智 4.55 1 -2 0 0 -10 4.3 ...
- 软件版本GA,RC,alpha,beta含义
软件版本GA,RC,alpha,beta含义 (1)RC:(Release Candidate) Candidate是候选人的意思,用在软件上就是候选版本.Release.Candidate.就是发行 ...
- 扩增子分析解读6进化树 Alpha Beta多样性
分析前准备 # 进入工作目录 cd example_PE250 上一节回顾:我们的OTU获得了物种注释,并学习OTU表的各种操作————添加信息,格式转换,筛选信息. 接下来我们学习对OTU序列的 ...
- (转)软件版本中的Alpha,Beta,RC,Trial是什么意思?
版本号:V(Version):即版本,通常用数字表示版本号.(如:EVEREST Ultimate v4.20.1188 Beta )Build:用数字或日期标示版本号的一种方式.(如:VeryCD ...
- 软件版本中的Alpha,Beta,RC,Trial是什么意思?
版本号: V(Version):即版本,通常用数字表示版本号.(如:EVEREST Ultimate v4.20.1188 Beta ) Build:用数字或日期标示版本号的一种方式.(如:VeryC ...
- 项目管理: Alpha,Beta,RC,GA,Release
Alpha: Alpha是内部测试版,一般不向外部发布.也可以认为是演示版本.允许存在一定的问题(例如功能组合.异常流程处理.稳定性.性能存在部分问题) ...
- Alpha,Beta,RC,RTM,EVAL,CTP,OEM,RTL,VOL
微软的一个系统(如Win 7)或开发工具(VS系列),往往会对应很多种版本,下面就介绍一下这些版本的含义: Alpha (阿尔法,希腊字母的第一位'α',代表最初的版本) Alpha是内部测试版, ...
随机推荐
- Javascript高级程序设计第五章 | ch5 | 阅读笔记
基本引用类型 Date 在不给定时间的情况下创建Date实例,创建的对象将保存当前的日期和时间. 要基于其他时间创建Date对象,必须传入其毫秒时表示 Date.parse() 月/日/年(5/21/ ...
- python pymysql 数据库查询操作
import pymysql db= pymysql.connect(host="", user='', database="", password='') c ...
- java8 Lambda 测试示例
import com.google.gson.Gson; import org.junit.Test; import java.util.Arrays; import java.util.IntSum ...
- CodeForces 1935A
题目链接:Entertainment in MAC 思路 当当前操作次数n为偶数时,若原字符串大于反转字符串则可以将原字符串反转n - 2次,则得到的还是原字符串,此时反转一次,并将其再次反转的字符串 ...
- hdu 5072 coprime不完整题解
Problem Description There are n people standing in a line. Each of them has a unique id number. Now ...
- python安装pywifi
1.Windows安装: 在Dos窗口中输入以下命令: pip install pywifi 如果找不到pip命令,那么需要将Python安装文件夹下Scripts文件夹的绝对路径加入环境变量中. 2 ...
- Python_12 多继承与多态
一.查缺补漏 1. self和super的区别:self调用自己方法,super调用父类方法 当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找 而当使用 super ...
- 推荐几款个人喜欢的IDEA开发工具主题【更舒适的开发】
IDEA,全称 IntelliJ IDEA ,是Java语言的集成开发环境,IDEA在业界被公认为是最好的 java 开发工具之一,尤其在智能 代码助手.代码自动提示.重构.J2EE支持. Ant . ...
- 将虚拟机跑在ceph之中
目录 openStack对接ceph 1. cinder对接ceph 1.1 ceph创建存储池 1.2 ceph授权 1.3 下发ceph文件 1.4 修改globals文件 1.5 部署cinde ...
- ECMA标准ECMAScript(JavaScript的一个标准)和C#
2024 年 6 月 26 日,第 127 届 ECMA 大会正式批准了 ECMAScript 2024 语言规范,这意味着它现在正式成为最新 ECMAScript 标准.ECMAScript是ECM ...