文章快速检索  
  高级检索
六子棋中基于局部“路”扫描方式的博弈树生成算法
李学俊1,2, 王小龙1, 吴蕾1, 刘慧婷1
1. 安徽大学 计算机科学与技术学院, 安徽 合肥 230601;
2. 安徽大学 计算智能与信号处理重点实验室, 安徽 合肥 230039
基金项目: 国家自然科学基金资助项目(61202227).    
摘要: 针对六子棋博弈比赛中基于“路”的全局扫描方式的博弈树生成算法效率较低问题,首先分析了基于“路”的全局扫描方式的计算规则和估值分析,然后将博弈树生成算法中的全局扫描方式改进为局部扫描方式,并给出其计算规则和估值分析,接着设计了基于局部扫描方式的博弈树生成算法,并集成到Alpha-Beta剪枝算法中。最后从搜索效率和博弈水平2个角度对全局扫描和局部扫描进行实验,实验结果表明,局部扫描方式在比赛时间要求的情况下,能够大幅度提高搜索效率,并且博弈水平显著优于全局扫描方式。
关键词: 机器博弈     六子棋          局部扫描     博弈树     剪枝算法     估值    
Game tree generation algorithm based on local-road scanning method for connect 6
LI Xuejun1,2, WANG Xiaolong1, WU Lei1, LIU Huiting1    
1. School of Computer Science and Technology, Anhui University, Hefei 230601, China;
2. Intelligent Computing and Signal Processing Laboratory, Anhui University, Hefei 230039, China
Abstract: Aiming at the problem that the game-tree generation algorithm generated by global scanning method is low in efficiency in the connect 6, this paper analyzes the calculation rules and valuation analysis of the global scanning method based on "road". Secondly, it develops the global scanning method of the game-tree generation algorithm into local scanning method, and introduces the calculation rules and valuation analysis. The game-tree generation algorithm is a local scanning method designed and integrated into the alpha-beta pruning search. Finally, the global and local scanning experiments are carried out from the two perspectives of search efficiency and playing skill. The experimental results showed that local scanning could greatly improve search efficiency within the competition time. The game ability is superior to that of the global scanning method.
Key words: computer game     connect 6     road     local scanning     game tree     pruning algorithm     evaluation    

机器博弈(即计算机博弈)是人工智能领域的分支,同时也是该领域公认的最具挑战性的研究课题之一。棋类博弈是人类所能从事的智能活动之一,如果可以掌握博弈的本质,也就说明可以帮助人类从事智能活动。因为存在于棋类博弈的原则或许就存在于人类的智能活动中[1]。近年来,国内外计算机博弈比赛,极大地推动了计算机博弈问题的研究,促进了计算机博弈理论和技术的发展。

棋类计算机博弈涉及的棋种较多,六子棋就是其中之一,它由台湾国立交通大学吴毅成教授发明。六子棋竞赛规则很简单,对弈双方分别执黑子和白子,在19×19的方格棋盘上,除了黑子先手第1步落一颗子外,双方轮流落2颗子,先在水平、垂直或对角线上形成连续的6子(或6子以上)的一方为胜[2]。六子棋由五子棋改良而来,但是其复杂度却远大于五子棋[3],其中博弈树复杂度达到10140,状态空间复杂度达到10172,仅次于围棋,与象棋相当或略高[4]

作为刚兴起不久的棋类游戏,六子棋的智能搜索算法研究较少。博弈树搜索为计算机博弈的基本搜索算法,它是从根节点向下递归搜索而产生的包含双方所有对弈过程的搜索树。由于受搜索时间的严格约束,博弈树能够搜索到的叶子节点极少属于末端节点(即根据对弈规则可以判定比赛结果),此时需要通过估值函数对叶子节点进行量化计算,判断该叶子节点所处的棋局状态是有利于己方还是对方,且计算其有利程度大小[5]

在博弈树的扩展过程中会将双方可能的对弈过程展示出来,首先对叶子节点进行估值,再倒推计算根节点各分支节点的值,选择估值最大的分支节点作为最佳解。但是随着搜索深度的增加,博弈树的节点数量成指数性增长。在极大极小值算法的基础上,Alpha-Beta剪枝技术在搜索的过程中忽略了无用的节点,并将其删除,不对其估值,删除无用节点时不会造成信息丢失,不影响根节点各分支节点的估值,提高了搜索速度[6]。在深层次的递归搜索中广泛采用Alpha-Beta剪枝算法。为了提高计算速度,本文采用Alpha-Beta剪枝技术。

