开局库可以查询到,则提取开局库的对应走法而

不必展开树·可以避免在开局时由于搜索深度的

不足而带来战略上的失误·

评估函数是模式识别和智能算法应用最为广

泛的领域·不管多么复杂的评估函数,都可以表示

为一个多项式·评估函数一般来说必须包括5 个

方面的要素[1 ] ,分别是固定子力值、棋子位置值、

棋子灵活度值、威胁与保护值、动态调整值·每一

方面的值又是由许多参数值构成的,例如固定子

力值就包括7 类棋子的值·即使最简单的评估函

数也有20 多个参数,将这些值线性地组合在一起

得到最终的评估值,通常依赖于编程者的棋类知

识,这就带来很大的局限性,通过手动调整很难达

到全局最优·

为了解决这个参数优化的问题,本文在中国

象棋计算机博弈领域引入了遗传算法·通过离线

自学习训练得到最佳参数组合·

2  基于自适应遗传算法的象棋评估

函数

有学者已经把遗传算法引入了评估函数[5 ] ,

试图学习棋子之间内部的动态联系,但效果不是

很理想·本文仅仅用遗传算法做参数优化,并且为

了加强遗传算法的局部搜索能力,在进化过程中

采用了自适应遗传算法·

2. 1  遗传算法

遗传算法( Genetic Algorithm , GA) 是近些年

发展起来的一种崭新的全局优化算法,由Holland

教授首次提出[6 ]

·它借用了生物遗传学的观点,

通过选择、遗传、变异等作用机制,实现个体适应

性的提高,体现了自然界中“物竞天择、适者生存”

的进化过程·遗传算法吸引了大批的研究者,迅速

推广到优化、搜索、机器学习等方面·

传统的爬山法[7 ] 是通过对参数小范围的试

探来寻求最优解,并且受初始采样值取值范围和

单方向搜索的限制,很容易陷入局部最优·

模拟退火是一种基于蒙特卡罗迭代求解的启

发式随机搜索算法,它试图通过模拟高温物体退

火过程的方法,寻找优化问题的全局最优解或近

似全局最优解·它可以避开局部最优点,但是致命

的缺点是速度太慢,运行时间太长·

遗传算法同时使用多组搜索信息, 具有很好

的全局搜索能力, 将重点集中在性能较高的地

方, 具有很快的搜索速度; 而且遗传算法的鲁棒

性也明显优于前两种算法, 最有可能在象棋中取

得成功·

2. 2  适应度函数的计算锦标赛算法

众所周知,遗传算法在进化搜索中基本不需

要外部信息,仅以适应度函数(fitness function) 为

依据,利用种群中每个个体的适应度函数来进行

搜索·一般而言,适应度函数是由目标函数变换而

成的·但是象棋的评估比较复杂,很难像一般优化

问题那样找到真实准确的目标函数,因此本文设

计了一个专门用于棋类优化问题的适应度函数计

算方法锦标赛算法·

首先,要对自己开发的计算机博弈软件进行

拓展,拓展后的程序包含了两个评估函数,但是搜

索引擎、走法生成都是共用的·两个评估函数通过

读取不同的参数组进行比赛,决出胜负·这样,就

可以通过竞赛来确定下棋双方的适应度:在相同

适应度的初始状态下,赢了对适应度进行加运算

(奖赏) ,输了对适应度进行减运算(惩罚) ,和了则

不操作·这样就解决了适应度函数不好确定的问

题,实现了通过适应度函数来决定个体的优劣程

度,体现了自然进化中的优胜劣汰原则·

遗传算法处理的对象主要是个体[8 ] ,个体包

括一组染色体串,每一个染色体对应于评估函数

中的一个参数值·将染色体串解码到评估函数中

即可求得评估值·染色体则是一个基因数组,基因

的长短决定编码的精度·

至于染色体串的编码方式,本文选用的是通

用的二进制编码方式,由于对解的精度要求不高,

其编码和解码都可以快速简单地实现,而且二进

制编码进行交叉变异操作时也比其他编码更加简

捷方便·

2. 3  加快优化进程的相关举措

(1) 由于加入开局库,会使比赛时间变得很

长;但如果没有开局库,对下棋过程的质量又会有

很大影响,不能真正反映个体的好坏·所以本文对

初始的比赛环境做了改动,初始状态是由包括许

多红黑局面相当的中局数组构成,在进化了规定

数量的代数以后,会自动修改比赛环境·

(2) 由于计算机之间的比赛中经常遇到死循

环,所以本文也对循环加入了一些规则进行判断,

避免了这种情况的出现·

(3) 由于象棋中的胜负是依据将或帅的存在

与否进行判断,所以将和帅的值默认为无穷大,并

不参与进化·

以上这些做法都有利于提高比赛的精彩程度,

更快地选出真正优秀的个体,加快进化的速度·

2. 4  遗传操作过程

(1) 锦标赛选择

遗传算法可采用的选择方法很多,有轮盘赌选

