中国象棋博弈算法研究.docx
- 文档编号:11306374
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:60
- 大小:588.41KB
中国象棋博弈算法研究.docx
《中国象棋博弈算法研究.docx》由会员分享,可在线阅读,更多相关《中国象棋博弈算法研究.docx(60页珍藏版)》请在冰豆网上搜索。
中国象棋博弈算法研究
本科毕业论文
(科研训练、毕业设计)
题目:
中国象棋博弈算法研究
******
学院:
软件学院
系:
软件工程
专业:
软件工程
年级:
2004级
学号:
********
指导教师:
史亮职称:
副教授
2008年6月5日
摘要
计算机博弈是人工智能研究的一个重要分支,被专家门称为人工智能界的果蝇,意思是说人类对计算机博弈的研究衍生了大量的研究成果,这些成果在人工智能领域产生了重要影响。
国际象棋计算机博弈研究已经有了五十多年的历史,IBM公司在1997年开发出了超级计算机“深蓝”战胜了当时世界国际象棋大师卡斯帕罗夫,标志其水平已达到国际象棋世界冠军水平。
而中国象棋的历史更为悠久,虽然中国象棋计算机博弈研究起步晚于国际象棋,但起点高,国际象棋计算机博弈研究的成果为我们提供了很多的借鉴技术。
近年来随着研究的不断深入,中国象棋计算机博弈越来越成为继国际象棋后计算机博弈研究的热点之一。
本文在对目前主流的计算机博弈技术进行全面的综述后,对构成计算机博弈系统的四个组成部分进行了优化和改进,特别是针对静态估值算法不能应对局势变化的固有缺点,提出了动态局势再评估算法。
在此之上实现了一个中国象棋计算机博弈系统,论文主要研究了以下3方面的问题:
第一、对计算机博弈系统的四个组成部分及基础技术进行了研究,包括数据结构,着法生成,搜索算法,估值算法。
第二、研究了建立在Alpha-Beta搜索算法基础之上的各种优化技术。
主要讨论了窗口探测,静寂搜索,历史启发,深层迭代,NullMove5个方面的优化方法,并根据实验结果结合置换表技术提出了具体的组合方案。
第三、论文针对目前广泛使用的静态估值算法不能应对局势变化的固有缺点,提出了动态局势再评估算法。
通过引入“局势因子”,使得估值算法根据当前局面形势做出攻防策略。
关键词:
人工智能;中国象棋;博弈算法;动态局势再评估;局势因子
Abstract
Computergameisanimportantbranchofartificialintelligenceresearch.Itisdescribedasafruitflyoftheartificialintelligencebyexperts.That’stosayhuman’sresearchtothecomputergamehasachievedmassiveresearchresults.Theseachievementshaveplayedanimportantinfluenceonamorewidespreaddomain.Througoverseasresearchers’explorationofchessgamblingsystemformorethan50years,IBMCorporationdevelopedsupercomputer”DarkBlue”in1997,andhasdefeatedworldchessmasterKsparov;whiletheChinesechesshistoryismoreglorious.TheresearchofChinesechesscomputergameislaterthantheresearchofchesscomputergame,butitbasedonthecomputergame’sresearchresults.Withthedeeperstudyofresearch,Chinesechesscomputergamebecomesoneofthemostactivepartsofcomputergameresearcharearecently.
AftersummarizingrelatedresearchesonChinesechesscomputergame.Somekeyproblemsarestudiedanddiscussedinthisdissertation.Basedonabovework,anintegratedChinesechesscomputergamesystemaredesignedanddeveloped.Thewholeworkmainlyfocusesonthefollowingthreeaspects:
1.IntroducethekeycomponentpartsofaChinesechesscomputergamesystemwhichinvolvedatestructure,generatelegalmoves,searchalgorithmsandevaluatealgorithms.
2.MakeastudyontheoptimizationofsearchalgorithmbasedontheAlpha-BetaalgorithmwhichincludedPrincipalVariationSearch,quiescencesearch,historyheuristic,interativedeepening,null-movepruningandsoon.
3.Thispaperprovidesanalgorithmcalled“dynamicsituationevaluatealgorithm”whichavoidsthedrawbackofstaticevaluate.Astheintroductionof“decisionfactor”,computercanmakedecisionsbysituation.
Keywords:
artificialintelligence;Chinesechess;gamealgorithm;dynamicsituationevaluatealgorithm;decisionfactor
Contents
第一章绪论
1.1选题背景和研究意义
计算机博弈是人工智能研究的一个重要分支,被专家门称为人工智能界的果蝇,意思是说人类对计算机博弈的研究衍生了大量的研究成果,这些成果在人工智能领域产生了重要影响。
国际象棋计算机博弈研究已经有了五十多年的历史,IBM公司在1997年开发出了超级计算机“深蓝”战胜了当时世界公认第一的国际象棋大师卡斯帕罗夫,标志其水平已超过国际象棋世界冠军。
而中国象棋的历史更为悠久,早在2000多年前的战国时代就已经有了关于象棋的记载。
中国象棋计算机博弈的难度绝不会低于国际象棋,表1.1是几种棋类游戏空间复杂度和树复杂度对比,其中中国象棋的空间复杂度是国际象棋的100倍,而树复杂度则达到了1027倍。
表1.1几种棋类空间复杂度和树复杂度对比
中国象棋计算机博弈起步晚,七十年代末才有相关的研究文献,比国际象棋晚了近20年,相对国际象棋计算机博弈技术还不够成熟。
但近年来通过许多中国象棋软件编程爱好者和多个象棋开发团队的努力,使中国象棋软件水平有了长足的进步,慢棋已达到业余大师水平,快棋可以和象棋大师对抗。
但要设计出打败人类的中国象棋软件,还需要一段发展过程。
人工智能的先驱者们曾认真地表明:
如果能够掌握下棋的本质,也许就掌握了人类智能行为的核心;那些能够存在于下棋活动中的重大原则,或许就存在于其它任何需要人类智能的活动中。
因此对于中国象棋人机博弈问题的研究意义重大。
1.2中国象棋计算机博弈的发展历程
计算机中国象棋是在计算机国际象棋博弈的基础上发展起来的。
第一个棋弈程序写于电脑被真正发明之前,这是一个非常有趣的事实。
它是由数学家阿伦·图灵(AlanTuring)所编写的,他知道可编程电脑即将出现,一旦发明出来,就有下棋的能力。
图灵的伟大成就是领导专家小组破译了纳粹德国的“谜”密码,因此对第二次世界大战的决定性结束作出了贡献。
战争结束不久,他就写下了能够让机器下棋的指令。
由于当时还没有一台机器能够执行这些指令,于是他就自己执行(即图灵根据他所写的算法去运算,严格根据运算得出的结果去走棋),充当一个“人类CPU”,每走一步需要半个多小时。
国际象棋计算机博弈的重大突破应归属于C.Shannon1950年发表的两篇有关计算机博弈的奠基性文章(ProgrammingAComputerforPlayingChess和AChess-playingMachine)。
1946年美籍匈牙利数学家约翰·凡·诺依曼(JohnvonNeumann)被指派设计一台强大的计算机器以加快工作进度的任务。
到了1950年,一台叫“MANIAC一号”的巨型机被交付使用,它内装有数千个电子管和开关,每秒能执行10,000条指令,它也可以编程。
科学家并不马上用它来设计核弹,而是先试验一下这台机器,而首先做的事情之一就是编写一个下棋的程序,这是一个缩小的6x6棋盘,没有象。
虽然这么简化了但程序要搜索四层的深度仍需要12分钟。
50年代中期,这台机器下了三局棋。
第一局是自己对自己,白胜。
第二局是对一位让王后的强棋手,这局棋进行了10个小时,结果人类大师胜。
第三局机器的对手是一位刚学棋一个星期的的年轻姑娘,结果程序23回合得胜。
这是在智力博弈中人类首次负于电脑。
1958年,匹兹堡大学的三位科学家奈维尔、肖恩和西蒙(Newell,ShawandSimon)有重大发现:
可以从搜索树中剔除相当大的部分而不影响最后结果,他们把这叫Alpha-Beta算法。
很重要指出的是,这是一个纯数学领域的技巧,独立于任何国际象棋知识而生效。
1958年,IBM704成为第一台能同人下棋的计算机,名为“思考”思考速度每秒200步。
60年代中期,科学家德里夫斯断言,计算机将无法击败一位年仅10岁的棋手。
1967年,MIT的Greenblatt等人在PDP-6机器上利用软件工具开发的MacHackVI程序,参加麻省国际象棋锦标赛,写下了计算机正式击败人类的记录。
从1970年起,ACM(AssociationforComputingMachinery)开始举办每年一度的全美计算机国际象棋大赛。
从1974年起,三年一度的世界计算机国际象棋大赛开始举办。
1975年,电脑科学家肯·汤普森(KenThompson)觉得不能等待速度快5一25倍的百万美元级超级电脑来用于提高下棋能力。
他和贝尔实验室的同事一起决定建造一台专门用途的机器,使用了价值大约20,000美元的几百个芯片。
他们把这台机器叫做“尤物”(belle),它只会下国际象棋。
它能够每秒搜索大约18万个局面(而当时的超级电脑只能搜索5000个)。
“尤物”在比赛中可以搜索八至九层那么深,因此可以和大师同场竞技。
从1980年到1983年它赢得了世界电脑国际象棋和所有其它电脑竞赛冠军,直到被价钱贵上千倍的克雷X-MPs巨型机(CrayX-Mps)取代为止。
80年代中期,电脑科学家、卡梅隆大学的汉斯·贝利纳(HansBerliner)教授接手肯·汤普森放下的工作。
贝利纳的几个学生包括华人许锋雄等自行研究叫“芯测”的机器,后来则是“深思”(DeepThought)。
它只花5000美元但每秒搜索50万个局面。
就在它诞生的同一年,就因在一次比赛中击败了一位大师而震惊了国际象棋界,成了第一台国际象棋大师级的计算机。
许锋雄等后来加入了IBM,和其他人合作制造了IBM现在的“深蓝”(DeepBlue)。
1997年深蓝在“回敬赛”中战胜棋王卡斯帕罗夫,标志者计算机国际象棋博弈达到了一个新的里程碑。
计算机中国象棋的研究历史较短,文献和报道均很少。
台湾学者在七十年代末开始了计算机中国象棋的研究工作,并在八十年代初开发和出版了苹果机(6502)和IBMPC机(8088)象棋程序。
1983年南开大学开发了残局程序,并在随后的几年里开发了全局程序。
但由于中国象棋在计算机实现方面比国际象棋更加复杂,而且中国象棋博弈技术研究落后于国际象棋,所以中国象棋软件还远未达到世界冠军水平。
但近年来通过许多中国象棋软件编程爱好者和多个象棋开发团队的努力,使中国象棋软件水平有了长足的进步,慢棋已达到业余大师水平,快棋可以和象棋大师对抗。
当然要设计出打败人类的中国象棋软件,还需要象开发国际象棋软件那样有大量的商业金钱投入,比如要组建由中国象棋特级大师和最优秀象棋软件开发设计人员组成的开发团队,使用世界上最先进的超级计算机等。
1.3国内外研究现状
中国象棋计算机博弈研究开始于70年代,比较著名的软件有台湾的吴身润的《中国象棋》、光谱公司出品的《将族111》、晨业编制的《象棋水浒战》、《象棋武林帖》而且涉足这个领域比较早的是台湾的一些专家学者。
近几年,在内地也涌现出一批对中国象棋人机博弈问题感兴趣的高校、单位及个人,而且进入21世纪以后,中国象棋计算机博弈的研究受到越来越多的学者的关注,比较著名的博弈软件如表1.2所示。
图1.1知名象棋程序一览[1]
近年来,在各高校,团队和众多中国象棋爱好者的努力下,取得了可喜的成绩。
每年一届的中国象棋计算机博弈的国际奥林匹克大赛,这其中有2003年的世界冠军“纵马奔流”,2004年的世界冠军“谢谢象棋大师”,2005年的世界冠军“象棋奇兵”,2006年的世界冠军“棋天大圣”,而且今年又由东北大学、清华大学等高校承办了在北京举行的首届中国象棋人机博弈大赛,这些都体现了中国象棋的人机博弈的研究的受关注程度。
2006年8月,“浪潮杯”全国首届机器博弈锦标赛暨研讨会于北京举行,仅设有中国象棋的比赛。
赛后,组织了5个软件对5位象棋大师的人机大战,最终软件方取得了胜利。
其后,“棋天大圣”作为软件的冠军挑战中国棋王许银川,两战皆和。
这次比赛拉开了国内机器博弈发展的序幕,从此,越来越多的学者开始投入到这个人工智能学科中非常重要的领域中。
1.4本文的主要工作和论文结构
本文的主要内容是在分析计算机博弈关键技术的基础上,将博弈搜索和动态局势再评估算法应用到中国象棋计算机博弈系统的设计与实现上。
论文主要研究以下4部分的内容:
(1)数据结构,包括棋盘表示,置换表
(2)着法生成,产生所有合法着法
(3)搜索算法,基于Alpha-Beta搜索算法的优化
(4)估值算法,提出一种可行的动态局势再评估算法
本文后继章节安排如下:
第二章、对计算机博弈系统的四个组成部分及基础技术进行了研究,为后续章节及中国象棋计算机博弈程序设计打下基础。
第三章、研究了建立在Alpha-Beta搜索算法基础之上的各种优化方法。
主要讨论了窗口探测,静寂搜索,历史启发,深层迭代,NullMove5个方面的优化方法,并根据实验结果结合置换表技术提出了具体的组合方案。
第四章、论文针对目前广泛使用的静态估值算法不能应对局势变化的固有缺点,提出了动态局势再评估算法。
通过引入“局势因子”,使得估值算法根据当前局面形势做出攻防策略。
第五章、结合第三章提出的搜索方案和第四章的动态局势再评估算法,搭建中国象棋计算机博弈系统。
并对搜索方案和动态局势再评估算法进行实验验证。
最后总结本文的研究工作和结果,并就本文的后续研究提出自己的思考、见解和展望。
第二章背景知识
本章主要介绍构建一个计算机博弈系统所需的基础知识和框架,为实现中国象棋博弈程序打下基础。
计算机象棋对弈是一种双人完备信息的博弈过程[2],其核心思想并不复杂,实际上就是对博弈树节点的估值过程和对博弈树搜索过程的结合[3]。
博弈程序的任务就是对博弈树进行搜索找出当前最优的一步走棋,而当前最优的判断由估值算法给出。
根据上述过程,一个完整的计算机象棋博弈系统包含一下四部分:
1,数据结构:
由棋盘表示,置换表等组成;
2,着法生成器:
产生指定局面下所有合法的着法;
3,搜索算法:
对博弈树进行搜索,由着法生成器生成扩展节点;
4,估值算法:
依据特定局面博弈双方的优劣形势给出的一个估值。
其中,搜索算法和估值算法是计算机博弈的核心,这四个部分相互配合运转起来,就可以实现计算机象棋博弈系统。
2.1数据结构
在一个搜索体系中,对研究目标构造一个好的数据结构,既能使搜索快速地进行,更能大大提高搜索的效率。
好的数据结构往往要考虑三个方面的问题:
1、占用的空间数量2、操作速度3、使用方便与否。
一般的,紧凑的数据表示会赢得空间上的优势,但往往会延长某些操作的时间。
然而在某些例子中,巧妙的数据结构设计可以同时减少时间和空间上的消耗,如下文提到的位棋盘。
2.1.1棋盘表示
典型的中国象棋棋盘如图2.1,中国象棋的棋盘有9列10行,共90个点。
一般来说,棋盘既可以用9*10的二维数组表示,也可以用一维数组表示。
现在我们来比较一下这两种表示方法:
(l),二维数组,表示比较直观,譬如棋盘横坐标从左开始0到8,纵坐标从上到下为0到9的话,棋盘左上角的点就是Board[0][0],整个棋盘坐标用Board[9][10]来定义,这样表示比较直观。
图2.1中国象棋棋盘数组表示[4]
(2)一维数组,举个例子,棋盘第一行0,1,2,3,4,5,6,7,8,第二行9,10,11,12,13,14,15,16,17,如此类推,用一维数组表示坐标。
计算棋盘上某个点的横坐标纵坐标,只需作N%9和N/9计算便可。
比较两种方式,由于在搜索、评价时,访问用一维数组的方式访问棋盘比用二维数组的方式快(少了一次地址偏移操作),采用的一维数组有速度上的优势。
引入位棋盘可以进一步提高着法生成和盘面估值的效率。
国际象棋着法生成中最著名的辅助方法莫过于位棋盘了。
位棋盘是由前苏联KASS工A小组于60年代提出的数据结构。
国际象棋的位棋盘其实就是一个64位长度的变量,用来记录国际象棋棋盘上的某些布尔值。
因为国际象棋棋盘上有64格,所以用64位二进制数正好与之对应。
位棋盘就是棋盘的每一格用0或1来表示,用来判断每个格子的状态是“是”还是“否”。
而中国象棋棋盘总共有90个点,故可以用3个32位的字来表示。
一个完整的中国象棋棋盘局面需要用14个比特棋盘来表示:
红帅,黑将,红仕,黑士等等。
另外再用两个比特棋盘来表示“所有红子”和“所有黑子”的位棋盘,可以加快运算速度。
还可以通过再加入位棋盘来表示被某种棋子所攻击到的棋子,这样可以进一步走法产生的效率。
2.1.2置换表
在象棋里,有很多着法可以到达相同的位置。
有不同的路线可以达到同样位置的,这种现象称为“置换”(Transposing)。
置换表存储的是已经搜索过的结果,它通常使用类似于散列表(HashDictionary)的数据结构来达到最快的查询速度。
在搜索某个局面时,结果(包括局面分析的值、搜索深度、最佳着法等)就存储到置换表里。
当搜索新的局面时,我们先从置换表里找,如果已经有这种局面,那么就可以利用它,省去重复的搜索。
这种处理有以下很多好处:
1.加快速度。
在置换情况发生得很多时(特别是残局局面里,棋盘上棋子很少时),90%以上的局面可以在表中找到。
2.任意深度。
假设你需要对某个局面搜索到一个指定的深度,例如4步(也就是两个回合),如果置换表里有这个局面而且已经搜索了6步,那么你不仅可以跳过这次搜索,还可以得到比预期更精确的结果。
3.用途广泛。
通常每个象棋程序都配有“开局库”(OpeningBook),即包含一些常见局面及其最好的着法,这些通常是从已有的记载中提炼的。
有了开局库,程序就不必在开局阶段就做傻事了。
既然开局库的操作过程和置换表是一样的(即搜索局面),那么为什么不在棋局一开始就把开局库装入我们的置换表里去呢?
如果这样做,即使棋局暂时脱离了开局库,后来又回到开局库里的局面,那么置换表里保留了这样的局面,我们仍旧有机会用到它。
2.2着法生成
走法产生是指将一个局面的所有可能的走法罗列出来的那一个模块,也
就是告诉其他部分下一步可以往哪里走的模块。
由于各种棋类规则的不同,
走法产生的复杂程度也有很大的区别。
例如,五子棋的棋盘上任意的空白点
都是合法的下子点。
这样在五子棋的走法模块当中只要扫描棋盘,寻找所有
的空白,就可以罗列出所有符合规则的下一步下子点。
对于中国象棋,生成走法的时候,也可以有两种方法:
棋盘扫描法和预
置表法。
而且由于象棋的规则更加的复杂,所以就要根据具体的规则来设计
走法,比如象只可以走田字,马只可以走日字,兵不可后退只能前进一步,
用棋盘扫描法就要根据棋子的具体走法在棋盘上反复扫描有效区域,制约条
件和落子状况,时间开销巨大。
预置表法就是最经常使用的着法生成方法,它的基本思想就是时间换空
间的思想.为了节省博弈过程中的生成着法的扫描时间,将动子在棋盘任何
位置、针对棋子的全部可能分布,事先给出可能的吃子走法和非吃子走法的
关系写入一个预置表中,再通过查表,便很快可以得到可行的着法,虽然这
样需要占用一定的空间,但相对现在的硬件环境应该说还是可以接受的,它
可以将着法生成的速度提高几个数量级。
在进行走法产生的时候,往往伴随着搜索进行。
对于一个局面的所有直
接后继,你可以有两种选择:
一次产生一种走法然后搜索之;或者一次产生
其所有走法然后搜索之。
由于存在着剪枝算法,对一个局面的某一走法搜索
之后往往可能不再需要搜索其他后继,也就是说:
可能不用产生全部走法就
能够完成搜索。
一次产生一种走法看起来似乎更有效率。
但是,由于剪枝算
法的剪枝效率很大程度上依赖于节点的排列顺序,往往一次产生所有节点,
然后以某种方法调整其排列顺序会使搜索效率大大提高。
所以,在实际使用
中,绝大部分程序都是一次产生一个局面的全部走法,然后调整其搜索顺序。
2.3搜索算法
本章在阐述了博弈树概念的基础上,分析了基本的博弈树搜索算法,为后继章节中搜索算法优化打下基础。
2.3.1博弈树的基本概念
如果参加博弈的不是一个主体,而是对抗性的敌我双方,则搜索的进程不仅仅取决于其中一方的意愿,而是取决于对方应付的策略。
由此而产生的搜索树,通常称为博弈树[5]。
图2.2就是一颗红方走棋时展开的4层博弈树。
图2.2红方走棋时展开的4层博弈树
博弈树搜索的目标是在博弈的任何一个中间阶段,站在博弈双方其中一方的立场上,可以构想一颗博弈树。
这颗博弈树的根节点是当前时刻的棋局,它的儿子节点是假设再行棋一步以后的各种棋局,孙子节点是从儿子节点的棋局再行棋一步的各种棋局,以此类推,构造整棵博弈树,直到可以分出胜负的棋局。
像这样从根部向下递归产生的一棵包含所有可能的对弈过程的搜索树,成为完全搜索树。
像这样的完全搜索树是非常庞大的,正如表1.1所示,中国象棋的完全搜索树复杂度是10150,IBM公司目前正在制造全球运算速度最快的超级计算机,估计峰值操作突破一千万亿(即1015)浮点运算的限制。
则计算如此一颗完全搜索树需要的时间是10135妙,约3*10127年。
所以不可能建立到棋局结束的完全搜索树,搜索也不必真地进行到分出胜负的棋局,只需要在一定深度范围内对局面进行评价即可。
当搜索进行到一定深度,用局面评价机制来评价棋局,按照极大极小的原则选出最优,向上回溯,给出这一局面的父亲节点的价值评价,然后再继续向上回溯,一直到根节点,最优走步就是这样搜索出来的。
2.3.2极大极小算法
极大极小值算法是解决博弈树问题的基本方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国象棋 博弈 算法 研究