基于qt的中国象棋人机对弈的设计思路与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 147
•
本文通过构建QT人机交互界面,实现一个中国象棋人机对弈程序。
文中阐述系统的设计思路,以及Alpha-Beta剪枝算法的基本原理,实现走棋程序搜索深度达到5层,平均每次的搜索时间1——2秒左右,属于可以接收的时间限度。
中国象棋被称作中国文化的国粹,可以锻炼人的思维水平。
随着人工智能的发展,推进了博弈论在人工智能领域的研究。
最早研究棋类博弈的是美国科学家香农,他提出了以数的函数评价局面的优劣,还提出了两种对博弈树进行搜索的策略(陈钧,中国象棋人机博弈系统的设计与实现:厦门大学,2013)。
如今已经出现很多著名的象棋软件,水平都是非常高的。
1 数据结构
1.1 棋盘和棋子的编码
建立系统的第一步是建立棋盘和棋子的属性模型,象棋共有32个棋子,每一方有其中棋子,用一个数字表示一颗棋子,将棋盘上的32颗棋子表示成如下表:
表1 棋子的表示方法
红方帅仕相马车炮兵
表示数1617,1819,2021,2223,2425,2627~31黑方将士象馬車炮卒
表示数3233,3435,3637,3839,4041,4243~47 1.2 着法生成
着法生成就对某个局面下的走棋方的所有棋子生成所有合法的走法,并将其存入走法数组中。
每一种棋子有多种不同的走法,走法生成模块也是搜索模块将要频繁调用的模块,因此搜索模块要对博弈树进行展开的话,必然要模拟和撤销所有可能的走法。
采用以空间换时间的程序设计思路,把判断棋子是否在棋盘内、哪方的棋盘、是否在九宫格内都提前内置到几个一维数组中。
1.3 将军检测
当己方被对方将军时,必须应将,如果没能来应将,则判负。
另一种是将帅不能对面的问题,这一步被视为不合法的走棋。
思路是假设自己是对方的某个攻击棋子,然后将本方的将帅是否在攻击棋子的进攻路线上,一般存在某个攻击棋子,就返回一个bool值。
1.4 长捉和长将
长将指的是循环将军,是违反象棋规则的走法;而常将则是一种制敌策略。
在此设计中要加入判断是否存才长将的策略,否则很可能会无限制的循环。
思路是将每一步的将军走步保存到一个专门的将军走法数组中,然后判断是否构成循环将军。
当计算机会出现长捉行为时,认为去威胁对方的一颗棋子所获得的收益大于其他任何走步时,程序会无条件的执行这种策略(于超,博弈算法在中国象棋上的应用:中国海洋大学,2011)。
因此,针对搜索过程设计一种策略,即当程序检测到违规行为时,对于极大值节点,返回一个负值,表示不利于极大值放;同理,对于极小值节点,返回一个正数,表示不利于极小值的一方。
2 评价函数
象棋博弈系统的评价函数是一种经验评价函数,由人来定义含调整,且没有固定的模式,即使是完全形同的局面,不同的人的估值方法也不尽相同(杜向然,基于POS的中国象棋评估函数的研究:河北大学,2010)。
经过长期的积累经验,形成了一些公认的评价经验,分为以下几部分:
2.1 棋子力值
棋子力值即棋子本身的价值,在整个评价函数中占有很大的比例。
象棋的根本任务是保护己方的帅,同时吃掉对方的将,所以我们将帅的赋值必须远远大于其它棋子的价值即可。
公认的攻击力最强的棋子便是车了,所以要给车一个比较大的值。
而炮和马的价值基本相当,其价值等于车的一半,可以给炮和马赋相等的值,以避免程序出现拿炮换马或拿马换炮的行为。
兵的价值在一般意义上比较小,可以赋一个比较小的值;象不能过河,仕不能走出九宫格,它们的职责是保护本方将帅的安全,可以给它们的价值赋一个比兵稍微大的值。
表2 各种棋子的价值
棋子帅车炮马象仕兵价值1000080040040011012080
2.2 位置估值
相同棋子在不同位置时,作用是不同的,比如兵过河后更有价值,越靠近九宫格,对将帅的威胁越大,其位置估值也越大。
而炮在本方的价值一般大于对方区域,马在布局后期的价值大于前期的价值。
2.3 棋子的灵活性
每个棋子的灵活性是不同的,理论上车到达的位置多,但是如果车不从初始位置出来的话,他对棋局的贡献是很小的,需要给评价函数加入棋子灵活性,具体值由棋盘动态变化的过程决定。
2.4 威胁与保护
在象棋中,每个棋子之间都是牵一发动全身的,他们之间直接或间接存在某种威胁和保护关系。
需要明确的是,评价函数只是对某个静态的局面做出评价,而不是对动态的变化过程做出评价。
为了寻找某个棋子的保护关系,就要遍历己方所有存在的棋子;同样为了寻找某个棋子的威胁关系,就要遍历对方所有存在的棋子。
除了上述的评价关系之外,象棋中还存在特殊的形,例如连环马、马后炮等,也要在评价函数中增加额外的分值,另外还要考虑炮和对方的将的关系等。
如果能够考虑到象棋中存才的特殊的形,那对局面的把握更准确。
3 搜索剪枝算法——Alpha-Beta剪枝搜索
剪枝就是减去搜索过程中没必要的枝蔓,使程序更有效率,在指定时间内省下来的时间搜索更多的节点,从而提升搜索深度,使程序看的更远。
剪枝的原则要遵照正确性、准确性和高效性。
Alpha-Beta是对走棋方敏感的,即Alpha-Beta时一定是对某一方来讲的,当轮到另一方走棋时,这个身份就要发生变化。
Alpha-Beta 剪枝搜索算法通过指定下界Alpha和上界Beta来对博弈树的搜索范围进行了限定,任何其值落在这个窗口之外的节点都将被舍去。
理论上该剪枝算法可以把搜索时间降低到极大极小搜索时间的平方根的二倍,这就是剪枝所带来的的程序性能的空前提高(陈业鹏,基于Alpha-Beta搜索算法的中国象棋人机对战的设计与实现:西南石油大学计算机科学学院,2012)。
基于QT的中国象棋人机对弈的设计思路与实现 东北石油大学电子科学学院 李天昊
杭州有赞科技有限公司 何永悦
• 148
•
图1 程序运行图
图2 程序结果图
4 界面设计
本文的界面程序是基于QT 平台的,使用了QT 平台提供的许多窗口部件和类库。
程序以chineseChessGUI 做为主窗口,通过一个中间窗口来显示界面。
其中showWidget 包括左侧布局和右侧布局,右侧的布局添加了开局、读档、存档、悔棋、还原、支招按钮,通过QT 的信号与槽机制,实现了按钮的基本功能。
右侧布局还包括由用户设置搜索深度的窗口部件和提醒用户当前走棋方的文字提示。
程序的运行图和最终结局图如图1、图2所示。
5 结语
本文详细解读了设计一个博弈系统的思路和过程,以及Alpha-Beta 算法。
通过对中国象棋棋盘和棋子的编码,来表示现实中的实体以及它们之间可能存在的复杂关系。
然后通过构筑整个博弈系统的最重要的两个模块,即评价函数和搜索模块,来搭建程序的基本框架。
最后通过基于QT 平台图形化编程,来提供一个可操作的用户界面程序。
作者简介:
李天昊(1994—),东北石油大学研究生,研究方向:嵌入式系统;图像处理。
何永悦(1995—),现供职于杭州有赞科技有限公司,职位:商盟支持。
科技的发展与创新,促使电气自动化在经济高速发展的今天在各行各业得到广泛的运用,智能化技术在建筑消防电气工程中也有举足轻重的地位,当今建筑电气智能化的使用与传统的建筑生产模式有很大的不同,在现代科技已经融入在我们的生活中,更多的科技先进的电气自动化的器械与理论知识被广泛运用,电气自动化能够起到警示、联动等作用。
1.引言
在我国建筑行业不断繁荣,技术领域也有新的突破。
经济与科技双双发展的今天,带领建筑业也走向新的领域,将智能化的发展方向与建筑业的融合,让电气自动化的发展成为人们关注的重点,建筑业与科技相结合,就是将建筑中的一部分通过电气设备进行消防电气工程的控制,在电气自动化的安装过程中是一个非常复杂也非常重要的工程环节,同时通过电气设备进行建筑内部的统一控制,从而达到智能化的生活目标(黄保金,浅谈建筑电气设计中消防配电设计的重要性及常见问题的分析:江西建材,2016)。
2.智能建筑电气工程自动化技术概述
各行各业进入快速发展阶段,电气自动化项目得到广泛推广和应用,科技创新。
在这个阶段,中国的电力自动化技术日趋成熟,促进了现代建筑业的稳定发展,也是未来现代建筑业发展的主要趋势。
它是中国社会经济发展的主要方
智能化技术在建筑消防电气工程中的应用
漳州市消防支队 罗慧娟
向,也符合市场经济的发展和经济的可持续发展战略。
本文主要介绍了电气自动化工程控制系统在现代化建筑中的运用,通过对控制系统的开发和管理提供一些切实可行的建议,为电气自动化工程提供技术支持。
使中国的电气自动化项目的发展更加顺畅,为中国现代化建筑行业的发展做出一点贡献。
3.电气自动化技术的优势分析
现代建筑自动化包括的控制系统繁多,例如消防工程系统等。
运用电气自动化是为了提高使用效率,让建筑管理更加便捷。
现代建筑中电气自动化运用的非常多,在建筑中电气自动化是非常重要的一部分,同时对于建筑电气自动化的运用,有关部门也制定了相应的条例,帮助指导建筑电气自动化施工的顺利进行与快速发展,在电气自动化的运用中有非常大的优势所在,表现在一下几个方面:
3.1 实现了对建筑电气系统的高效监管
由于社会发展的需求,现代建筑应。