一种基于Alpha-Beta剪枝算法的棋力提高方法

文档序号:605299 发布日期:2021-05-07 浏览:24次 >En<

阅读说明:本技术 一种基于Alpha-Beta剪枝算法的棋力提高方法 (Chess force improving method based on Alpha-Beta pruning algorithm ) 是由 寇英翰 于 2021-01-19 设计创作,主要内容包括:本发明公开一种基于Alpha-Beta剪枝算法的棋力提高方法,包括:S1、遍历棋盘,获取棋盘上博弈双方各种棋型的数量;S2、基于博弈双方每种棋型的权重,获取各种棋型的得分;S3、基于博弈双方的棋型得分进行算杀,算杀成功,则基于算杀结果获取走棋位置,算杀失败,则执行步骤S4;S4、采用对抗搜索算法及Alpha-beta剪枝算法进行多线程搜索,基于多线程搜索结果,获取最佳走棋位置;S5、增加搜索深度,并重复步骤S4进行迭代加深搜索,直到满足迭代条件,基于每次迭代过程中所获取的最佳走棋位置的得分,获取最终走棋位置。本发明能够有效提高棋力及着棋效率。(The invention discloses a chess force improving method based on an Alpha-Beta pruning algorithm, which comprises the following steps: s1, traversing the chessboard to obtain the number of various chess types of both sides of the game on the chessboard; s2, obtaining scores of various chess types based on the weight of each chess type of both game parties; s3, calculating and killing based on the chess type scores of both game parties, if the calculation and killing is successful, obtaining the chess moving position based on the calculation and killing result, and if the calculation and killing is failed, executing the step S4; s4, carrying out multi-thread search by adopting an confrontation search algorithm and an Alpha-beta pruning algorithm, and acquiring the optimal chess moving position based on the multi-thread search result; and S5, increasing the search depth, repeating the step S4 to perform iteration deepening search until an iteration condition is met, and acquiring a final chess-moving position based on the score of the optimal chess-moving position acquired in each iteration process. The invention can effectively improve chess force and chess playing efficiency.)

一种基于Alpha-Beta剪枝算法的棋力提高方法

技术领域

本发明涉及机器博弈技术领域,特别是涉及一种基于Alpha-Beta剪枝算法的棋力提高方法。

背景技术

五子棋是一款经典的两人对弈的纯策略型棋类游戏。相对于国际象棋、中国象棋、围棋、日本将棋,五子棋简单易学,但是精通五子棋并非易事。有很多学者在五子棋博弈领域做了深入的研究:张明亮等人通过各类棋型估值的研究,优化了五子棋估值函数,解决了部分五子棋程序估值不完善的问题;毛丽民等结合图像采集和分析,研发可以进行实物对弈的五子棋机器人;程宇等通过对Alpha Beta剪枝算法的改进,优化了着棋效率低下的问题;还有学者设计和实现了整套完整的五子棋人机博弈软件。但是五子棋博弈系统仍然存在着计算效率低下和博弈水平不高的问题,因此,有必要提供一种基于Alpha-Beta剪枝算法的棋力提高方法,在保证着棋效率的同时提高棋力。

发明内容

本发明的目的是提供一种基于Alpha-Beta剪枝算法的棋力提高方法,以解决现有技术中存在的技术问题,能够有效提高棋力以及着棋效率。

为实现上述目的,本发明提供了如下方案:本发明提供一种基于Alpha-Beta剪枝算法的棋力提高方法,包括:

S1、遍历棋盘,获取棋盘上博弈双方各种棋型的数量;

S2、基于博弈双方每种棋型的权重,获取各种棋型的得分;

S3、基于博弈双方的棋型得分进行算杀,算杀成功,则基于算杀结果获取走棋位置,算杀失败,则执行步骤S4;

S4、采用对抗搜索算法及Alpha-beta剪枝算法进行多线程搜索,基于多线程搜索结果,获取最佳走棋位置;

S5、增加搜索深度,并重复步骤S4进行迭代加深搜索,直到满足迭代条件,基于每次迭代过程中所获取的最佳走棋位置的得分,获取最终走棋位置。