由于六子棋对弈规则的特殊性,如果只考虑单个棋子对棋局的影响进行估值计算,而未考虑棋子间的位置关系,肯定会影响棋局状态的评估效果,由此产生了基于棋形的扫描方式[7, 8]。常见的棋形主要分为六连、长连、活五、眠五、死五、活四、眠四、死四、活三、眠三、朦胧三、活二、眠二、朦胧二等[9]。文献[2]提出基于棋形的数据表示方法,数据结构依赖于棋形,将棋局的数据表示和局面知识结合起来,提高搜索效率。

基于棋形的扫描方式将棋子间的位置关系联系起来,通过产生某种棋形来表示对整个棋局状态的影响程度,更具有直观性,减少对单个棋子进行估值的不稳定性;然而目前棋形是通过经验总结的,人为因素影响很大,不排除还存在其他种类,这需要通过大量实验来确定。大部分六子棋的估值计算都是基于棋形的扫描方式,但是由于棋形的判断要求很高,常见的棋形种类较多,且每种棋形又存在多种落子方式[10],由此文献[11]提出“路”的扫描方式。所谓“路”就在棋盘的水平、垂直或对角线上出现连续6点连成一线[11]

基于“路”扫描方式能有效降低棋形判断的复杂度,通过“路”扫描方式的估值相对于通过棋形扫描方式估值较为简单,实现方面也更加容易,并且搜索时间较短。文献[12]在传统的基于“路”的全局扫描方式上采用自学习的方法自动调整估值函数的参数,提高搜索精度。文献[13]在应用Alpha-Beta剪枝搜索时引入并行计算,大幅度提高搜索效率。

“路”扫描方式的引入避免了精确判断棋形的难题,减少了计算量;同时应用面向对象的思想,将“路”的信息抽象成类,易于实现。基于“路” 的扫描方式解决了因棋形判断不准确而影响博弈水平的问题,但是应用博弈树搜索时,在对每个子节点的扩展时都需要对棋盘进行全局扫描。受博弈竞赛时间约束,搜索深度和宽度都有所限制,博弈水平也达不到理想要求。因此本文在博弈树生成子节点时将基于“路”的全局扫描方式改进为局部扫描,并设计基于局部“路”扫描方式的博弈树生成算法。

1 基于“路”的全局扫描方式 1.1 计算规则

K子棋可用connect(m,n,k,p,q)表示[14],对弈双方为黑方和白方,黑方先走。connect(m,n,k,p,q)的规则包括:1)棋盘的方格为 mn列,即含m×n个交叉点;2)对弈时双方轮流落p颗棋子(根据六子棋比赛黑方先手规则,第1次落q颗棋子);3)在棋盘的水平、垂直或对角线上先形成k连获胜。若在规定时间内双方均无法获胜,则判为平局。

K子棋中“路”的计算规则:1)水平方向:m行×(n-k+1)路/行,如图 1(a)所示;2)垂直方向:n列×(m-k+1)路/列,类似于水平方向;3)左斜方向:由于k连需要k子连续相连,在左斜方向前k-1行不可能形成k连,故左斜方向路数为(m-k+1)行×(n-k+1)路/行,如图 1(b);4)右斜方向:(n-k+1)列×(m-k+1)路/列,类似于左斜方向。

图 1 水平及左斜方向路数计算示例 Fig. 1 Road number of horizontal and left diagonal direction

六子棋是K子棋的一种[15],采用19×19方格棋盘,可表示为connect(19,19,6,2,1),总路数为

式中:Nroad表示六子棋全局扫描总路数,Ndirect(i)表示第i 方向上的路数。根据式(1)可得,六子棋19×19方格全局扫描的总路数为924。

1.2 估值分析

在“路”的信息表示中,设置n∈{0,1,2,3,4,5,6} 表示该路中相同颜色棋子的个数,设置 c∈{′B′,′W′} 表示路中棋子的颜色。若某路中含2种颜色棋子,表示该路不可能成为六连,则初始值不变。

当某路中 c 为已方棋子颜色时分配不同的价值,计算分配价值公式为

式中:Vown 表示分配的价值,n 越大表明己方在该路越容易形成六连,则分配的价值越大。

当某路中c 为对方棋子颜色时分配不同的威胁值,计算威胁值公式为

式中:Vthreat表示分配的威胁值,n 越大表明对方在该路越容易形成六连,则分配的威胁值越大。

全局扫描估值可用己方所有“路”的价值之和减去对方所有“路”的威胁值之和表示。全局扫描棋局估值 Vtotal 可看作是每步落子后对当前棋局的影响程度大小,即落子后棋盘全局扫描估值 Vafter 减去落子前棋盘全局扫描估值 Vpre ,可表达为