择法、局部选择法、截断选择法和锦标赛选择法,本

文采用了锦标赛选择法和精英选择策略[9 ]

·每两个

个体之间进行先后手互换的两场比赛,取出适应度

最高的一些精英作为下一代的父个体·锦标赛模式

的缺点在于速度过慢·为了加快速度,本文对于标

准锦标赛做了改进·将包含m 个个体的种群随机

分成n 组,在组内进行锦标赛训练,每个组的冠军

为筛选出的最佳,对n 个冠军做交叉和变异操作

产生m - n 个新个体,填满并形成一个新种群·做

了这样的优化后,以包含60 个个体的种群为例,在

保证优胜劣汰原则的基础上,可以节省约75 %的

时间·

(2) 均匀交叉

交叉方法很多, 有单点交叉、多点交叉、顺序

交叉、循环交叉等等,为了使交叉在便于操作的同

时更加广义化,本文选用了均匀交叉,参数之间的

间隔点作为潜在的交叉点·均匀交叉根据交叉率

pc 随机地产生与参数个数等长的0 - 1 掩码, 掩

码中的片断表明了哪个父个体向子个体提供变量

值·通过这个掩码和选择的父个体一起确定了子

个体·

(3) 变异

变异是指以等于变异率pm 的概率改变一个

或几个基因,对于二进制串来说,就是根据变异率

实现基因的0 - 1 翻转·变异是一种局部随机搜

索,与选择/ 交叉算子结合在一起,保证了遗传算

法的有效性,使遗传算法具有局部的随机搜索能

力·同时使得遗传算法保持种群的多样性,以防止

出现非成熟收敛·

2. 5  自适应遗传算法

在整个遗传算法实现的过程中,交叉率pc 和

变异率pm 的选择是影响遗传算法行为和性能的

关键所在,直接影响算法的收敛性·pc 越大,新个

体产生的速度就越快,然而pc 过大时遗传模式被

破坏的可能性也越大, 使得具有高适应度的个体

结构很快就会被破坏;但是如果pc 过小, 会使搜

索过程缓慢,以至停滞不前·对于变异率pm ,如果

pm 过小,就不易产生新的个体结构; 如果pm 取

值过大,那么遗传算法就变成了纯粹的随机搜索

算法·但是, 目前还没有通用的能够一次性确定

pc 和pm 的方法·针对不同的优化问题,需要反复

通过实验来确定pc 和pm , 这是一件非常繁琐的

工作·为此, 本文引进了自适应遗传算法[10 ]

(AdaptiveGA ,AGA) , pc 和pm 能够随着适应度

自动改变·

pc 和pm 的计算公式如下:

式中, pc1 = 019 , pc2 = 016 , pm1 = 011 , pm2 =

01001·f max为群体中最大的适应度值; f avg为每

代群体的平均适应度值; f′为要交叉的两个个体

中较大的适应度值; f 为要变异个体的适应度值·

这种自适应的pc 和pm 能够提供相对某个

解的最佳pc 和pm ,在保持群体多样性的同时,保

证了遗传算法的收敛性·

3  实验结果

为了测试进化的效果,设计了一个测试实验,

实验是由100 代、200 代、300 代、400 代、500 代、

600 代的冠军和两个随机选手组成一个小组, 进

行循环赛,每两个对手之间都要进行互换先后手

的两场比赛·胜者积分加1 ,负者减1·最后的积分

如图1 所示·

如图1 所示,得分随着代数的增加单调增加,

而参加比赛的随机选手基本没有取胜的机会·在

进化到600 代时,本文给出了一部分训练的结果,

此时的固定子力值如表1 所示·

可以看到,固定子力值的大小排列顺序符合

人的经验,车的值略大于马和炮的和,马和炮的值

都约等于象和士的和,这都是象棋高手默认的规

律·

用600 代的参数组和完全用经验设定的参数

组的程序进行了比赛,结果600 代的胜率明显占

优·

4  结  论

在中国象棋的评估函数中,引入了自适应遗

传算法优化参数组合,它加强了传统遗传算法的

局部搜索能力,避免了传统的爬山法容易陷入局

部最优的缺点,而且不像模拟退火那样收敛过慢·

它同时维护一组参数,既可以继承已有参数中的

优良内容,又可以避免因局部振荡而失败,并且具

有很好的收敛速度·

当程序拥有进化参数的评估函数时棋力明显

提高,每当加入了一些新参数,丰富了棋子之间联

系的奖励和惩罚时,都可以用自适应遗传算法进

行优化,而不是传统上的手工调整,可以最大限度

发挥评估函数的作用·这也为开发出高水平的计

算机博弈程序打下了坚实的基础·