优选地,所述步骤S1中,所述棋型包括:连五、活四、冲四、活三、眠三、活二、眠二、活一。

优选地,所述步骤S2中,各种棋型的权重分布为:连5>活4>冲4=活3>眠3=活2>眠2=活1。

优选地,所述步骤S3中,所述算杀采用对抗搜索算法获取走棋位置。

优选地,所述对抗搜索算法基于博弈树模型进行搜索,所述博弈树模型包括若干个Max层、若干个Min层,所述Max层、Min层依次间隔设置,所述Max层、Min层分别代表博弈双方。

优选地,所述步骤S4中,所述多线程搜索的具体方法包括:

S4.1、采用启发式评估算法的评估函数,对博弈树模型中的各节点进行评分,获取评分大于预设阈值的节点;

S4.2、在博弈树模型的顶层单独进行一次两层搜索,获取两层中得分最高节点;

S4.3、基于步骤S4.1中评分大于预设阈值的节点,获取由若干个线程组成的线程池,并对线程池进行初始化,将搜索任务进行打包,并将S4.2中得到的得分最高的节点插入每个搜索任务的首部后分发至每个线程进行搜索,获取每个线程的最佳走棋位置评分;

S4.4、基于各线程的最佳走棋位置评分结果,获取最佳走棋位置。

优选地,所述步骤S4.3中,将搜索任务进行打包后分别插入各个搜索初始节点,并按各线程进行搜索。

优选地,所述步骤S4.3中,每个线程进行搜索的过程中,采用局势估分算法获取该线程的最佳走棋位置评分。

优选地,所述步骤S5中,将每次迭代中的搜索结果存入置换表中。

本发明公开了以下技术效果:

本发明针对五子棋博弈系统仍然存在着计算效率低下和博弈水平不高的问题,提出了一套基于Alpha-Beta剪枝算法的棋力提高方法,引入启发式评估方法、置换表、多线程、浅层最优算法,以优化搜索效率并提高棋力。实验结果表明,着棋效率得到了大幅提升,将可接受的搜索深度提高到了6层;同时,通过引入了算杀和迭代加深思想,显著提高了AI的棋力,尤其是在浅层绝杀方面有着很大的优势。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明基于Alpha-Beta剪枝算法的棋力提高方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参照图1所示,本实施例提供一种基于Alpha-Beta剪枝算法的棋力提高方法,包括如下步骤:

S1、遍历棋盘,获取棋盘上博弈双方各种棋型的数量;所述博弈双方包括我方、敌方;

所述棋型包括:连五、活四、冲四、活三、眠三、活二、眠二、活一;

其中,连五为至少五颗同色棋子连在一起;

活四为存在两个连五点,即有两个点能够形成连五;

冲四为存在一个连五点;

活三为能够形成活四的三颗棋子;

眠三为仅能形成冲四的三颗棋子;

活二为能够形成活三的两颗棋子;

眠二为仅能形成眠三的两颗棋子;

活一为能够形成连五的一颗棋子。

S2、基于博弈双方每种棋型的权重,获取各种棋型的得分;

各种棋型的得分基于各棋型的加权和进行获取。

各种棋型的权重分布为:连5>活4>冲4=活3>眠3=活2>眠2=活1;各等级之间的权重相差10倍以上。本实施例中,连5、活4、冲4、活3、眠3、活2、眠2、活1的权重分别为:104,103,102,102,10,10,1,1。除该八种棋型外,权重均设为0,如死二、死三、死四棋型。

S3、基于博弈双方的棋型得分进行算杀,算杀成功,则基于算杀结果获取走棋位置,算杀失败,则执行步骤S4;

所述算杀采用对抗搜索算法获取走棋位置;在搜索过程中,考虑自身下棋位置时,仅考虑能否形成杀招,有效弥补了进攻性的不足。

所述对抗搜索算法基于博弈树模型进行搜索,所述博弈树模型包括若干个Max层、若干个Min层,所述Max层、Min层依次间隔设置。所述Max层、Min层分别代表博弈双方中的我方、敌方;通过对抗搜索,为Max层寻找最佳走棋位置。