2 基于“路”的局部扫描方式

应用Alpha-Beta剪枝技术搜索时,效率和精确度是非常重要又相互影响的因素[16]。文献[2]中指出棋局状态的变化均由新增的棋子引起,在棋局中只有新增棋子的水平方向、垂直方向和对角线方向上的棋形发生变化,对其他位置棋形无影响。在基于“路”的扫描过程中,每步落子对棋局的影响是由该两落子在水平方向、垂直方向和对角线方向上的“路”所引起,与其他“路”没有关系,故本文在博弈树生成时,优化改进“路”的扫描方式。

2.1 计算规则

假设在棋盘的(3,7)位置模拟一个落子,由图 2可得在水平方向有6路包含该落子,由此可得在局部扫描方式下,每步落子所影响的路数计算如式(5)所示。

式中:Npart 表示局部扫描每步落子影响的路数,Ndirect 表示每个方向所含的路数,Nscan 表示一个落子所要扫描的方向数,Nchess 表示每步的落子数。

图 2 局部扫描水平方向路数计算示例 Fig. 2 Road number of horizontal direction by the local-road scanning method

由式(5)可得,一般情况下局部扫描的总路数为:6路/方向×4方向/落子×2落子=48路,大大小于全局扫描的总路数924。局部扫描棋局估值 Vtotal 即落子后棋盘局部扫描估值 Vafter 减去落子前棋盘局部扫描估值 Vpre ,可表达为

2.2 估值分析

局部扫描方式本质上和全局扫描方式的不同在于对每个子节点进行扩展时都要应用“路”进行局部扫描而不是全局扫描,它们的估值存在一定的联系。

1)落子前落子点位置影响的局部扫描的“路”估值 Vpre 与除局部扫描以外的“路”估值 V″pre 之和相当于落子前棋盘全局扫描估值 Vpre ,可表达为

2)落子后落子点位置影响的局部扫描的“路”估值 Vafter 与除局部扫描以外的“路”估值 Vafter 之和相当于落子后棋盘全局扫描估值 Vafter ,可表达为

3)由于每步落子不会对局部扫描以外的“路”估值产生影响,即落子后除局部扫描以外的“路”估值 Vafter 等于落子前除局部扫描以外的“路”估值 Vpre ,表达为

所以,局部扫描的棋局估值为

由式(10)可以看出,局部扫描方式和全局扫描方式的棋盘估值相同,并没有降低精确度,因此在博弈树生成时,本文将棋盘扫描方式由全局扫描改进为局部扫描,忽略无用扫描,以提高搜索速度。

3 局部扫描方式的博弈树生成算法

局部扫描方式的博弈树生成算法主要用于子节点的扩展过程。因为搜索的宽度是有限的,根节点递归向下搜索时,先采用局部扫描方式扩展子节点并进行估值,并通过排序选择估值排名靠前的Width个节点继续递归向下搜索,删除其他不进行递归搜索的节点。为了更方便地应用博弈搜索策略,将“2步”落子并作“一步”,对模拟的2步落子进行综合估值,保证搜索效率和博弈水平。基于局部扫描方式的博弈树生成算法伪代码如下。

基于局部扫描的博弈树生成算法中,输入模拟落子的棋子颜色Color及搜索宽度Width,输出估值排名前Width的落子组合点。

本文的六子棋搜索算法采用Alpha-Beta剪枝技术实现,设置深度为Depth,宽度为Width。对弈过程中,根据当前棋局状态扩展子节点时,采用基于局部扫描的博弈树生成算法对所有可以进行扩展的子节点进行估值,选择估值为前Width名的子节点继续扩展,直至扩展深度为Depth为止。通过对叶子节点估值,倒推计算根部各分支节点的估值,选择最大值节点对应的落子方式为最佳解。

/*Input:Color,Width Output:listWay(估值排名前Width的2步落子组合)*/

1) Localscanning(int Color,int Width){

2)AddMovePoints(ListPoints);//计算模拟移动的落子位置

3)for( i =0; i < ListPoints.Count-1; i ++)

4)for(j= i +1; j < ListPoints.Count; j ++){

5)scanPart(ListPoints[i].Point,ListPoints[j].Point);//落子前局部扫描

6)Part_preValue=Caculate();//计算模拟落子前局部扫描估值

7)SimulateMove();//模拟落子

8)scanPart(ListPoints[i].Point,ListPoints[j].Point);//落子后局部扫描