计算机系统遗传学,中国象棋计算机博弈系统评估函数自适应遗传算法[转]相关推荐

  1. java开发爱恩斯坦棋,爱恩斯坦棋计算机博弈系统的研究与实现

    爱恩斯坦棋计算机博弈系统的研究与实现 [摘要]:计算机博弈,也称机器博弈,是一个极具挑战与发展前景的计算机研究领域,其作为人工智能领域一个极其重要的课题,素有人工智能领域"果蝇"之 ...

  2. 计算机爱恩斯坦棋游戏,爱恩斯坦棋计算机博弈系统的研究与实现

    爱恩斯坦棋计算机博弈系统的研究与实现 [摘要]:计算机博弈,也称机器博弈,是一个极具挑战与发展前景的计算机研究领域,其作为人工智能领域一个极其重要的课题,素有人工智能领域"果蝇"之 ...

  3. 计算机五子棋博弈发展历史,五子棋计算机博弈系统的研究与设计

    五子棋计算机博弈系统的研究与设计 [摘要]:计算机博弈是人工智能领域最具挑战的研究分支之一.它是研究人脑思维的载体,是计算机技术与博弈论相结合的产物,是人工智能领域的"试验田",被 ...

  4. 中国大学生计算机博弈大赛竞赛经验

    大家好,我是来自东南大学的小轩,目前是一名研二学生,专业是复杂系统与复杂网络.在全国大学生计算机博弈大赛中获得一次全国一等奖,一次全国三等奖,在全国计算机博弈锦标赛中获得季军一次. 我自2016年Al ...

  5. linux终端 中国象棋,在Deepin系统下安装Xboard并使用它玩中国象棋

    本文介绍在Deepin系统下安装Xboard的命令,并通过xboard @xq命令进入到中国象棋模式,有喜爱中国象棋的网友又可以多一种途径了,当然,也可以玩国际象棋. 前言 Xboard/WinBoa ...

  6. 微型计算机系统的发展历史,计算机的系统发展历史

    计算机的系统发展历史以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 计算机的系统发展历史: 1.第1代:电子管数字机(1 ...

  7. 课程设计两连发之中国象棋人机博弈

    我今年大四,明年就毕业了.料想为课程设计写的这两个程序以后也不会再拿出来看了,索性就开源了.希望可以帮助到大家,可以当课程设计交差,也可以优化一下发扬光大. 这个前后大概花了两个星期.写好到目前为止还 ...

  8. 中国象棋人机博弈程序(扁平化棋局) C语言实现

    为什么80%的码农都做不了架构师?>>>    平台是Visual studio 2013 windows8.1  64位 先来一个效果图吧,原先是挺清晰的,但是200K以上不能上传 ...

  9. 扁平化c语言教程,中国象棋人机博弈程序(扁平化棋局) C语言实现

    平台是Visual studio 2013 windows8.1  64位 先来一个效果图吧,原先是挺清晰的,但是200K以上不能上传,所以搞模糊了,这个界面是扁平风格的,个人感觉不错,很佩服作者,我 ...

  10. java开发爱恩斯坦棋,爱恩斯坦棋计算机博弈关键技术研究

    爱恩斯坦棋计算机博弈关键技术研究 [摘要]:计算机博弈是人工智能领域的重要研究方向之一,被誉为人工智能学科的"果蝇".爱恩斯坦棋属于完备信息博弈棋种,是一种棋局信息完全透明的博弈类 ...

最新文章

  1. Java调用C/C++编写的第三方dll动态链接库(zz)
  2. 腾讯 AI Lab 开源业内最大规模多标签图像数据集
  3. ubuntu下连接mysql出现Access denied for user ‘rose‘@‘localhost‘ (using password: NO)的解决方法
  4. js map、filter、forEach
  5. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
  6. 直播 | 达观数据高级技术专家杨慧宇:金融数据结构化实践
  7. 信息学奥赛一本通C++语言——1055:判断闰年
  8. bzoj2244 [SDOI2011]拦截导弹 cdq分治
  9. LeetCode(257)——二叉树的所有路径(JavaScript)
  10. 系统辨识的最小二乘法原理及其算法实现
  11. delphi 调试控件代码_机器人调试(六十七)
  12. 小米 samba linux,解决小米路由器升级固件后samba无法访问一例
  13. 【5G】NAS安全密钥衍生算法详解
  14. 【题解】284E. Coin Troubles(dp+图论建模)
  15. Google 谷歌网页搜索, 学术搜索
  16. 百度ai开放平台使用方法(附带例子详细步骤)
  17. 【科普】人眼到底等于多少像素
  18. 机房搬迁IBM磁盘阵列哪些信息需要抓取
  19. GridView数据替换,数字按要求替换文字
  20. 教你如何修改铁威马NAS的用户密码

热门文章

  1. jquery 校验中国身份证号码
  2. 三维GIS与游戏引擎的跨界融合,打造数字化孪生的平行世界
  3. linux系统文件颜色所代表的意思
  4. Photoshop技术学习有感
  5. linux下配置dnx地址,Linux上编译DNX失败
  6. 图像转换成lmdb格式
  7. Linux系统备份工具 REAR (RELAX-AND-RECOVER)
  8. Python生成requirement.txt文件
  9. ubuntu20.04 + kiosk + chrome打造一体机系统
  10. git index.lock