用java编写博弈树_并行博弈树搜索算法-第3篇 优秀的园丁:Alpha-Beta算法
3.1Alpha-Beta算法
虽然博弈树的状态是有限的,但是状态个数却非常多.假设博弈树的深度为d,每个结点有b个分支,即分支因子(branchingfactor)为b,那么使用Min-Max方法搜索这个博弈树需要搜索
个结点.
然而幸运的是,Min-Max方法的一些搜索是没有必要的,故此可以剪除(cut-off)那些没有必要搜索,即对搜索进行剪枝(prune).Alpha-Beta算法是一种有效而常用的剪枝算法.
Alpha-Beta算法是在Min-Max方法基础上的一个改进.它维护一个搜索窗口(search window):[α, β].其中α表示在搜索进行到当前状态,当前对抗者能确保达到的最大的结点值.在进一步的搜索中,将竭力提高α这个下限.而β表示在搜索进行到当前状态,在对手逼迫下,当前对抗者所达到的最大的博弈值.如果α > β,那么就没有必要再搜索这个结点及其子结点了.
实际上,可以证明,剪除的这一段搜索也不可能搜索到最小最大值.也可以证明[4],使用搜索窗口[α = -∞, β = +∞]对根位置(root position)进行搜索,Alpha-Beta算法可以返回最小最大值.
AlphaBeta(node, alpha, beta)
1:if node.depth = 0 then
2:return EvaluateNegaMax(node)
3:for i ← 1 to node.branch.length
4:new_node ← Traverse(node, node.branch[i])
5:value ← -AlphaBeta(new_node, -beta, -alpha)
6:if value ≥ beta then
7:return beta
8:if value > alpha then
9:alpha ← value
10:return alpha
3.2Alpha-Beta算法的分析
3.2.1 Alpha-Beta算法的结点分类
按照[4]的方法,可以把博弈树中的结点进行分类,即对每个结点node,其种类node.type都有以下式子[5]:
其中type 1的结点又称为主变量结点(PrincipalVariation Nodes, 简称PV nodes)[1],因为主变量上的所有结点都是type 1,所有PV的结点又都在主变量上.由于搜索根结点是的搜索窗口为[-∞, +∞],所以PV结点的初始搜索窗口也为[-∞, +∞].假设PV结点搜索完成时,返回的子树博弈值为V,那么V是搜索其他子树的搜索窗口的下限.
type 2的结点又称为CUT结点.一个PV结点的第一个子结点也是PV结点,而它的其他子结点都是CUT结点.由于PV结点的第一个子结点总是比其他子结点先搜索完成,所以搜索CUT结点时,其父结点总是得到了第一个子结点的博弈值V.因此CUT结点的初始搜索窗口为[-∞, -V].由于博弈树是良序的,所以对CUT结点第一个子结点的搜索会立即引发一个剪枝,即CUT结点的子结点中除了第一个子结点都会被剪枝,所以这类结点是未定义的(undefined).
type 3的结点又称为ALL结点.ALL结点的父结点必定是CUT结点,而且其祖先结点中必定至少有一个结点是PV结点.对于满足这个条件的最小祖先结点,如果该结点的第一个子结点的博弈值为V,那么该ALL结点的初始搜索窗口位[V, +∞],其父结点的初始搜索窗口为[-∞, -V].
3.2.2 良序的博弈树
如果一棵树博弈树的每个内部结点的第一个子结点都返回最优的解,那么称这棵树是良序的.对一个良序的博弈树,Alpha-Beta算法会修剪一些无必要搜索的子树,修剪之后的树就称为最小树(minimal tree,或者critical tree).当博弈树是良序的时候,Alpha-Beta算法所需要搜索子树都包含在这个最小树中.按照上述结点的分类方法,最小树中的所有结点的类型都是已定的,因为那些类型为undefined的结点都会被剪枝.
均匀博弈树及其最小树
如果一个博弈树的所有内部结点(interior node)具有相同的分支因子,且所有的根结点到叶结点的深度相同,那么该搜索树就是一个均匀的(uniform).对于一个深度为d的均匀良序博弈树的的最小树,从根结点到叶结点,经历了d个边.设第i个边是其父结点的第
个分支.将所有
按照“.”连接起来形成一个串:
.设
为该串中第一个大于1的值.如果不存在
,即所有的
都为1,则该叶结点为PV结点.如果
存在,那么
对应边的子结点一定为CUT结点.这时如果d
- j是偶数,那么该串对应的叶结点为CUT结点,否则,如果d - j是奇数,该叶结点为ALL结点.
对一个CUT类型的叶结点,它对应的串存在着性质:对所有i,如果d - j是偶数,则
为1.这种串(除了全1的串)和CUT叶结点一一对应.这种串的个数为
,故此CUT叶结点的个数也为
.
同样,对一个ALL类型的叶结点,它对应的串存在着性质:对所有i,如果d - j是奇数,那么为1.这样的串(除了全1的串)和ALL叶结点一一对应.这样的串的个数为
,所以ALL叶结点的个数为
.再加上PV叶结点,一个最小树包含的叶结点个数为
,这也是在均匀博弈树中Alpha-Beta算法搜需要搜索的最少叶结点个数.
3.2.3 强有序的博弈树
很多时候,并不能做到让博弈树完全良序,但是可以通过存储表,启发式等方法改进Alpha-Beta算法,使得博弈树呈现较好的有序性.均匀博弈树的强有序性定义为[6]:
a. 以很高的概率(例如,70%),每个结点的第一个分支是最优的.
b. 以很高的概率(例如,90%),最优的决策位于搜索的前一少部分(例如,搜索的前1/4).
相对的,均匀博弈树的随机性定义为该搜索树的叶结点的值在固定区间内随机分布.
如果定义R(b, d)为在随机的归一化博弈树中需要搜索的叶结点的平均个数.定义S(b, d)为在强有序的归一化博弈树中需要搜索的叶结点的平均个数.那么有以下不等式:
= B(b, d) < S(b, d)< R(b, d) << M(b, d) =
本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article
-------------------
[1] Valavan Manohararajah(2001). Parallel Alpha-Beta Search on SharedMemory Multiprocessors. Master’s thesis, Graduate Department of Electrical andComputer Engineering, University of Toronto, Canada.
[2] A. Newell and H.A. Simon (1972). Human Problem Solving.Prentice-Hall, 1972.
[3] Stuart Russell and Prter Norvig (1995). Artificial Intelligence, AModern Approach. Prentice-Hall, Egnlewood Cliffs, 1995.
[4] Knuth, D.E. and Moore, R.W. (1975). An Analysis of Alpha-Beta Pruning.Artificial Intelligence, 6:293–326.
[5] Hopp, Holger and Sanders, Peter (1995). Parallel Game Tree Search onSIMD Machines. IRREGULAR '95: Proceedings of the Second International Workshopon Parallel Algorithms for Irregularly Structured Problems. 349-361.
[6] Marsland, T.A. and Campbell, M.S. (1982). Parallel Search ofStrongly Ordered Game Trees. ACM Computing Surveys, Vol. 14, No. 4, pp.533-551. ISSN 0360-0300.
用java编写博弈树_并行博弈树搜索算法-第3篇 优秀的园丁:Alpha-Beta算法相关推荐
- 用java编写博弈树_并行博弈树搜索算法-第1篇 什么是博弈树搜索算法
博弈树的搜索是人工智能领域一个重要的研究课题.许多完全信息的二人零和博弈问题都可以用博弈树搜索算法解决. 那么什么是二人零和博弈问题呢? 有一系列的博弈问题拥有以下性质[1]: 1. 有两个对抗者:对 ...
- 用java编写博弈树_并行博弈树搜索算法-第8篇 写在最后的话:有趣的的博弈算法...
毛主席说过,与人斗其乐无穷.博弈就是一个人与人斗争的过程.既然是斗争,那就有利益的争端.利益存在此消彼长,是谓"零和".既然斗争对方是人,那意味着他是一个有着主观能动性,有着智慧与 ...
- 用java编写博弈树_并行博弈树搜索算法-第7篇 另辟蹊径:其他的博弈树并行搜索算法...
除了基于Alpha-Beta算法的博弈树并行搜索算法外,还有其他的博弈树搜索算法.现简要介绍如下. 7.1SSS*算法及其并行化 Alpha-Beta算法是一种基于Min-Max方法的固定深度(fix ...
- java编写存钱_用Java编写一个简单的存款
package desposit.money; public class DespositMoney { public static void main(String[] args) { Custom ...
- java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势
java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...
- java 编写代码_如果您在2015年编写过Java代码-这是您不容错过的趋势
java 编写代码 去年我们有机会遇到的最有趣趋势的实用概述 在这篇文章中,我们回顾了构成我们2015年对话的5个主题和新发展.与其他许多年终总结保持较高水平的不同,我们将做一个更实际的操作不用流行语 ...
- java编写代理服务器_如何编写Java代理
java编写代理服务器 对于vmlens (轻量级Java竞争条件捕获器),我们使用Java代理来跟踪字段访问. 这是我们学习的实现此类代理的经验教训. 开始 使用"静态公共静态无效值pre ...
- java编写正则表达式_如何用Java编写最快的表达式评估器之一
java编写正则表达式 当然,标题有点吸引人,但确实如此(您当然不相信自己没有伪造自己的基准,但这是另一回事了). 因此,上周我正在寻找一个小型且可用的库来评估数学表达式. 我几乎直接偶然发现了这个s ...
- java编写管理系统_用java编写学生信息管理系统
<用java编写学生信息管理系统>由会员分享,可在线阅读,更多相关<用java编写学生信息管理系统(7页珍藏版)>请在人人文库网上搜索. 1.用java编写学生信息管理系统im ...
最新文章
- 【实验】如何实现远程同一网段互通?
- PhotoKit 照片库的管理-获取图像
- WordPress RiPro极简蓝色调炮子子主题
- (转)Spring的bean管理(注解方式)
- python双目视觉三维重建代码_双目立体视觉的三维重建方法与流程
- Java求出1000内的完数
- 【关系抽取】从文本中进行关系抽取的几种不同的方法
- 计算机网络基础系列(一)概述、计算机网络性能
- linux tricks 之数据对齐。
- springboot毕业设计 基于springboot房产中介预约看房系统毕业设计设计与实现参考
- 前端模板inspinia
- 无人机,动力系统建模
- 及时复盘的好处_及时复盘,促进成长
- 这才是打开风变编程的正确操作方式
- 【Flutter】Dart 中国身份证验证,出生日期、性别、年龄查询
- Windows部署静态网站
- 为什么GPU训练网络还不如CPU快
- 由 excel 转换为 markdown,及收获
- android id如何修改密码,小编教你忘记Apple ID密码怎么办?以及如何修改密码
- OpenCV 外接矩形框 cv2.boundingRect、cv2.minAreaRect
热门文章
- Python 操作 Rabbit MQ 发布/订阅 (五)
- 【ML-SVM案例学习】003梯度下降之拉格朗日乘子法
- springmvc常用5种注解_简单有气势的排比句,常用的5种句式你会吗?
- 微信小程序中的绝对路径和相对路径
- 图片懒加载原理及实现
- 淘宝主搜索离线集群完成hadoop2.0升级
- CSS的概述、选择器
- 2022-2028年中国中低温余热发电行业市场发展潜力及投资前景分析报告
- 基于Visual C++2010 与office2010开发办公自动化(25)-如何使用自动化生成Excel图表
- 使用apksigner对应用进行签名(oppo市场需要打空白包)