9)Part_afterValue=Caculate();//计算模拟落子后局部扫描估值

10)Value=Part_afterValue-Part_preValue;

11)RestoreMove();//撤销落子

12)AddListWay(ListPoints[i].Point,ListPoints[j].Point,Value);

13)}

14)GetListWay(ListWay,Width);

4 实验 4.1 实验环境

基于上述六子棋搜索策略,本文设计并实现了六子棋博弈系统DragonWorld(龙行天下)-人机对弈平台。该系统采用C#语言开发,操作系统为Windows 7,硬件环境为联想(G490) CPU、2.60 GHZ的Inter处理器和4 G内存。

4.2 实验与分析

为比较不同的扫描方式,本文从搜索效率和博弈水平2个角度进行实验对比。通过搜索效率的实验,分析不同深度和宽度对搜索效率的影响。通过博弈水平的实验,在严格遵循竞赛时间要求的前提下,分析同等条件下不同搜索深度和宽度对博弈水平的影响。实验中每局对弈时间不超过15 min。

表 1 价值与威胁值分配 Table 1 The distribution of the value and threat value
路数己方路的价值对方路的威胁值
6路1 000 0001 000 000
5路2006 000
4路2006 000
3路4050
2路2025
1路11
4.2.1 搜索效率实验

搜索效率包括深度和宽度2个方面。通过深度实验,分析同等宽度情况下不同搜索深度对搜索效率的影响;通过宽度实验,分析同等深度情况下不同搜索宽度对搜索效率的影响。

设置Width=10,采用深度为3、4、5时,全局扫描和局部扫描时间进行对比实验,各对弈100局,每步的平均搜索时间如图 3所示。由图 3可得,随着步数的增加,全局扫描的搜索时间明显增加,局部扫描却无明显变化。随着搜索深度的增加,局部扫描的搜索效率优化愈加明显。对于第9步,在深度为3、4、5时,全局扫描搜索时间分别为23.030、269.902、640.780 s;而局部扫描搜索时间分别为2.010、31.855、36.301 s。

图 3 2种扫描方式不同深度的搜索时间对比 Fig. 3 Search time two scanning method with different depths
4.2.2 博弈水平实验

设置Depth=3,全局扫描和局部扫描采用不同宽度对弈,每个宽度对弈100局,博弈水平如图 4所示。局部扫描显著优于全局扫描,Width=20时,局部扫描和全局扫描的对弈胜率是96:4。设置Width=10,全局扫描和局部扫描采用不同深度对弈,各深度对弈100局博弈水平如图 5所示。在同等条件下,局部扫描的搜索深度增加,博弈水平远远超过全局扫描。在Depth=5时,局部扫描和全局扫描的对弈胜率是95:5。因为随着深度增加,搜索层次越大,叶子节点越接近末端节点,越提高获胜几率。

图 4 2种扫描方式在不同宽度的博弈结果 Fig. 4 Game results with different widths
图 5 2种扫描方式在不同深度的博弈结果 Fig. 5 Game results with different depths
5 结束语

本文将优化后的扫描方式应用到六子棋博弈中,从搜索效率和博弈水平2个角度评价,相对于全局扫描,局部扫描大幅度提高搜索效率,博弈水平也有明显提高。本文仅在开局和中局采用局部扫描方式,提高搜索效率,如何在残局阶段改进估值提高效率,有待进一步研究。博弈树生成算法仍存在改进之处,例如估值方法中对于己方“路”的价值和对方“路”的威胁值的分配仍需手动调整,搜索深度仅到5层,依然未达到理想要求。

