棋类对弈人工智能算法研究与国际象棋软件设计
上海理工大学计算机工程学院
本科优秀毕业论文(设计)
棋类对弈人工智能算法研究与国际象棋软件设计
信息与计算科学02级陈人杰
指导教师:陈家琪教授
(一) 内容简介
工程款
这个研究的目的是编写一个棋类对弈程序,例如国际象棋。棋类对弈程序的设计需要运用到人工智能这方面的算法,其中最核心的就是Alpha-Beta算法。棋类人工智能算法研究已对游戏以及军事方面带来了巨大的作用。
关键词:棋类对弈程序;人工智能;Alpha-Beta算法。
(二) 设计思想
采用的数据结构有两种——数组棋盘和位棋盘,其中数组棋盘还可分成三个方案,加上位棋盘一共四个2023年躲春生肖和时间
方案。
方案一:表示棋盘的方案。
肖战最新消息用一维数组或二维数组表示棋盘的结构,非常适合用于五子棋、围棋、黑白棋这类不区分棋子种类的棋类游戏。其特点是局面表现能力强,便于评价局面的好坏。但是对于象棋等有兵种区分的游戏而言,每次都要扫描整个棋盘,不便于了解某些特定棋子的位置。
方案二:表示棋子的方案。
用数组表示棋子的信息,只适用于棋子有不同种类的棋类游戏,如象棋和斗兽棋。这类棋用这种方案可以节省空间,但是靠这样的结构局面的具体情况很难了解,不利用于评价局面。优点也十分明显,可以十分简单地出某些特定棋子的位置,而不需要像棋盘方案那样搜索整个数组。
方案三:棋盘棋子相联系的方案。
既然上述两种方案对于象棋类游戏各有缺陷,那么将二者一起使用在一定程度上可以达到最优,但必须花费更大的空间。棋盘数组与棋子数组共同使用的方案具有上述两者的优点。
方案四:位棋盘。
上述三个方案虽然不同,但是用的都是数组,可以算作一个分类。而位棋盘不同,位棋盘不采用数组来表示棋盘或棋子,而是用一个64位整型数来表示棋盘,适用于8×8的棋类游戏,如国际象棋和黑白棋。一个使用位棋盘的程序中通常有一组位棋盘,这些位棋盘记录棋盘的不同信息。位棋盘的变化由位运算获得。因此位棋盘可能是运算速度最快的方案。但目前32位机占主流,以64位整型数表示的位棋盘的发挥受到限制。
(三) 计算方式
无论棋盘局面的数据结构采用哪种方案,棋类程序人工智能的算法是基本类似的。棋类游戏的进行过程可以看成一棵树,而计算机下棋是通过搜索这棵树的子树,在子树的叶子结点通过调用评价函数来到最好着法。(仅仅是评价函数认为最好。)即使是搜索子树,所花费的时间也相当多,因此采用了一些算法使搜索速度大幅提高。
一、Alpha-Beta算法
树的某一结点的评价值足够好,当余下的兄弟结点对上一层的局面评价值没有影响的情况下,直接返回该结点当前得评价值,将余下的兄弟结点裁剪。该算法是无害的,对整个树的搜索结构毫无改变,并加快了速度。但是该算法对着法的次序十分敏感。
二、着法排序
既然Alpha-Beta算法对着法敏感,那么就应该进行着法排序将好的着法放在前面从而提高剪枝的效率。主要采用的是历史启发、杀手启发以及吃子启发等算法。另外,排序的方法对速度也有很大的影响。
三、空着裁剪
如果一方让对方连下两步(自己不走,即空着),对方都不能挽回局面的话,显然之后就没有必要再搜索了。此时就应该裁剪。该算法大幅增强了Alpha-Beta 的剪枝效率,但也使搜索的错误率有所提高,是有害裁剪。
四、哈希置换表
棋类对局中有许多殊途同归的局面,这些局面没有必要重复搜索,只要记录之前搜索过的评价值,下次遇到有时可以直接使用该值进行置换。记录这些局面的评价值用的数据结构是哈希表,由于局面的数量大,所以必须出一个高效的搜索记录的方法,而哈希表由于索引与内容相联系,成为首选。母情节祝福语
五、其他算法
除此上述叙述的几个主要算法之外,还有静态搜索这一辅助算法,主要解决象棋类程序中出现的问题。另外着法预处理与着法生成也是棋类对弈程序中要解决的问题。
(四) 结论与小结
我采用了国际象棋作为实践,使用的是棋盘与棋子相联系的方案。使用的编程工具是VC++6.0。
劳动节祝福语大全简短在实践过程中,我发现对模块的功能进行细分对于编程有很好的效果。其中最复杂的就属程序底层的编写,如着法预处理。该过程出错率高,调试需要仔细。国际象棋由于有三种特殊着法,因此保存着法信息的结构十分难写,可属编程中最困难的地方。
(五) 主要参考资料
[1]王小春.PC游戏编程(人机博弈)[M].重庆:重庆大学出版社,2002.[2]Marek Strejczek. Thesis of Some aspects of chess programming[D].Faculty of Electrical and Electronic Engineering Department of Computer Science, Technical University of Lodz,2004.
路由器桥接
[3]谭浩强.C程序设计[M].北京:清华大学出版社,1999.
[4]严蔚敏,陈文博.数据结构及应用算法教程[M].北京:清华大学出版社,2000.
[5]高强,朱安国.Visual C++高级编程技巧[M].北京:人民邮电出版社,2000.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。