所述对抗搜索算法即为极大极小搜索算法,是一种找出失败的最大可能性中的最小值的算法(即最小化对手的最大得益)。基本思想如下:

Max和Min代表博弈双方;p代表一个棋局(即一个状态);有利于MAX的态势,f(p)取正值;有利于MIN的态势,f(p)取负值;态势均衡,f(p)取零值;

当轮到MIN走步时,MAX考虑最坏的情况,即f(p)取极小值;

当轮到MAX走步时,MAX应该考虑最好的情况,即f(p)取极大值;

相应于两位棋手的对抗策略,交替使用(1)和(2)两种方法传递倒推值。

本实施例中,所述算杀过程中的搜索规则为:

(1)Max层:仅搜索AI的杀棋节点(能构成活三、冲四的进攻棋型);

(2)Min层:搜索黑棋的杀棋节点以及黑棋评分超出预设阈值的节点,优先保证不输棋;

(3)找到绝杀局势则算杀成功,否则算杀失败。

S4、采用对抗搜索算法及Alpha-beta剪枝算法进行多线程搜索,基于多线程搜索结果,获取最佳走棋位置。

所述Alpha-beta剪枝算法是一种针对极大极小搜索算法进行优化的算法。思想如下:

在MAX层,假设当前层已经搜索到一个最大值X,如果发现下一个节点的下一层(也就是MIN层)会产生一个比X还小的值,那么就直接剪掉此节点。

在MIN层,假设当前层已经搜索到一个最小值Y,如果发现下一个节点的下一层(也就是MAX层)会产生一个比Y还大的值,那么就直接剪掉此节点。

由于当前实现的搜索方法是单线程串行的,并不能很好的利用多核优势,造成了计算资源的浪费。因此,本发明中加入了线程池,通过在搜索的顶层对各线程分发不同的搜索节点,实现多线程计算。例如当前设置的是四线程计算,在顶层主线程通过启发式评估函数获得了20个评分优秀的节点,分别将1-5节点、6-10节点、11-15节点、16-20节点打包为4个任务,分配给这四个线程运行。主线程等待这些线程运行结束,通过对比每个线程选择的节点和评分,选出最优位置并返回。

但是在实际测试中发现,由于部分线程搜索的位置并不优秀,比如第四个线程,得到的搜索任务是评分较低的5个节点,在进行Alpha-beta剪枝时并不顺利。造成单线程搜索下整颗树的节点数目少于多线程搜索下整棵树的节点数,多线程搜索的时间长于单线程的搜索时间。

为了优化多线程搜索,考虑到进行2层搜索的速度快,得到的节点也比较优秀。因此在分发任务时,先进行一次2层搜索,将得到的节点插入每个任务的首部。这样各个线程都会先搜索这个比较优秀的位置,之后进行alpha-beta剪枝就会很顺利。

所述多线程搜索的具体方法包括:

S4.1、采用启发式评估算法的评估函数,对博弈树模型中的各节点进行评分,获取评分大于预设阈值的节点;

由于Alpha-beta剪枝的效率极度依赖于搜索顺序,并且若每一层都将所有可能性进行考虑,运行时间会很快超过可承受范围。因此引入了启发式评估函数,通过对传入棋盘进行遍历,找到所有与有棋子的位置有关联的可下棋位置(每个有棋子的位置在8个方向扩展3个深度),并使用启发式评估算法的评估函数对这些位置分别打分。根据打分对节点排序,并返回评分大于预设阈值的节点位置集合。

S4.2、在博弈树模型的顶层单独进行一次两层搜索,获取两层中得分最高节点;

S4.3、基于步骤S4.1中评分大于预设阈值的节点,获取由若干个线程组成的线程池,并对线程池进行初始化,将搜索任务进行打包,并将S4.2中得到的得分最高的节点插入每个搜索任务的首部后分发至每个线程进行搜索,获取每个线程的最佳走棋位置评分;

其中,将搜索任务进行打包后分别插入各个搜索初始节点,并按各线程进行搜索。

