基于⼈⼯神经⽹络的五⼦棋博弈(Details)
研究报告
作品名称基于神经⽹络的五⼦棋博弈系统
类别科技发明制作B类
2016年3⽉
1.摘要
计算机博弈⼀直是⼈们很关注的研究⽅向。从以前的“深蓝”到如今的AlphaGo,计算机博弈取得了很多成就,有了很⼤进展。AlphaGo
与李世乭的围棋之战引得了很多⼈对深度学习,对⼈⼯智能的关注。我对计算机博弈也很感兴趣,尤其是五⼦棋。现在⽹络上很多的五⼦棋
游戏都是基于规则的,最⼤的漏洞就在于你如果赢了它⼀盘,按照同样的套路下即可赢它。基于上⾯⼏点,我想到了可以设计⼀个有学习性
的五⼦棋博弈算法,改善这种情况,提⾼五⼦棋⼈机博弈的趣味性和多变性;同时我也希望该算法经过⼀定规模的训练能够达到较⾼的博弈
⽔平。因此,我利⽤⼈⼯智能的相关知识和计算机博弈的知识设计了基于神经⽹络的五⼦棋博弈算法,并开发了可演⽰算法的演⽰系统以及
算法的接⼝dll。
本作品的核⼼和难点在于神经⽹络的结构(包括⽹络拓扑结构,输⼊结构,输出结构)及学习算法。在经过查阅资料和⼤量实践之后,我确
定了三层感知器的拓扑结构和96个实型特征向量的输⼊结构以及⽹络以单实型值输出。
算法以博弈树搜索及剪枝为整体架构,结合对棋局的特征提取及神经⽹络预测局势来完成AI的决策。。试验表明,它对于同⼀套路的棋局学
习速度较快,可以在⼏盘对弈后有明显的表现提升。
在后⾯的实验中,AI初始表现不佳,对于如何进攻防守的学习较慢,为了增强它的初始“智能”,我对必胜局加⼊了规则判定以提升AI的初
始表现。并利⽤低层搜索优化了⾼层搜索的剪枝效率。
现在,我已经设计了⽤于演⽰的JAVA程序,并提供了可⽤于训练的dll接⼝。演⽰程序可以通过⼈机对弈演⽰它的学习特性,若使⽤⼀个未
经训练过的⽹络权值,在重复套路对弈的情况下,它的学习效果通常通过数盘即可显⽰出来。在经过⼤规模的训练后,该算法将有更加⼴泛
的应⽤前景。
关键词:五⼦棋博弈;⼈⼯神经⽹络;强化学习;博弈树搜索;α-β剪枝
⽬录
1.摘要…2
2.研究背景及意义…4
3.核⼼算法…4
3.1.神经⽹络结构及学习算法…4
3.2.博弈树搜索及α-β剪枝算法及其优化…5
3.3.特征提取…6
3.4.必胜局判断…7
4.演⽰系统…7
4.1.演⽰系统功能介绍…7
4.2.演⽰系统使⽤说明…7
5.训练接⼝…8
接⼝介绍…8
使⽤说明…9
6.作品总结…10
6.1.作品创新点及技术关键…10
6.2.作品的先进性,科学性…10
6.3.⽬前存在的问题…10
6.4.发展前景…11
7.参考⽂献…11
8.附件清单…11
2.研究背景及意义
如今的⼤多数五⼦棋博弈程序都是完全基于规则的,即使搜索层数⾜够多,有不错的对战表现,但⽆法避免“定式定局”的情况(即采⽤相
同⾛法对战得到相同结局)。我们希望避免这种情况并且能提⾼算法对弈⽔平。恰逢最近深度学习在计算机博弈上取得了很⼤成就,2015
年10⽉AlphaGo在没有任何让⼦的情况下,以5:0完胜欧洲围棋冠军、职业⼆段选⼿樊麾。在围棋⼈⼯智能领域,实现了⼀次史⽆前例的突
破。2016年3⽉15⽇,“⼈机⼤战”最后⼀场对弈中,“AlphaGo”在⼀度不利的情况下于收官阶段中盘战胜李世⽯,总⽐分被定格为
1:4,五番棋最终以“AlphaGo”胜出⽽告终。基于⼈⼯智能在计算机博弈中的优秀表现,我想也可以利⽤神经⽹络来改进传统的完全基于
规则的五⼦棋博弈算法。基于神经⽹络的五⼦棋博弈不仅能表现出学习特性,克服“定式定局”的缺点,还能再经过⾜够的训练之后表现出
传统算法更优秀的博弈表现,⽆论在科学研究还是商业应⽤中都有⼀定意义。
3.核⼼算法
3.1.神经⽹络结构及学习算法
神经⽹络采⽤3层感知器结构,输⼊节点96个,中间层48个节点,输出层1个节点。采⽤线性激活函数,权值在-1-1之间。输⼊为提取到的
特征向量。
学习算法采⽤TD强化学习算法:
我们唯⼀能准确确定最后的可估值局⾯就是胜负已分的时候。如果最后⾃⼰输了,则估值为-1,赢了估值为1。和棋的时候不进⾏学习。
我们也不能只对最后⼀个局⾯进⾏学习,我们希望能够对每个局⾯都进⾏学习,我们希望根据这个最后的局⾯给出前⾯若⼲个局⾯的合理估
值。
于是我们做这样的假设:在开始的时候,双⽅优势相当,评估值应为0,然后随着对弈,优势逐渐改变,直到决出胜负。我们假设局势是渐
变的,这样我们就可以从最后的局⾯开始,逐步向前进⾏学习。
对每个局⾯的学习,根据误差逆传播原理,进⾏⼀次权值的调整,接下来我们要确定每个局⾯的误差。我们假设误差为e,期待输出为a,⽹
络输出为f(),第n个局⾯为结局且记为An,这样,对于An的误差e[n]=a-f(An),进⾏⼀次学习,调整了权值之后,若再对An进⾏计算,得到
f’(An),这个值会⽐f(An)更接近a。对于前⼀个局⾯An-1的学习,我们不能准确知道它的期待输出为多少,但我们根据假设知道,它应该
是⼀个接近于a的值,我们不妨选⽤f‘(An)作为An-1的期待输出。这样依次类推,就能完成整个学习过程,学习完⼀盘棋局,我们的⽹络
对这局的每个局⾯的估值⽐原先的估值更为接近预期。
3.2.博弈树搜索及α-β剪枝算法及其优化
(1)博弈树搜索:
对于任何⼀种博弈竞赛,都可以构成⼀个博弈树。它类似于状态图和问题求解搜索中使⽤的搜索树。博弈树的结点对应于某⼀个棋局,其分
⽀表⽰⾛⼀步棋;根部对应于开始位置,其叶表⽰对弈到此结束。在叶节点对应的棋局中,竞赛的结果可以是赢、输或者和。
在⼆⼈博弈问题中,为了从众多可供选择的⾏动⽅案中选出⼀个对⾃⼰最为有利的⾏动⽅案,就需要对当前的情况以及将要发⽣的情况进⾏
分析,通过某搜索算法从中选出最优的⾛步。
博弈树搜索的基本思想是:
a.设博弈的双⽅中⼀⽅为MAX,另⼀⽅为MIN。然后为其中的⼀⽅寻找⼀个最优⾏动⽅案。
b.为了找到当前的最优⾏动⽅案,需要对各个可能的⽅案所产⽣的后果进⾏⽐较,具体地说,就是要考虑每⼀⽅案实施后对⽅可能采取的所
有⾏动,并计算可能的得分。
c.为计算得分,需要根据问题的特性信息定义⼀个估价函数(我们使⽤3.1中的神经⽹络做估价函数),⽤来估算当前博弈树端节点的得
分。此时估算出来的得分称为静态估值。
d.当端节点的估值计算出来后,再推算出⽗节点的得分,推算的⽅法是:对“或”节点,选其⼦节点中⼀个最⼤的得分作为⽗节点的得分,
这是为了使⾃⼰在可供选择的⽅案中选⼀个对⾃⼰最有利的⽅案;对“与”节点,选其⼦节点中⼀个最⼩的得分作为⽗节点的得分,这是为
了⽴⾜于最坏的情况。这样计算出的⽗节点的得分称为倒推值。
e.如果⼀个⾏动⽅案能获得较⼤的倒推值,则它就是当前最好的⾏动⽅案。
(2)α-β剪枝:
为了提⾼博弈树搜索的效率,引⼊了通过对评估值的上下限进⾏估计,从⽽减少需进⾏评估节点的范围的⽅法。
MAX节点的评估下限值α:
作为MAX节点,假定它的MIN节点有N个,那么当它的第⼀个MIN节点的评估值为α时,则对于其它节点,如果有⾼于α的节点,就取那最
⾼的节点值作为MAX节点的值;否则,该点的评估值为α。
MIN节点的评估上限值β:
作为MIN节点,同样假定它的MAX节点有N个,那么当它的第⼀个MAX节点的评估值为β时,则对于其他节点,如果有低于β的节点,就
取最低的节点值作为MIN节点的值;否则,该店的评估值为β。
依据这种评估值上下限即可省去许多不必搜索的节点。
(3)传统α-β剪枝的优化:
传统的α-β剪枝只是提供了剪枝的基本策略,保证了⼀定能得到正确解,但并没有保证它的效率。最坏的情况可能是从最坏的解按顺序搜
到了最好的解,相当于没剪枝,还付出了额外的判断代价。所以搜索⽅向很重要。如果我们能从⼀个好的解开始搜,那么就会剪掉很多⽆⽤
的分⽀,⼤⼤提升剪枝效果。
因此我们需要⼀定的启发式信息辅助搜索。⽐如我们决定搜索4层,那么2层的搜索结果就是⼀个很好的启发式信息。我们可以这样做:先
搜2层,得到结果(i,j),然后从(i,j)处开始进⾏4层搜索。不仅是对根节点我们可以这样做,对于博弈树中每个叶节点我们都可以这样做,⽤
低层搜索为⾼层搜索做预测。这⾥要注意,对于MIN节点预测时要站在对⽅⾓度,选择对⽅最有利的落⼦处作为启发式信息,因为我们假设
对⼿是⼗分聪明的。
3.3.特征提取
我们选⽤特征向量作为神经⽹络的输⼊。对于五⼦棋,⼀个棋局局⾯的特征是什么?这可以有很多种定义,我们选择的特征描述就是敌我双
⽅的棋型和棋型长度。敌我双⽅各有48个特征,⼀种特定长度的棋型即⼀种特征(即活三为⼀种特征,眠⼆为⼀种特征,冲四活三也为⼀
种特征),特征向量即这些特征的统计值构成的向量。定义了这些特征,我们就可以通过遍历棋局获得特征向量。为了精确提取,我们需要
⼀些预处理⼯序,其间可能搜索棋盘多次,但不会每次遍历整个棋盘。
定义了特征之后,我们从棋盘提取特征向量的做法并不唯⼀,不同的⼈可能有不同的实现,只要保证提取的准确性即可,因此本⽂不详细介
绍特征提取所⽤的⽅法。
3.4.必胜局判断
必胜局即虽然未成五⼦,但是已能判断胜负的局⾯。必胜局是完全可以基于规则设计的。因为我们能清楚地知道什么样的棋局是必胜局,所
以我们不依靠神经⽹络来识别必胜局,⽽是使⽤固定规则处理必胜局。
必胜局的判定可以基于特征向量。例如出现双三(本算法基于⽆禁⼿规则设计)等棋型时就出现了必胜局。
4.演⽰系统
4.1.演⽰系统功能介绍
演⽰系统可以实现⼈机对弈。默认玩家执⿊先⾏,电脑执⽩后⾏。对弈中⼀局结束⾃动学习。由使⽤者⼿动保存学习结果。可以保存和加载
棋谱进⾏复盘。未来还会提供学习接⼝来学习棋谱。
4.2.演⽰系统使⽤说明
界⾯及按键说明如下:
a.在棋盘中双击落⼦。
b.重新开始:单机即清除当前棋盘重新开始。
c.悔棋:因不⽀持玩家选择先后⼿,玩家固定先⼿,优势很⼤,所以暂不提供悔棋功能。
d.保存棋谱:将当前下完的⼀局的棋谱保存到指定位置。⽂件名⾃命名,保存类型为txt⽂件。
e.载⼊棋谱:载⼊指定位置的棋谱,可供复盘查看。
f.学习:保存学习结果(学习过程是在分出胜负的时候⾃动完成的)。
g.刷新界⾯:刷新界⾯显⽰。有时程序会出现⽩屏,点击刷新界⾯重新加载界⾯,显⽰棋局。
⽂件内置于程序包中,若有需要请在⽂件夹中查找替换(不要更改其位置,若在相应位置查找不到,程序会⾃动建⽴初始的
未经训练的⽂件)。
5.训练接⼝
接⼝介绍
AiforGobangGame类提供如下函数接⼝:
obangGame(intstatus,intturn,constchar*src,intarch_para);
构造函数,status是电脑⾝份,1为⿊棋,-1为⽩棋,与先后⼿⽆关。
turn是轮换标记,以前是为配合控制流程保留,当前版本中暂⽆作⽤。为了和后续版本兼容,此参数值的选取请和status值保持⼀致。
src是权值⽂件路径(要包括⽂件名)
arch_para是搜索层数,推荐选择3或4层注意奇数层和偶数层的权值⽂件不能互通使⽤。
kecmd(int*map,int&i,int&j);
决策函数,map是⼤⼩为225的⼀维数组,表⽰当前棋盘,采⽤⾏坐标x,列坐标y进⾏定位,map[x*size+y]表⽰x⾏y列的点(左上⾓为
0,0),1为⿊⼦,-1为⽩⼦,0为⽆⼦。I,j参数是引⽤的,调⽤完之后,i,j的值即为电脑决定落⼦处的⾏列坐标。此函数不会改变map
的值,所以得到落⼦坐标后请在其他函数中进⾏落⼦操作。
veWeight(constchar*src);
保存权值函数,src是保存路径(要包括⽂件名)
dge_iswin(intwinner);
胜负状态设置函数,辅助TD_study()所⽤。调⽤TD_study()之前必须先调⽤此函数。和棋请不要调⽤
winner表⽰该局的胜利者,⿊棋胜为1,⽩棋胜为-1
_study();
学习函数,调⽤此函数对刚下完的⼀局进⾏学习。和棋请不要调⽤。
ge(int*map);
判断棋局辅助函数,可⽤于判断当前棋局的状态,map是当前棋盘。
返回值说明如下:
staticconstintheiwin=1;//⿊赢
staticconstintbaiwin=-1;//⽩赢
staticconstintdrawgame=0;//平局
staticconstintnotfinish=9;//尚未结束
四个返回值在AiforGobangGame中均定义了常量。
若有必要使⽤此函数,请尽量使⽤形式,不要直接使⽤相应数字,以保持和后续版本的兼容性。
使⽤说明
使⽤时请将,,DllGobangAI.h放在所需⼯程相应⽬录下。若是⽤作训练,还需要其他五⼦棋博弈源码,⾃⼰实现
或重写⼀个简单的main函数。
Dll中封装了类player,AIforGobangGame等,虽然都进⾏了导出。但是⽤作训练或和其他程序对弈只需使⽤AIforGobangGame,所以
请只直接使⽤此类,以保证您的程序对后续dll版本的兼容。因dll是以导出类的形式提供接⼝,且该dll较⼩,使⽤时推荐使⽤静态调⽤⽅
法,若使⽤动态调⽤⽅法会⿇烦很多。
使⽤AIforGobangGame时按照5.1接⼝介绍中的参数标准调⽤即可。
6.作品总结
6.1.作品创新点及技术关键
a.打破传统的基于规则的确定性估值函数,克服了编程者对棋局的主观认知失误造成的不可逆的评估偏差。
b.使⽤TD强化学习训练神经⽹络,对每个局⾯的学习采⽤BP反向传播的⽅式对权值进⾏单次调整。
c.利⽤低层的搜索结果为⾼层搜索提供启发式信息,⼤⼤减少了搜索所⽤时间,提⾼剪枝效率。
d.对于确定性因素采⽤规则判断⽽不是神经⽹络(必胜局判定)。
6.2.作品的先进性,科学性
a.通过特征提取和神经⽹络将确定性信息和⾮确定性信息完美耦合在⼀起。
b.通过规则和神经⽹络的结合避免了在确定性棋局下的失误,且完好地保留了神经⽹络的学习特性。
c.为了增强剪枝效果,使⽤低级层数的搜索为⾼级层数的搜索做预测。
6.3.⽬前存在的问题
a.没有很好地预防过学习。没有噪声识别和处理,因此学习过程中必须和棋⼒较好的程序对弈。
b.没有对⾃⼰棋⼒的评估机制,对于任何阶段都采⽤相同的学习率进⾏学习。
c.演⽰程序及Dll暂时并未实现剪枝中⾮叶节点的启发式搜索。只是实现了根节点的启发式搜索。
d.该版本代码不⽀持禁⼿规则。若要在有禁⼿的场合中使⽤Dll,需要在主程序中进⾏处理。
e.没有提供经过⼤量训练过的权值⽂件,对战测试不够充分。
6.4.发展前景
学习效果明显,改进过学习的问题并进⾏执⾏效率优化后表现将更好。经过⼤规模训练之后应可达到专业⽔准。可以加⼊专业级规则,加⼤
训练规模,推⼴到专业级五⼦棋博弈的⽐赛或者游戏中。
7.参考⽂献
a.基于TD强化学习智能博弈程序的设计与实现莫建⽂,林⼠敏,张顺岚《计算机应⽤》,2004,24(z1):287-288
8.附件清单
Dll源码⼀份。
Dll调⽤所需⽂件⼀份:DllGobangAI.h,,。
演⽰系统源码⼀份。
演⽰系统⼀份:image⽂件夹包含资源⽂件,jre1.8.0_45⽂件夹下为程序运⾏所需jre,权值⽂件(),javajar包(基于神经⽹络
的五⼦棋博弈演⽰系统),(点此打开程序)。
本文发布于:2023-01-01 20:15:11,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/74105.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |