博弈树搜索算法在中国象棋中的应用
“理治棋壮”中国象棋计算机博弈引擎基本数据结构与模块设计说明
实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏
实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏(3学时)一、实验目的与要求(1)了解极大极小算法的原理和使用方法,并学会用α-β剪枝来提高算法的效率。
(2)使用C语言平台,编写一个智能井字棋游戏。
(3)结合极大极小算法的使用方法和α-β剪枝,让机器与人对弈时不但有智能的特征,而且计算的效率也比较高。
二、实验原理一字棋游戏是一个流传已久的传统游戏。
游戏由两个人轮流来下,分别用“X”和“O”来代替自身的棋子。
棋盘分9个格,双方可以在轮到自己下的时候,可以用棋子占领其中一个空的格子。
如果双方中有一方的棋子可以连成一条直线,则这一方判胜,对方判负。
当所有的格子都被占领,但双方都无法使棋子连成一条直线的话,则判和棋。
这是一个智能型的一字棋游戏,机器可以模拟人与用户对弈。
当轮到机器来下的时候,机器会根据当前棋局的形势,利用极大极小算法算出一个评价值,判断如何下才对自身最有利,同时也是对方来说对不利的,然后下在评价值最高的地方。
另外利用α-β剪枝,使机器在搜索评价值的时候不用扩展不必要的结点,从而提高机器计算的效率。
在用户界面方法,用一个3×3的井字格来显示用户与机器下的结果。
当要求用户输入数据的时候会有提示信息。
用户在下的过程中可以中途按下“0”退出。
当用户与计算机分出了胜负后,机器会显示出比赛的结果,并按任意键退出。
如果用户在下棋的过程中,输入的是非法字符,机器不会做出反应。
三、实验步骤和过程1.α-β搜索过程在极小极大搜索方法中,由于要先生成指定深度以内的所有节点,其节点数将随着搜索深度的增加承指数增长。
这极大地限制了极小极大搜索方法的使用。
能否在搜索深度不变的情况下,利用已有的搜索信息减少生成的节点数呢?设某博弈问题如下图所示,应用极小极大方法进行搜索MINIMAX过程是把搜索树的生成和格局估值这两个过程分开来进行,即先生成全部搜索树,然后再进行端节点静态估值和倒推值计算,这显然会导致低效率。
中国象棋博弈算法研究(XFS算法)毕业论文
毕业论文声明本人郑重声明:1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。
除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。
对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。
本人完全意识到本声明的法律结果由本人承担。
2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。
本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。
3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。
4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。
论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。
论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。
学位论文作者(签名):年月关于毕业论文使用授权的声明本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。
本人完全了解大学有关保存,使用毕业论文的规定。
同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。
本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。
如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。
本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。
本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。
基于QT的中国象棋算法设计与实现方案
本系统主要用Visual C++进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。
该象棋人机博弈系统实现的功能主要包括:
1、选手选择(人或电脑);
2、人机对弈(人与电脑竞技);
3、悔棋、还原;
4、着法名称显示(象棋走棋规范名称)。
This article is based on research and analysis on the game tree, has to find and use Minimax α-β pruning algorithm for finding the next improvement, the process of Chinese chess and chess for a useful discussion.
Abstract
Chinese chess development has been several thousand years of history, and it is the wisdom of the Chinese nation. In China, the popularity of Chinese chess board is unmatched by other large to international and domestic competitions, small community streets。
Finally, on this basis, the use of object-oriented technology, integrated structured programming method, all of the operating logic encapsulated in a class-based system to achieve Chinese chess game game tree algorithm. The system uses QT development tools to achieve human-computer chess and Chinese chess program that has a double battle of c的电子棋盘,后来升级到电视游戏机。开始出现的一些容量很小的象棋软件如:DOS界面《将族》、WIN31程序的《中国象棋》等等,与其说人类下不过电脑,倒不如说是没有耐性等待电脑程序慢吞吞的搜索算法,有时甚至怀疑软件是否在搜索中死掉了。后来,网络上先后出现了真正的WINDOWS窗口界面的象棋专业高级软件《棋隐》、《象棋世家》、《象棋参谋》、《象棋奇兵》等。总而言之,各类象棋软件既有自身的优点,也存在共通性的缺陷,如:中局审势不够智能化,走不出弃子取势的人性化佳构,残局时智力明显低于人脑,难以走出残局例胜的必然着法等。放眼未来,象棋软件已经走完了一波持续上涨的行情,有可能出现逐步降温的滑坡趋势。
基于数据库自学习的中国象棋研究
基于数据库自学习的中国象棋研究象棋软件一般可以通过很多方法提高棋力,但最好的方法是优化数据结构、改进搜索方式,这两种方法都有很高的博弈水平,但机器学习能力都较差。
以前应用数据库自学习的方法都存在很大的缺陷。
文章通过将判断失误的关键着法和局面值存储到数据库中,从而使后面的象棋步骤当中相同局面时转变策略,避免相同的失误步骤,从而实现自学习能力。
标签:数据库;博弈树搜索;关键着法引言目前,象棋软件大多数存在的问题是不具有自学习能力,以前主要应用提高数据结构和计算机运行速度的方式来改进象棋软件的水平,而很少应用通过数据库记录计算机下棋过程中好的着法和局面值的方法,这种方法可以使计算机在以后相同局面时,转变象棋软件策略,不重复失败的老路,实现自学习能力。
1 棋类游戏典型的自学习方法目前,自学习能力的实现方法有很多种,最主要有两种:一是应用加强的学习方法(包括三个方面:加强学习与神经网络相结合、同数据库结合以及瞬时差分TD算法);二是自适应遗传算法,其中重点是加强学习的TD方法。
1.1 加强学习同神经网络结合(RBP)在计算机棋类软件的发展过程中,机器自学习能力的发展有着成功的应用,比如Gerald Tesauro在1995年推出的西洋双陆棋TD-Gammon。
通过150万盘比赛,最后取得世界冠军的水平。
国内也有这方面的相关研究,王一非,哈尔滨工程大学硕士,2007年在其毕业论文中详细的说明并提出了应用RBP的缺点:神经网络运算量太大,自学习过程时间长,收敛时间过慢。
1.2 加强学习同数据库结合长沙理工大学硕士付强2006年在其论文《基于激励学习的中国象棋研究》中已经提出了将象棋软件和数据库结合的方法,记录最好着法值,来提高自学习能力。
经过1万多盘比赛结果,已经下败了传统软件。
1.3 瞬时差分TD 算法早在1999年,ChrisSzeto就提出瞬时差分TD算法来优化棋类软件。
经过多次游戏实验,将修正后的棋子子力值保存到数据库中,比之前通过经验与试算估计的方法更容易取得比赛的胜利,说明起到了优化作用。
博弈树的搜索
极小极大过程
0
1 1
极大
极小
6
0
3
1
0
-3
3
-3
-3
-2
1
-3
6
-3
0
5
-3
3
3
-3
0
2
2
-3
0
-2
3 5 4
1
-3
0 6
8 9
-3
一字棋游戏
设有一个三行三列的棋盘,两个棋手轮流走步,每 个棋手走时往空格上摆一个自己的棋子,谁先使自己 的棋子成三子一线为赢。设程序方MAX的棋子用(×) 表示,对手MIN的棋子用(○)表示,MAX先走。静态 估计函数f(p)规定如下: 1. 若 P是 MAX的必胜局, 则 e(P) = +∞ ; 2. 若 P是 MIN的必胜局, 则 e(P) = -∞ ; 3. 若P对MAX、MIN都是胜负未定局,则 e(P) = e(+P)-e(-P) 其中,e(+P)表示棋局 P上有可能使× 成三子一线的 数目;e(-P)表示棋局 P上有可能使 ○成三子一线的 数目。
中国象棋
一盘棋平均走50步,总状态数约为10的161次方。 假设1毫微秒走一步,约需10的145次方年。 结论:不可能穷举。
博弈树是与/或树
双方都希望自己能够获胜。因此,当任何一方走步时, 都是试图选择对自己最为有利,而对另一方最为不利的 每一步,可供自己选择 的行动方案之间是“或”的关系,原因在于选择哪个方案完 全是由自己决定的;而可供MIN选择的行动方案之间则是 “与”的关系,原因是主动权掌握在MIN手里,任何一个方
α-β
α值为MAX节点(“或”节点)倒推值的下确界
基于QT的中国象棋算法设计与实现论文
基于QT的中国象棋算法设计与实现摘要中国象棋发展至今已有数千年的历史了,它是中华民族智慧的结晶。
在我国,中国象棋的普及程度是其它棋类无法比拟的,大至国际、国内比赛,小至社区街道。
本文章在研究分析对局树的基础上,先后运用极大极小查找和α-β修剪对查找下一步的算法进行了改进,并对中国象棋的对弈过程进行了有益的探讨。
最后在此基础上,运用面向对象的技术,综合结构化程序设计方法,将所有的操作逻辑封装于类,实现基于对局树算法的中国象棋游戏系统。
系统使用QT开发工具,实现了一个具有一定棋力的中国象棋人机对弈和双人对战程序。
关键词:中国象棋人工智能博弈树Alpha-Beta搜索With the implementation of Chinese chess algorithm design based on QTAbstractChinese chess development has been several thousand years of history, and it is the wisdom of the Chinese nation. In China, the popularity of Chinese chess board is unmatched by other large to international and domestic competitions, small community streets。
This article is based on research and analysis on the game tree, has to find and use Minimax α-β pruning algorithm for finding the nex t improvement, the process of Chinese chess and chess for a useful discussion.Finally, on this basis, the use of object-oriented technology, integrated structured programming method, all of the operating logic encapsulated in a class-based system to achieve Chinese chess game game tree algorithm. The system uses QT development tools to achieve human-computer chess and Chinese chess program that has a double battle of chess. Key words: Chinese chess; artificial intelligence;game tree;Alpha-Beta search目录摘要 (i)Abstract (ii)1 绪论 (1)1.1 中国象棋游戏设计背景和研究意义 (1)1.2 国内外象棋软件发展概况 (1)1.3 中国象棋游戏设计研究方法 (1)1.4 本文的主要工作 (2)2 系统的分析和设计 (3)2.1 棋盘和棋子的表示 (3)2.2 着法生成 (5)3 博弈程序的实现 (7)3.1 搜索算法 (7)3.2 估值函数(Evaluation Function) (11)3.2.1 估值函数简介 (11)3.2.2 估值函数的优化 (12)3.2.3 着法排序 (13)3.3 局面评估 (16)4 走棋程序的实现 (20)4.1 悔棋和还原功能的实现 (20)4.2 着法名称显示功能的实现 (22)4.3 主要函数 (26)4.4 将军检测 (30)5 系统实现 (31)5.1 系统的整体规划 (31)5.2 对弈功能的实现 (32)总结 (38)参考文献 (39)致谢 (40)外文原文 (41)中文翻译 (48)1 绪论1.1 中国象棋游戏设计背景和研究意义中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。
[转载]中国象棋软件-引擎实现(四)搜索算法
// 执行着法,返回ptTo位置的棋子状况。即若吃掉子返回被吃掉的子,没有吃子则返回0 BYTE DoMove( CCHESSMOVE * move );
然而,下棋是一个你来我往的交替进行并且相互“较劲”的过程,由于每一方都会尽可能将局面导向对自己有利而对对方不利的形势。所以有些“暂时”看来很不错的局面由于可 能会产生很糟糕的局面因而根本没有考虑的价值。所以当你看到某个局面有可能产生很糟糕的局面时(确切地说这里的“很糟糕”是与之前所分析的情况相比较而言的),你 应当立刻停止对其剩余子结点的分析——不要对它再报任何幻想了,如果你选择了它,则你必将得到那个很糟糕的局面,甚至更糟……这样一来便可以很大程度上减少搜索 的工作量,提高搜索效率。这称为“树的剪裁”。为了便于大家理解,下面我援引ElephantBoard的主页上所翻译的《Alpha-Beta搜索》中的一个“口袋的例子”,原文作者是 Bruce Moreland (brucemo@)。 口袋的例子:
int iBestmove = -1;
for( i = 0; i < nCount; i ++ ) {
nCChessID = DoMove( & MoveList[nDepth][i] ); // 执行着法(生成新节点) nScore = - AlphaBeta_HH( nDepth - 1, -beta, -alpha );//递归调用AlphaBeta_HH UndoMove( & MoveList[nDepth][i], nCChessID ); // 撤销执行(删除节点)
博弈在棋类竞技中的应用及暗棋致胜策略
基于博弈思想的象棋暗棋致胜策略模型摘要:机器博弈被认为是人工智能领域最具挑战性的方向之一。
“深蓝”对阵世界棋王卡斯帕罗夫的胜利也给人们留下无尽的记忆和思考。
近些年来IT行业发展极快,计算机的运算能力远胜以往,国内外棋类竞技中的博弈算法也日趋成熟。
本文以此为背景,概括地介绍了一般棋类竞技软件博弈算法的主要思想和实现方式,并将博弈的思想创造性地应用在中国象棋变体“暗棋”上,尝试性地提出一种策略模型。
关键词:不完全信息博弈;中国暗棋;概率;估值函数;博弈树搜索1.引言博弈问题无所不在,小到孩童的游戏与争论、各种场合下的讨价还价,大到商家的竞争、各种突发事件的应急处理、国家的外交、流血的和不流血的战争,只要局中的双方主体存在某种利益冲突,博弈便成为矛盾表现和求解的一种方式。
博弈与对策将成为一类智能系统研究的焦点问题。
象棋是从两军对阵中抽象出来的一种智力游戏,因此它是博弈的一个标准问题。
下棋的双方无时不在调动自己的一切智能,充分发挥逻辑思维、形象思维和灵感思维的能力。
所以,在人工智能领域始终将棋类的机器博弈作为最具挑战性的研究方向之一,到现在也已取得了一定的成果[1]。
1997年IBM的超级计算机“深蓝”战胜“世界棋王”卡斯帕罗夫,更是给世界带来了巨大的震撼,掀起了“人机对战”的研究狂潮。
无论是国际象棋还是中国象棋,从博弈的角度来说都属于完全信息的动态博弈[12],且局面的数量在数学意义上是有限的。
因此,理论上只要计算机的速度够快,是可以穷举出所有可能并择一最优解或近似最优解。
而暗棋则不同,虽然规则简单,但是具有一定的随机因素,所以决策空间尽管易于遍历,却难以择出最优解,属于一类不完全信息的动态博弈[10]。
本文旨在将博弈思想体现在暗棋对弈之中,列出一些可能的想法和模型,并不奢求提出完备的算法流程。
2.中国暗棋暗棋是一个利用象棋棋盘与棋子来进行的棋类游戏,它的规则没有象棋般复杂,走棋在上,被吃子在下,虽然暗棋看起来如此的简单,但却一直受到大众的喜爱。
第二章基于搜索的问题求解之博弈树的搜索
举例:
MAX节点 a 0
MIN节点
b -
e -
h0
终端节点 c
d
f
g
i
j
0 - 2 - 2
0
极大极小法的引入:
• 如例题中所示,设执〇的这一方是正方, 它从所有子节点中,选取具有最大评估值 的节点,所以称为MAX节点。
• 另一方执的是反方,它的每一个节点都是 从其所有子节点中,选取具有最小评估值 的节点,所以称为MIN节点。
A B〇
〇〇╳
a)
╳ C╳
A 〇〇
〇〇 ╳
e)
╳C ╳
输
╳ 〇〇
f) 〇 〇 ╳
╳ C╳
可能输
A 〇〇
g) 〇 〇 ╳
╳╳ ╳
赢
最后一种情况,是
〇选择C时,得到局面 h)。接着╳的可选分枝 剩下A和B。当╳选择A时, 〇也会出现两个并排的 局面, ╳可能会输;当╳ 选择B时,却出现了平局 的局面。因此,这时╳会 选择放在B的位置,从而 局面h)的预估值为平局。
A B〇
〇〇╳
a)
╳ C╳
如果〇选择在 空格A上,则棋盘 局面变成b),如右 图所示。
A B〇
〇〇╳
a)
╳ C╳
〇B 〇
〇〇 ╳
b)
╳C ╳
接着轮到╳走棋。这
时可供选择的分枝是剩 余的B和C。如果这时╳ 选择B,则变成平局;如 果选择C,则╳能赢。在 这种情况下,╳当然会选 择放在C,因此局面b) 的预估值是输的。
(-,5) B
(5,) D
HI 35 • 对于MIN节点B,取第一个子节点D的评估值 5作为它的上限,最后评估值是否能定为5, 还要看其它子节点的评估值。
中国象棋——机器博弈-搜索算法研究64页PPT
中国象棋——机器博弈-搜索算法研究
•
6、黄金时代是在我们的前面,而不在 我们的 后面。
•
7、心急吃不了热汤圆。
•
8、你可以很有个性,但某些时候请收 敛。
•
9、只为成功找方法,不为失败找借口 (蹩脚 的工人 总是说 工具不 好)。
•
10、只要下定决心克服恐惧,便几乎 能克服 任何恐 惧。因 为,请 记住, 除了在 脑海中 ,恐惧 无处藏 身。-- 戴—德 谟克利 特 67、今天应做的事没有做,明天再早也 是耽误 了。——裴斯 泰洛齐 68、决定一个人的一生,以及整个命运 的,只 是一瞬 之间。 ——歌 德 69、懒人无法享受休息之乐。——拉布 克 70、浪费时间是一桩大罪过。——卢梭
一种中国象棋残局棋谱自动生成算法
第19卷 第6期2010年11月云南民族大学学报(自然科学版)J o u r n a l o f Y u n n a nU n i v e r s i t yo f N a t i o n a l i t i e s (N a t u r a l S c i e n c e sE d i t i o n )V o l .19 N o .6N o v .2010收稿日期:2010-07-08.作者简介:吴丽贤(1974-),女,硕士,讲师.主要研究方向:机器博弈、软件工程和分布式应用.d o i :10.3969/j .i s s n .1672-8513.2010.06.012一种中国象棋残局棋谱自动生成算法吴丽贤,和 力(韩山师范学院数学与信息技术系,广东潮州521041)摘要:通过对传统博弈树搜索算法的修改,提出了一种中国象棋残局棋谱的自动生成算法,该算法基于极深极浅算法,并用剪枝、着法排序、置换表等手段对其搜索效率进行了优化.实验数据表明该算法在搜索生成连照胜杀局的棋谱时,具有较好的效果.最后用该算法对《象棋残局杀局宝典》中的残局进行了验证,发现了书中记录的残局棋谱存在的一些错误.关键词:中国象棋;残局;棋谱;博弈树;搜索算法中图分类号:T P 18文献标识码:A文章编号:1672-8513(2010)06-0435-04A n A u t o m a t i c G e n e r a t i o n A l g o r i t h m f o r t h e M a n u a l o f C h i n e s e C h e s s E n d g a m e sWUL i -x i a n ,H EL i(D e p a r t m e n t o f M a t h e m a t i c s a n d I n f o r m a t i o nT e c h n o l o g y ,H a n s h a nT e a c h e r s C o l l e g e ,C h a o z h o u 521041,C h i n a )A b s t r a c t :T h r o u g h m o d i f y i n g t h e t r a d i t i o n a l s e a r c h a l g o r i t h m s o f g a m e t r e e ,a n a u t o m a t i c g e n e r a t i o n a l g o r i t h mf o r t h e m a n u a l o f C h i n e s e c h e s s e n d g a m e s i s p u t f o r w a r d .T h e a l g o r i t h mi s b a s e d o n t h e d e e p e s t a n d s h a l l o w e s t s e a r c h a l g o r i t h m p r o p o s e d i n t h i s p a p e r ,a n d i s o p t i m i z e d b y p r u n i n g ,t r a n s p o s i t i o n t a b l e ,m o v e s o r t ,e t c .T h e e x p e r i m e n t a l d a t a s h o w t h a t t h i s a l g o r i t h mh a s f a i r l y g o o d r e s u l t s f o r t h e e n d g a m e s b y s u c c e s s i v e c h e c k s f o r w i n n i n g .F i n a l l y ,t h e e n d g a m e s i n t h e W e l l -k n o w n C h i n e s e C h e s s E n d g a m e s a r e v e r i f i e d b y t h i s a l g o r i t h ma n d s o m e e r r o r s a r e f o u n d i n t h i s c h e s s m a n u a l .K e y w o r d s :C h i n e s e c h e s s ;e n d g a m e ;c h e s s m a n u a l ;g a m e t r e e ;s e a r c h a l g o r i t h m 棋类博弈是一种以默算为基础的竞技运动,棋力的高低很大程度上取决于棋手的默算能力[1].而将计算能力最强的工具计算机应用于棋类博弈,形成了人工智能领域的一个重要分支:机器博弈.机器博弈一方面丰富了棋类运动,产生了许多的人机对弈软件,使棋类运动从人与人面对面的对弈扩展到人机对弈;另一方面通过机器博弈水平的高低反过来可检验人工智能中某些理论与方法的有效性.这两方面的相互作用推动了机器博弈水平的发展,1997年“更深的蓝”战胜世界国际象棋棋王卡斯帕罗夫,成为机器博弈发展史上一具有里程碑意义的事件.机器博弈的传统研究重点和前沿是国际象棋,国内研究人员借鉴机器博弈在国际象棋方面的理论和方法,对机器博弈在中国象棋上的应用进行了开拓和研究.中国象棋的对弈过程大致分为开局、中局和残局3个阶段,各阶段有不同的博弈特点,机器博弈也应采用不同的策略.残局是指由少数棋子所构成并进入决定胜负阶段的对峙局面,残局阶段虽然棋子减少了,但棋子的活动空间相对延展了,弱子的价值普遍提高,一般的棋局评估和搜索算法会变得不够精准,所以残局阶段是机器博弈目前最弱的一环[2].本文通过对传统博弈树搜索算法的修改,绕开复杂的棋局评估,提出了一种中国象棋残局棋谱的自动生成算法.该算法对于残局库的开发和提高机器在残局阶段的博弈水平具有一定的借鉴价值,并能对现存的残局解法进行验证,也可作为棋手解答残局的辅助训练工具.1 极深极浅算法中国象棋的残局可分为例和与例胜2类,例和是指双方都走正着,避免错着,结果必然为和局;例胜是指攻方按正确的着法走棋,无论守方如何行棋,结果必是攻方获胜.一方面由于大部分平时讨论的残局属于例胜残局,另一方面由于和局的机器评断还不是非常准确,且需要搜索的局面可能较多,超出了现有计算机的能力,所以下面只对例胜残局进行讨论.不失一般性,文中的例胜残局特指红方获胜的残局,否则只要交换红黑方既可.图1为中国象棋的博弈树,圆框节点代表轮到红方走的局面,方框节点代表轮到黑方走的局面,节点间的连线表示着法.若从节点A 到节点B 存在一条着法路径,则称节点B 的深度为该着法路径的深度,所经过的分支数为该着法路径的着数.例如图1中虚线标注的着法路径深度为3,着数也为3.残局博弈树中,深度为n 的节点存在残局棋谱是指:1)对于轮到红方走的节点,若存在胜着,则由该胜着组成的着法路径为该节点深度为n +1的残局棋谱;2)对于轮到黑方走的节点,若存在胜着,则该节点不存在残局棋谱;3)对于轮到红方走的节点,虽无胜着,但有一到多个子节点有残局棋谱,则深度最浅的子节点残局棋谱加上到该子节点的着法组成的着法路径称为该节点的残局棋谱,否则节点不存在残局棋谱;4)对于轮到黑方走的节点,无胜着,且其所有子节点都有残局棋谱,则深度最深的子节点残局棋谱加上到该子节点的着法组成的着法路径为该节点的残局棋谱,否则节点不存在残局棋谱.一个残局的棋谱就是指其初始局面的残局棋谱,它可能不是唯一的.为了能自动生成残局的棋谱,本文对传统的机器博弈搜索算法极大极小算法[3]进行了修改,提出了极深极浅算法,算法的伪C 代码如下所示.b o o l C r e a t e C h e s s M a n u a l (i n t n P l y ,i n t n S i d e ){//n P l y 表示局面所处的层次,n S i d e 表示着方i f (n S i d e i s R E D )H a v e P a t h =f a l s e ;e l s e H a v e P a t h =t r u e ;//生成所有着法的集合MM=C r e a t e P o s s i b l e M o v e (n P l y ,n S i d e );f o r (e a c h m ∈M ){M a k e M o v e (m );//生成着法的出点局面i f (G a m e O v e r ){i f (n S i d e i s R E D ){//生成一深度为n P l y +1的着法路径A d d P a t h (m ,n P l y +1);H a v e P a t h =t r u e ;}e l s e H a v e P a t h =f a l s e ;}e l s e if (n P l y >=M a x D e p t h ){//已到达最大搜索深度i f (n S i d e i s B L A C K )H a v e P a t h =f a l s e ;}//递归搜索着法出点局面,且存在残局棋谱e l s e i f (C r e a t e C h e s s M a n u a l (n P l y +1,!n S i d e )){A d d M o v e T o P a t h (m );//将着法加到着法路径中i f (n S i d e i s R E D )H a v e P a t h =t r u e ;}e l s e {//着法出点局面不存在残局棋谱if (n S i d e i s B L A C K )H a v e P a t h =f a l s e ;}U n M a k e M o v e (m );}//红方选择深度最浅的,黑方选择最深的着法路径S e l e c t P a t h (n S i d e ,H a v e P a t h );R e t u r n H a v e P a t h ;}由于棋谱的着法一般只记录到红方将死黑方,所以极深极浅算法的最大搜索深度应至少比棋谱的着数多2层.选择具有代表性的着数为1、3和5的残局盘面各10局,用本方法搜索棋谱,实验结果如表1所示.表1 不同着数残局需搜索的平均节点数和时间着数最大搜索深度深度平均搜索节点数平均搜索时间/m s 135063715358495072027296576047391023017819520 表1显示随着最大搜索深度的增加,所需搜索的节点数和时间急剧增加,着数为5的残局棋谱所需搜索的时间往往就需要数百分钟.实际上若设每一局面平均有35种着法计,搜索着数为7的残局,436云南民族大学学报(自然科学版) 第19卷所需搜索的节点将达到359个,即使搜索1个节点仅需10-8s ,生成棋谱的时间也需要数百小时,已完全不能接受.2 搜索算法的改进实用残局棋谱的着数往往达到数十着,若用上面的搜索算法生成棋谱,所需搜索的节点和时间将十分惊人.所以关键的问题是在搜索过程中避免冗余,尽量减少搜索的节点.针对残局的特点,在本文提出的残局棋谱搜索算法中应用了剪枝[4-5]、着法排序和置换表等几种方法来提高搜索的效率.2.1 剪枝搜索算法在上面的极深和极浅搜索过程中,存在着大量的冗余现象.图2给出了在搜索残局棋谱的过程中几种可以发生剪枝的情况,框边的数字代表该节点残局棋谱的深度.在图2(a )中,节点A 的残局棋谱应是它所有子节点中深度最浅的残局棋谱再加上从A 节点到该子节点的着法,若在节点B 处红方已将死黑方,则结点B 处的残局棋谱深度必定小于等于其它兄弟节点的残局棋深度,这样继续搜索节点B 的其它兄弟节点已没有意义.在图2(b )中,若节点D 的残局棋谱深度大于节点B 的残局棋谱深度,由于节点C 的残局棋谱深度是它的所有子节点残局棋谱深度的极大值,该极大值一定大于等于节点D 的的残局棋谱深度,因此也必然大于节点B 的残局棋谱深度,这样继续搜索节点C 的其它子节点已没有意义,可以将节点C 为根的子树全部剪去.在图2(c )中,若在节点B 处黑方获胜、不存在残局棋谱或已到达设定的最大搜索深度,则节点A 必定不存在残局棋谱,则无需再搜索节点B 剩下的其它兄弟节点.在图2(d )中,节点A 的残局棋谱应是它所有子节点中深度最深的残局棋谱再加上从A 节点到该子节点的着法,若节点D 的残局棋谱深度小于节点B 的残局棋谱深度,由于节点C 的残局棋谱深度是它的所有子节点残局棋谱深度的极小值,该极小值一定小于等于节点D 的的残局棋谱深度,因此也必然小于节点B 的残局棋谱深度,这样继续搜索节点C 的其它子节点已没有意义,可以将节点C 为根的子树全部剪去.将上面的剪枝方法应用到极深极浅算法中,就形成了剪枝搜索算法.剪枝搜索算法能够避免许多不必要的搜索,这将使需要搜索的节点数和花费的时间远远少于极深极浅算法.2.2 着法排序若搜索树的平均分枝因子为B ,搜索深度为d ,1975年K n u t h 和M o o r e 证明剪枝算法的效率与子节点搜索的先后顺序相关[6],最理想情况需搜索的节点约为2B d /2,最坏的情况与不使用剪枝时需搜索的节点数相同,为B d.由于剪枝与节点的搜索顺序密切相关,所以将节点排列调整为剪枝效率更高的顺序能有效避免许多不必要的搜索.着法排序是将某一局面的所有着法按照其发生剪枝的可能性高低进行排序,可能发生剪枝的着法优先进行搜索.历史启发是一种有效的着法排序手段[7],当一个着法发生剪枝时,就给其历史得分作一个增量,着法排序会根据每个着法的历史得分进行排序,这样容易发生剪枝的着法就可得到优先搜索.搜索过的局面,如有着法引起剪枝,则可将其保存在置换表中,当碰到相同局面时,则将置换表的着法优先搜索[8].另外从上面的分析不难看出,在残局棋谱搜索过程中,胜着、将着较容易发生剪枝.文献[9]提出不同的着法生成顺序对搜索效率有明显的影响,通过测试和比较,发现对于残局棋谱的搜索,先按胜着、置换表着法和将着顺序搜索,剩下的着法再按历史得分降序搜索效果较好.2.3 置换表在搜索残局棋谱的过程中,会通过不同的路径遇到相同的局面,若将已搜索局面是否存在残局棋谱,局面的残局棋谱和剪枝着法等相关信息保存在置换表中,可以避免重复搜索同一局面,或者能加快对该局面的搜索[5,10].在搜索某一局面时,先查询置换表中是否有该局面的记录,若置换表中保存有该局面的残局棋谱,则直接利用即可,若置换表中记录该局面没有残局棋谱,且置换表中记录的层次深度小于等于当前深度,表明该局面先前已进行过充分搜索,不需要再进行搜索.2.4 连照胜杀局棋谱的搜索例胜残局可进一步分为宽紧胜杀局和连照胜杀局437第6期 吴丽贤,和 力:一种中国象棋残局棋谱自动生成算法2类,其中通过连续照将取胜的残局,称为连照胜杀局[1].搜索该类残局时,红方只需搜索将着,而黑方只需解着,直到将死为止.由于这2类着法只占所有合法着法中的一小部分,所以可以大大减少需搜索的节点.3 测试与验证为了验证各种增强手段的有效性,对前述的棋局样本用不同的方法进行搜索.本文测试是在运行W i n d o w s X P专业版的D e l l笔记本(P e n t i u m M1.73 G H z,512M R A M)上完成的,实验结果如表2所示.表2 不同方法的搜索性能比较着数方法1(深度3)3(深度5)5(深度7)节点降为%节点降为%节点降为%剪枝16683.29401604030.1888300067350.0496剪枝+着法排序10492.071675690.008913988940.0023置换表506371003122641136.758338590665256.3814连照胜杀9221.820832800.00385345320.0009剪+着+置9811.937366460.007814211760.0024剪+着+置+连2530.49964460.0005953080.0002 从表2可以看出,不同的增强手段和它们的组合对提高搜索效率都有较好的帮助,且效率随最大搜索深度的增加而增强.当最大搜索深度达到7层时,剪枝+着法排序+置换表+连照胜杀所需搜索的节点数仅为基本极深极浅算法的百万分之二.用文献[1]中着数为21、25、29和33的棋局作为样本,用剪枝+着法排序+置换表+连照胜杀搜索算法进行测试和验证,结果如表3所示.表3 搜索效能验证着数最大搜索深度局数错误局数最短搜索时间/m s最长搜索时间/m s平均搜索时间/m s21232666275311493 2527121618806310076 2931405628382821683 3335421437153758406 从表3的结果看,搜索残局棋谱的最长时间不超过90s,且所需时间随最大搜索深度变化趋缓,表明本文提出的算法已完全能应用于实用残局棋谱的搜索.同时在验证过程中,发现了文献[1]中很多棋局的棋谱存在错误,如第337局,书中给出的棋谱需25着,而经本文算法的搜索仅需11着,又例如第308局,书中给出的棋谱需21着,而经本文算法的搜索实际仅需11着.4 结语本文提出了一种极深极浅搜索算法,用于生成中国象棋残局的棋谱,并用剪枝、着法排序、置换表和连照胜杀等手段对其搜索效率进行了改善.通过实例测试,证明该算法对于连照胜杀残局具有较好的效果.另外该算法还可用于验证现有残局棋谱的正确性,纠正存在的错误.残局的棋谱可能有多个,但本文提出的算法出于效率和存储上的考虑,目前只能找出其中的一个,另外提高算法搜索宽紧胜杀残局棋谱的效率和如何生成例和残局的棋谱也将是下一步研究的重点.参考文献:[1]苏德龙.象棋残局杀局宝典[M].北京:北京体育大学出版社,2006.[2]徐心和,王骄.中国象棋计算机博弈关键技术分析[J].小型微型计算机系统,2006,27(6):961-968.[3]S H A N O NCE.P r o g r a m m i n g a c o m p u t e r f o r p l a y i n g c h e s s[J].P h i l o s o p h i c a l M a g a z i n e,1950,41:256-275.[4]N E WE L LA,S H A W J,S I M O N H.C h e s sp l a y i n gp r o-g r a m s a n dt h ep r u n i n g[J].I B M J o u r n a l o f R e s e r a c ha n dD e v e l o p m e n t,1958,2:320-335.[5]王小春.P C游戏编程[M].重庆:重庆大学出版社,2002.[6]K N U T HD.E,M O O R ER.N.A n a n a l y z e o f a l p h a-b e t ap r u n i n g[J].A r t i f i c i a l I n t e l l i g e n c e,1975,6:293-326.[7]S C H A E F F E R J.T h eh i s t o r yh e u r i s t i ca n da l p h a-b e t as e a r c he n h a n c e m e n t si np r a c t i c e[J].I E E E T r a n s a c t i o n s o nP a t t e r nA n a l y s i sa n dM a c h i n eI n t e l l i g e n c e,1989,11(11):1203-1212.[8]B R E U K E RDM,U I T E R W I J KJ,V A ND E NH E R I KHJ.R e p l a c e m e n t s c h e m e sf o rt r a n s p o s i t i o nt a b l e s[J].I C C A J o u r n a,1994,17(4):183-193.[9]岳金朋,冯速.中国象棋A l p h a-B e t a搜索算法的研究与改进[J].北京师范大学学报:自然科学版,2009,45(2):156-160.[10]Z O B R I S TA.A n e wh a s h i n g m e t h o dw i t ha p p l i c a t i o nf o rg a m e p l a y i n g[J].I C C AJ o u r n a l,1990,13(2):69-73[11]王能发,赵薇.多目标博弈的弱ε-P a r e t o-N a s h平衡点的存在性[J].云南民族大学学报:自然科学版,2009,18(2):109-111.(责任编辑 庄红林)438云南民族大学学报(自然科学版) 第19卷。
“理治棋壮”中国象棋计算机博弈引擎关键算法分析与设计
“理治棋壮”中国象棋计算机博弈引擎关键算法分析与设计“理治棋壮”中国象棋计算机博弈引擎开发小组在《程序架构设计与主要算法概述》一文中,我们阐述了中国象棋计算机博弈涉及的主要算法。
下面就其中的关键算法进行深入分析,并说明其设计实现方法。
一、核心搜索算法1、Principal Variable Search搜索算法是计算机博弈程序的核心算法。
如何选择适合的搜索算法,配以合理的剪枝条件,是决定搜索效率的关键所在。
博弈树不同于一般的搜索树,它是由对弈双方共同产生的一种“变性”搜索树。
应对这类问题,香农(Claude Shannon)教授早在1950年提出了极大-极小算法(Minimax Algorithm)。
这种算法常以一种形式上的改进——负极大值算法出现:记我方节点值为正,对方节点值为负,双方在每一节点分别选择其子节点中绝对值最大的一个。
递归深度优先遍历有限层次的树,找到使起始节点绝对值最大的一个叶子节点,然后回溯找到形成这一叶子节点的第一层子节点,作为最优解。
可以在博弈树深度优先搜索过程中记录2个附加值,α:我方搜索到的最好值,任何比它更小的值就没用了;β:对于对手来说最坏的值。
在搜索算法中,如果某个节点的结果小于或等于α,那么它就可以抛弃;如果某个着法的结果大于或等于β,那么整个结点就作废了,因为对手不希望走到这个局面。
如果某个节点值大于α但小于β,那么这个节点就是可以考虑走。
这便是所谓的α-β剪枝搜索。
由α和β可以形成一个节点预选窗口。
如何能够快速得到一个尽可能小而又尽可能准确的窗口?有不少窗口搜索算法被设计出来解决这个问题,如:Aspiration Search、Principal Variable Search、Tolerance Search等。
目前大多数国际象棋与中国象棋的算法核心青睐速度快而不会出现错误剪枝的Principal Variable Search,它的原理是第一个分枝以完整窗口搜索,产生一个解v,后继分枝则以一个极小窗口(v,v+1)搜索之,旨在建立高效的、极小的搜索树。
人工智能-博弈树的搜索
2.Grundy 博弈
下棋的双方是对立的,命名博弈的双方,一方为
“正方”,这类节点称为“MAX”节点;另一方为
“反方”,这类节点称为“MIN”节点。正方和反
方是交替走步的,因此MAX节点和MIN节点会交替
出
现
。
2.Grundy 博弈
Grundy博弈是一个分钱币的游戏。有 一堆数目为N的钱币,由两位选手轮流 进行分堆,要求每个选手每次只把其中 某一堆分成数目不等的两小堆。例如, 选手甲把N分成两堆后,轮到选手乙就 可以挑其中一堆来分,如此进行下去, 直到有一位选手先无法把钱币再分成不 相等的两堆时就得认输。
╳╳ 〇 〇╳ 〇
0
3.极小极大搜索过程
对于棋盘残局中的╳来说,最好的选择,是将╳放 在C的位置上,这时可以导致平局局面。
4. -搜索过程
-剪支法的引入 在极小极大法中,必须求出所有终端节点
的评估值,当预先考虑的棋步比较多时,计 算量会大大增加。为了提高搜索的效率,引 入了通过对评估值的上下限进行估计,从而 减少需进行评估的节点范围的-剪支法。
3.极小极大搜索过程
在九宫格棋盘上,两位选手轮流在棋盘上摆各自的 棋子(每次一枚),谁先取得三线的结果就取胜。 设程序方MAX的棋子用(×)表示, MAX先走。
对手MIN的棋子用(o)表示。
例如:
MIN取胜
3.极小极大搜索过程
估计函数 f(p)=(所有空格都放上MAX的 棋子之后,MAX的三子成线数)-(所有空 格都放上MIN的棋子之后,MIN的三子成 线的总数)
3.极小极大搜索过程
由于正方和反方是交替走步的,因此 MAX节点和MIN节点会交替出现。
3.极小极大搜索过程
中国象棋计算机博弈中搜索算法的研究与改进
与国际象棋(64 个落子点)相比,中国象棋(90 个落子点)的空间复杂度更高, 规则也更为复杂,下表列出了几种常见棋类的空间复杂度对比。
表 1-1 棋类空间复杂度对比
显然,中国象棋较高的空间复杂度,也给国内学者们提出了严峻的挑战。
3
河北大学理学硕士学位论文
1.3 中国象棋机器博弈简介
中国象棋的计算机程序与国际象棋类似,包含界面部分和引擎部分。界面部分就是 一个可视化的游戏界面,具有显示局面和控制落子的基本功能,有的界面还提供诸如记 录棋谱、悔棋等附加功能。引擎部分必须包括数据结构定义、着法生成、局面评估和搜 索机制,有些引擎还提供了开局库和残局库,供整个引擎参考走棋。引擎部分和界面部 分是相互独立的,通过UCCI通用引擎标准协议连接。这给不同的程序之间进行比赛交流 提供了方便,使研究者们可以专注于程序棋力的提高,而不用花时间编写接口程序来适 应不同的界面。值得一提的是《象棋百科全书》网站对制定中国象棋引擎协议做了大量 的工作。
1956 年,Las Alamos 实验室设计出了一个真正能在 MANIAC-1 的计算机上运行的程 序,成为第一个真正的计算机博弈程序。但是它并不是一个完整的国际象棋博弈系统, 只是一个缩减了棋盘大小,省去了部分棋子和一些特殊走法的缩略版程序。
经典中国象棋博弈原理(徐心和)
东北大学人工智能与机器人研究所
着法生成的棋盘扫描规则
区域定义:定义棋盘有效区域定义红方半区 定义黑方半区 定义红方九宫 定义黑方九宫
字符说明:A-area, R-red, B-black, P-palace
东北大学人工智能与机器人研究所
提址(from)为(i,j)的动子着法生成规则
东北大学人工智能与机器人研究所
(Game search engine)
东北大学人工智能与机器人研究所
博弈搜索引擎
搜索策略—广度优先(Breadth-first search) 深度优先(Depth-first search) 迭代深化(Iterative search) 搜索技巧— 截断/剪枝(cut-off) 剪枝(pruning) 扩展/延伸(extended) 搜索结果—返回值/倒推值/局面评估值 最佳路径/当前着法(The best move)
着法生成是博弈树展开的关键环节
东北大学人工智能与机器人研究所
着法的表示
相对着法:马八进七,炮5平2——非完整信息,需要与当前局面结合着法算子的运算功能:提-动-落-吃提址——from 即此着的出发位置;动子——moved(chessman moved)即走动的棋子;落址——to 即着法的到达位置;吃子——killed(chessman Captured)即吃掉的棋子。对着法的要求:合法性、完整性、有序性
提址(from)为(i,j)的动子着法生成规则
东北大学人工智能与机器人研究所
提址(from)为(i,j)的动子着法生成规则
东北大学人工智能与机器人研究所
棋盘扫描法遇到的问题
虽然在着法的表达上,棋盘扫描法最为直观、简洁,但实战意义不强。因为扫描过程大量耗时:扫描动子、提址、制约条件、合理区域、双方占位、吃子等都是动态生成的,尤其区域判断和棋子种类检测等,时间开销巨大。对于吃子着法和非吃子着法无法分别生成,只能全部生成,再做筛选。
博弈树搜索算法概述
博弈树搜索算法概述
岳金朋;冯速
【期刊名称】《计算机系统应用》
【年(卷),期】2009(018)009
【摘要】机器博弈作为人工智能研究的重要分支,可研究的内容极为广泛.介绍现在计算机博弈中主流的搜索算法,并将它们有机的结合起来,给出一个搜索的主体框架,为博弈树研究者提供启发和参考.
【总页数】5页(P203-207)
【作者】岳金朋;冯速
【作者单位】北京师范大学,信息科学与技术学院,北京,100875;北京师范大学,信息科学与技术学院,北京,100875
【正文语种】中文
【中图分类】TP3
【相关文献】
1.博弈树启发搜索算法在五子棋游戏中的应用研究 [J], 王建雄
2.博弈树搜索算法的分析与实现 [J], 危春波;王海瑞;文乔农
3.博弈树搜索算法研究 [J], 李红;吴粉侠;刘小豫
4.博弈树搜索算法在中国象棋中的应用 [J], 岳金朋;冯速
5.使用不同的博弈树搜索算法解决计算机围棋的吃子问题 [J], 张培刚;陈克训
因版权原因,仅展示原文概要,查看原文内容请购买。