每个线程进行搜索的过程中,采用局势估分算法,获取该线程的最佳走棋位置评分;进行极大极小值搜索时所依赖的便是对局势的打分,因此,本发明引入了一个局势估分算法:通过对棋盘进行遍历,分别计算我方(白棋)和敌方(黑棋)的活二、活三、活四、眠三、冲四等局势数目进行分数评估。在设计具体分值时,将黑棋的每种局势下获得分数的绝对值增大,这样保证在计算下棋位置时能优先防御敌人的进攻,先保证不输棋,再考虑赢棋。

S4.4、基于各线程的最佳走棋位置评分结果,获取最佳走棋位置。

S5、增加搜索深度,并重复步骤S4进行迭代加深搜索,直到满足迭代条件,基于每次迭代过程中所获取的最佳走棋位置的得分,获取最终走棋位置。

因为现在的AI只比较最终结果,并没有考虑到路径长短。所以很容易出现在6层搜索到一个双三,其实在4层的时候也有一个双三,因为分数一样,AI会随机选择一个走法。就导致了明明可以两步赢的棋,AI非要走3步。

本发明引入迭代加深的方式以解决这个问题。从2层开始,逐步增加搜索深度,直到找到胜利走法或者达到深度限制为止。

同时,本发明在迭代搜索过程中,将每次迭代中的搜索结果存入置换表中。

在实际进行极大极小搜索时,会产生很多重复性的搜索,例如:[7,7],[8,7],[7,6],[7,9];该走法与下面的走法只是顺序不同,最终走出来的局面是一样的:[7,6],[7,9],[7,7],[8,7];对于五子棋来说,只要当前局面上的棋子一样,局势就是一样的。因此如果有了第一次的打分,通过置换表将其缓存起来,第二次打分可以直接使用缓存数据;同时,将搜索结果缓存下来,用在之后的极大极小搜索中。

所述置换表通过使用Zobrist算法,可以快速计算一个局势对应的Hash值:初始化两个二维数组。一个表示黑棋,一个表示白旗。上述数组的每一个都填上一个随机数,每下一步棋,则用当前键值异或Zobrist数组里对应位置的随机数,得到的结果即为新的键值。

因为2层的搜索时间远低于4层搜索,4层搜索的时间又远低于6层搜索,并且本发明还使用了置换表优化,因此迭代加深带来的时间消耗可以忽略不计,有效提高了棋力及着棋效率。

为进一步验证本发明基于Alpha-Beta剪枝算法的棋力提高方法的效果,本实施例在不进行算杀步骤的情况下,进行了5次人机对战,对本发明棋力及着棋效率的提高效果进行验证。

通过5次人机对战,AI棋力远胜于人,证明了棋力提高效果的有效性。

为验证各技术特征的有效性,本实施例分别对单线程关闭置换表、单线程开启置换表、多线程关闭置换表、多线程开启置换表四种情况进行测试,取前10步的计算时间平均值进行比较验证,单线程、四线程搜索的耗时分别如表1、表2所示,单线程、四线程的耗时对比如表3所示。

表1

表2

表3

由表1-3可知,置换表及多线程的优化效果非常显著。尤其是在深度为6的情况下,四线程配合置换表优化后,单步计算耗时能够降低到平均6.64秒,相比单线程的非置换表搜索,耗时降低了53.5%,将可接受的搜索深度提高到了6层。

本发明具有以下技术效果:

本发明针对五子棋博弈系统仍然存在着计算效率低下和博弈水平不高的问题,提出了一套基于Alpha-Beta剪枝算法的棋力提高方法,引入启发式评估方法、置换表、多线程、浅层最优算法,以优化搜索效率并提高棋力。实验结果表明,着棋效率得到了大幅提升,将可接受的搜索深度提高到了6层;同时,通过引入了算杀和迭代加深思想,显著提高了AI的棋力,尤其是在浅层绝杀方面有着很大的优势。

以上所述的实施例仅是对本发明的优选方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。

9页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于提供时移智能同步游戏视频的系统和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类