参考文献
[1] 张利群.五道棋计算机博弈程序的设计与实现[J]. 计算机工程, 2010(10): 227-228, 231.ZHANG Liqun. Design and realization of Wudao chess computer game program[J]. Computer Engineering, 2010(10): 227-228, 231.
[2] 徐长明,马宗民,徐心和.一种新的连珠棋局面表示法及其在六子棋中的应用[J].东北大学学报:自然科学版, 2009(4): 60-63.XU Changming, MA Zongmin, XU Xinhe. A new board representation method for k-in-a-row games with its application to connect 6[J].Journal Northeastern University: Natural Science, 2009(4): 60-63.
[3] QIAO Zhihua, YANG Ming, WANG Zijuan. Technologies analysis of connect6 computer game[J]. Advanced Materials Research, 2011, 1077 (171) : 679-682.
[4] ZHANG Ruimei, LIU Changcheng, WANG Chuandui. Research on connect 6 programming based on mtd(f) and deeper-always transposition table[C]//2012 IEEE 2nd International Conference on Cloud Computing and Intelligence Systems. [S.l.], 2012: 254-255.
[5] 徐长明.基于连珠模式的六子棋机器博弈关键技术研究[D]. 沈阳: 东北大学, 2010: 15-36.XU Changming. Research on key technologies of connection-pattern based computer connect 6[D]. Shenyang: Northeastern University, 2010: 15-36.
[6] KNUTH D E, MOORE R W. An analysis of alpha-beta pruning[J]. Artificial Intelligence, 1975, 6(4): 293-326.
[7] 李翠珠.六子棋计算机博弈系统的研究与实现[D]. 重庆: 重庆理工大学, 2010: 43-46.LI Cuizhu. Research and Implementation of the system of connect 6 game[D]. Chongqing: Chongqing University of Technology, 2010: 43-46.
[8] 张颖.六子棋启发式搜索算法的优化与设计[J]. 西北师范大学学报: 自然科学版, 2008(4): 31-36, 58.ZHANG Ying. Optimization and design of connect6 heuristic searching algorithm[J]. Journal of Northwest Normal University: Natural Science, 2008(4): 31-36, 58.
[9] 黄继平,苗华,张栋.用遗传算法实现六子棋评估函数参数优化[J]. 重庆工学院学报: 自然科学版, 2009(11): 91-95.HUANG Jiping, MIAO Hua, ZHANG Dong. Optimizing the evaluation function parameters of connect6 with genetic algorithms[J].Journal of Chongqing Institute of Technology: Natural Science, 2009(11): 91-95.
[10] 陈光年.基于智能算法的六子棋博弈行为选择的应用研究[D]. 重庆: 重庆理工大学, 2010: 20-25.CHEN Guangnian. The research and application on the behavior election of connect 6 based on intelligent algorithms[D]. Chongqing: Chongqing University of Technology, 2010: 20-25.
[11] 张小川, 陈光年, 张世强, 等.六子棋博弈的评估函数[J]. 重庆理工大学学报: 自然科学版, 2010(2): 68-72.ZHANG Xiaochuan, CHEN Guangnian, ZHANG Shiqiang. Research on evaluation functions for computer game of connect6[J]. Journal of Chongqing University of Technology: Natural Science, 2010(2): 68-72.
[12] 徐长明, 马宗民, 徐心和, 等. 面向机器博弈的即时差分学习研究[J]. 计算机科学, 2010(8): 225-229.XU Changming, MA Zongmin, XU Xinhe. Study of temporal difference learning in computer games[J]. Computer Science, 2010(8): 225-229.
[13] 徐心和, 邓志立, 王骄, 等.机器博弈研究面临的各种挑战[J]. 智能系统学报, 2008, 3(4): 10-15.XU Xinhe, DENG Zhili, WANG Jiao, et al. Challenging issues facing computer game research[J]. CAAI Transactions on Intelligent Systems, 2008, 3(4): 10-15.
[14] 闵文杰. 六子棋计算机博弈关键技术研究[D]. 重庆:重庆交通大学, 2010: 12-18.MIN Wenjie. Research on the key technologies of the connect 6 computer game[D]. Chongqing: Chongqing Jiaotong University, 2010: 12-18.
[15] MARTIN K, SVEN S, RAINER H. Improved tree-based strategies for a connect 6 threat-based hardware design[C]//2013 IEEE Pacific Rim Conference on Communications, Computers and Signal Processing (PACRIM). [S.l.], 2013: 32-36.
[16] 张明亮,吴俊,李凡长.五子棋机器博弈系统评估函数的设计[J]. 计算机应用, 2012(7): 189-192, 210.ZHANG Mingliang, WU Jun, LI Fanchang. Design of evaluation function for computer gobang game system[J]. Journal of Computer Applications, 2012(7): 189-192, 210.
DOI: 10.3969/j.issn.1673-4785.201401022
中国人工智能学会和哈尔滨工程大学联合主办。
0

文章信息

李学俊, 王小龙, 吴蕾, 刘慧婷
LI Xuejun, WANG Xiaolong, WU Lei, LIU Huiting
六子棋中基于局部“路”扫描方式的博弈树生成算法
Game tree generation algorithm based on local-road scanning method for connect 6
智能系统学报, 2015, 10(02): 267-272.
CAAI Transactions on Intelligent Systems, 2015, 10(02): 267-272.
DOI: 10.3969/j.issn.1673-4785.201401022

文章历史

收稿日期: 2014-01-09
网络出版日期: 2015-03-26

相关文章

工作空间