- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于置换表技术中国象棋搜索算法研究
基于置换表技术中国象棋搜索算法研究
【摘 要】中国象棋的基础搜索――Alpha-Beta 算法的剪枝过程对搜索节点的排序顺序依赖很大,当搜索顺序的排列为最差情况时,该算法基本上不能实现剪枝。搜索过程其实会出现很多重复的节点,利用哈希表的思想,把以前搜索过的节点保存起来,这样在搜索某一节点之前,先到哈希表里去查找以前是否搜索过,如果以前搜索过,则直接返回哈希表里保存的局面评估值;如果没有,则采用正常的Alpha-Beta算法进行搜索。通过实现可知当搜索层次大于5层时,改进后的算法比Alpha-Beta算法在搜索节点数量和时间有都有很大的优化。
【关键词】中国象棋;置换表;哈希表;博弈树搜索
0 引言
在中国象棋的人机博弈的研究中,局面搜索算法是核心,中国象棋的博弈过程中,针对某一局面,平均着法达到60步,故减少搜索的节点,提高搜索的速度和节省搜索过程中内存开销,就成了中国象棋搜索研究一个终极目标。Alpha-Beta搜索算法是人机博弈的一个基本算法,但是该算法在搜索过程中,存在大量的冗余[1]。本文即在这一基本算法的基础上,加入置换表技术和Hash table技术,以提高搜索速度。
1 Alpha-Beta搜索算法
如图1所示,结点下面的数字为该节点所代表的局面评估值。在左图中,节点B的值为18,节点D的值为16,因为C节点要取其子节点的最小值,故可以判定节点C的值将小于或者等16,而A节点的值为B节点和C节点的最大值,这样无论E节点和F节点的值为多少,都不影响A节点的取值,因为A节点此时肯定会取B节点的值18,这样将节点D的后继节点减去称Alpha剪枝。观察图1的右半部的极大极小树,A节点要取B节点和C节点的最小值,C节点要取其子结点的最大值,而D节点的值为18,故C节点的值最小为18,这个值已经大于B节点的值了,所以无论E节点和F节点的值为多少,都不影响A了点的取值,所以将节点D的后继节点减去称Beta剪枝。
原始的Alpha-Beta搜索算法略显繁琐,需要在奇数层进行Alpha剪枝,在偶数层进行Beta剪枝,利用负极大值搜索的思想,可以统一在任何一层进行Beta剪枝。
2 置换表的思想
Alpha-Beta 搜索算法的剪枝过程对搜索节点的排序顺序依赖很大,当搜索顺序的排列为最差情况时,其搜索效果与极大极小值相同[2]。其实在搜索的过程中,随着搜索层次的加深,会出现一些节点是原来搜索过的,如果能直接利用已经搜索过的节点局面评估值,而不重新搜索一次,这样相同于进行了很大程度的剪枝[3]。我们可以利用一个数组将已经搜索过和节点保存起来,在搜索新的节点时,先到数组中检查以前是否已经搜索过本节点,如果是,则直接用数组里保存的局面评估值,如果没有,则继续正常搜索,这就是置换表(Transposition Table)的思想。
3 哈希表来实现置换表搜索
因为在搜索的过程中,节点数量非常大,如果将每一个节点都与数组中的元素一一对应,内存开销太大,不可能实现。为了解决这一问题,可以利用哈希表技术。每一个搜索节点对应哈希表中一个节点,但是反过来,哈希表中的一个节点并不一定只对应一个搜索节点,这就是哈希冲突,在同一次搜索过程中,哈希冲空的可能性并不高,在实际的应用中这是一个可靠的办法。根据中国象棋搜索的特点,定义如下哈希数组。
对要搜索的每一节点,计算出它的一个哈希值(hashIndex,通常是一个32位数对哈希表大小取模)以确定此局面在哈希表中的位置。计算另一个哈希值checksum,来检验表中的数据项是否是所要的那一项。64位的哈希值checksum发生冲突的几率很小,几乎可以将其冲突忽略。即使因为哈希冲突导致没有获得原来搜索过的节点,也不会影响博弈系统的运行,因为还可以采用基础的alpha-beta算法进行搜索。
在对某一局面搜索之前,先查看哈希表项hashTable[hashIndex], 如果hashTable[hashIndex].checksum == Checksum,并且hashTable[hashIndex].depth大于或者等于最大搜索深度减去当前层数,就返回hashTable[hashIndex].eval作为当前局面的估值。当对一个局面搜索完成后,将Checksum、当前层数和估值结果保存到hashTable[hashIndex]当中,以备后面的搜索使用。置换表与alpha-beta搜索协同工作的实现机制如下面的类C语言伪代码所示。
4 实验
基于以上核心算法,利用JAVA语言设计了一个实用系统。中国象棋的棋盘用一个10行9列的二维数组与之对应,而各棋子用对应的数字表示。棋局评估主要从剩余棋子基本值、棋子灵活性、棋子受攻击度
您可能关注的文档
最近下载
- 辰西起风云·海南共澎湃-邮轮地产海南品牌产品发布会游艇之夜.pptx
- 2025年中级消防设施操作员(监控类)资格理论必背考试题库(附答案).docx VIP
- 第04章聚糖的结构及功能.ppt VIP
- 新人教版五年级数学上册《★掷一掷》内蒙古康丽格老师(省级公开课教学设计).doc VIP
- 风电项目冬季施工特殊防护技术方案.docx
- MTBE生产技术问答.doc
- 加湿器研发方案设计.docx VIP
- 《中国共产党党员教育管理工作条例》应知应会测试题(附答案).docx VIP
- 2024辽宁医药职业学院单招数学通关题库附参考答案详解(突破训练).docx VIP
- 中国共产党党员教育管理工作条例知识测试题.doc VIP
原创力文档


文档评论(0)