日升居士 发表于 2013-10-17 17:10:21

计算机软件与行棋思路的互补

探讨这一课题首先我们应对计算机有一个了解。衡量计算机性能的一个重要指标就是浮点运算,是指计算机每秒钟所完成的浮点运算最大次数,浮点运算理论峰值是指理论上计算机每秒钟所能达到的最大值。
    世界超级计算机TOP500组织于北京时间17日下午,在德国莱比锡举行的“2013国际超级计算大会”上,正式发布第41届世界超级计算机500强排名。
    由中国国防科技大学开发的超级计算机,以峰值计算速度每秒钟5.49亿亿次,持续计算速度每秒3.39亿亿次的优越性能位居榜首。相比此前排名世界第一的美国“泰坦”超级计算机,天河二号计算速度是“泰坦”的2倍,计算密度是“泰坦”的2.5倍。
    天河二号由312万个计算核心组成。相比个人电脑的16核,32核天壤之别。
    个人电脑的配置峰值计算速度大体为,6核心约500亿次/每秒的峰值计算能力,12核心约1500亿次/每秒的峰值计算能力;根据Intel公布的数据 Xeon E5 的单路峰值浮点性能可达每秒钟1720亿次浮点计算。16核心双路E5 2690约3500亿次/每秒的峰值浮点计算能力。
    是否峰值浮点计算能力越高,运行象棋软件的计算能力就越强呢?不是。
    浮点运算的能力是考核计算机多媒体,3D图形处理的一个重要指标。
    而《中国象棋计算机博弈原理》运用的是函数运算。
    下面我简单介绍一下《中国象棋计算机博弈原理》
    各子的运行计算为树状结构,专业术语称为博弈树。各分枝的演化为无穷大。
    评估函数
    1、在难以判断输赢的情况下识别棋局的好坏,可行的办法就是对局面进行量化;
    2、通过为棋局“打分”,评判棋局的好坏;
    3、由于评估需要大量的象棋知识。仁者见仁,智者见智;
    4、评估函数的设计便成为计算机博弈中最为人性化和模糊化的部分。
    5、对于评估函数取得共识的观点如下:
    固定子力评估值:
    车:600
    炮:285
    马:270
    相:120
    士:125
    兵、卒:20
    帅、将 :无穷大
    红方为正值+,黑方为负值-。
    棋子位置评估值
    各兵种在棋盘的不同位置上权值不同,可由三维数组给出,三维数组按兵种分解为若干个二维数组,而且要区分红方和黑方。
    各子力评估按照中国象棋横9竖10的棋盘格式

                     车位评估值
                         对方
          1   2   3   4   5   6   7   8   9

1   14   14   12   18   16   18   12   14   14    10
2   16   20   18   24   26   24   18   20   16      9
3   12   12   12   18   18   18   12   12   12      8
4   12   18   16   22   22   22   16   18   12      7
5   12   14   12   18   18   18   12   14   12      6
6   12   16   14   20   20   20   14   16   12      5
7      6    10    8    14   14   14    8    10    6       4
8      4   8   6    14   12   14    6   8   4       3
9      8   4   8    16    8    16    8   4   8       2
10   -2   10   6    14   12   14    6    10   -2       1

         9      8   7   6   5   4   3   2   1   
                         己方

    由车位评估值可知,车占中宫分值最高为26,车占四、六路对方2路线分值24,其次,分值由高到低为:车占对方兵、卒位,车占己方河沿,车占对方河沿,车占己方兵、卒位。

                      马位评估值
                         对方
          1    2   3    4   5   6   7    8    9

1      4    8   16   12    4   12   16    8    4    10
2      410   28   16    8   16   2810    4      9
3    1214   16   2018   20   1614   12   8
4      824   18   2420   24   1824    8      7
5      616   14   1816   18   1416    6      6
6      412   16   1412   14   1612    4      5
7      2    6   8    6   10   6    8    6   2      4
8      4    2   8    8    4      8    8    2   4      3
9      0    2   4    4   -2   4   4    2   0      2
10      0   -4   0    0    0   0   0   -4   0      1

         9   8   7    6    5   4   3    2   1   
                         己方
                  马卧槽分值最高

                      炮位评估值
                         对方
          1    2    3   4   5   6   7    8    9

1      6    4    0-10-12-10    0    4    6    10
2      2    2    0   -4   -14   -4   0    2    2      9
3      2    2    0-10   -8-10   0    2    2      8
4      0    0   -2    4   10    4   -2    0    0      7
5      0    0    0    2    8   2      0    0    0       6
6   -2    0    4    2    6   2      4    0   -2      5
7      0    0    0    2    4   2      0    0    0      4
8      4    0    8    6   10    6      8    0    4      3
9      0    2    4    6    6   6      4    2    0      2
10      0    0    2    6    6    6      2   0    0      1

         9   8    7    6    5    4      3   2    1   
                         己方
            炮占中路相位或对方中路兵位分值最高

                      兵位评估值
                         对方
          1   2   3   4   5      6   7   8   9

1      0   3   6   9    12   9   6   3   0    10
2   18   36   56   80120   80   56   36   18   9
3   14   26   42   60   80    60   42   26   14   8
4   10   20   30   34   40    34   30   20   10   7
5      6    12   18   18   20    18   18   12    6      6
6      2   0   8   0   8   0      8   0   2      5
7      0   0    -2   0   4   0    -2   0   0      4
8      0   0   0   0   0   0   0   0   0      3
9      0   0   0   0   0   0   0   0   0      2
10      0   0   0   0   0   0   0   0   0      1

          9   8   7   6   5   4   3   2   1   
                         己方
                  可见兵入九宫顶大车   

    棋子灵活度评估值
    对各兵种而言,每多一个可走位置就加上一定分值。
    兵(卒)15
    士         1
    相         1
    车         6
    马      12
    炮         6
    帅(将)   0
    棋子配合评估值
    重点是车马炮的配合与牵制。
    博弈搜索引擎
    1、引擎搜索策略--广度优先,深度优先,迭代深化。
    2、引擎搜索技巧--截断/剪枝,剪枝,扩展/延伸。
    3、引擎搜索结果--返回值/倒推值/局面评估值/最佳路径/当前着法。
    博弈树分析
    博弈树上的每一个节点都代表一个棋局,棋手就要在众多的枝杈节点上选一个最佳的路径与局面作为自己的选择,从而反推到当前的着法。
    中国象棋博弈树的庞大是难以想象的。如果按照每一步平均有45种可行着法,每局棋平均走100步,那从开始局面展开到分出胜负,则要考虑45的100次方,种局面。这一天文数字要比地球上的原子数目还要多,即使用世界上最快的计算机进行计算,直到地球毁灭也无法算出第一步的着法。
    由于完整的博弈树过于庞大,盲目搜索所能达到的深度(层数)十分有限,在象棋博弈中几乎没有实用价值。若想在指定时间内将搜索深度加以提高,一方面需要改进硬件与优化程序代码,提高单位时间内搜索的节点数;另一方面就需要向人类棋手一样有选择地进行搜索,即对博弈树进行必要的裁剪。即对无效着法进行剪枝。
    通过上述象棋软件的计算原理,博弈树的分枝裁剪,以及分值评估理论,各子力占位分值评估等,我们就会对子力的占位,局面的理解与把控有了更深的了解与认识。
参考文献《中国象棋计算机博弈原理》。

    下面我谈一下纯软与人机的区别
    所谓纯软是由象棋软件引擎输入计算机,加入开局库,由计算机按照开局库指定的路径有选择地进行搜索,自动剪枝完成返回值/倒推值/局面评估值/最佳路径/当前着法的计算,然后自动行棋落子。
    纯软的优点:
    不用人为干预即可完成对局。
    缺点:当对手变着,使计算机脱离了开局库的预设值(俗称脱谱),计算机就会自动扩展/延伸多枝计算,这就使计算环节增加了,并增加了耗时和无效枝节的计算。
    由于象棋软件是根据博弈树原理进行计算和剪枝,当对手的着法脱离了计算机预设的着法枝节时,计算机就会自动重新搜索新着法的枝节进行延伸计算,重新计算的结果发现分值亏了,可能为时已晚,甚至无法挽回补救。棋例讲解:
http://www.dpxq.com/DhtmlXQ_www_dpxq_com/DhtmlXQ.swf?DhtmlXQ=w690455.swf
此链接第二盘:这是一盘人机高手对局的彩棋,我们虽然不提倡彩棋,但就棋局而言,精彩之处值得我们探讨研究。
    第22回合,红马三进五约兑,我们可以通过计算机分析,30层后双方分值相等。约兑后第24回合,红马五退七,根据博弈树原理,黑方需要根据红方的着法重新进行节点运算,经过引擎搜索--截断/剪枝,扩展/延伸,返回值/倒推值/局面评估值,黑发现亏了,为时已晚,已无法挽回败局。这就是人机的魅力。
    我们常说的“飞刀”,就是人为的给纯软开局库制造陷阱。由于计算机的运算是根据开局库的预设值进行截断/剪枝/,扩展/延伸(俗称上层深度)计算,被截断减去的枝节不再运算,因此,计算机引擎只运算当前的评估值,而被剪枝后的对方后续着法,无法运算到,所以中刀。
    这就需要人与计算机结合,修正被截断减掉的枝节。
    人机操作
    所谓人机,是指:利用博弈树的计算原理,棋手结合计算机有选择地进行博弈树节点的搜索运算,通过不同着法的拆棋变化进行分析演化,选择评估分值最高着法实施行棋。好的人机棋手,首先要了解计算机博弈原理,对局面的分析判断准确,并且通过变着逼对方脱谱,进入自己设置的思路行棋,并要求能够把控局面。
    纯软与人机的不同之处:
    纯软行棋一般是按照执红或执黑的指定模式进行,由开局库设定的着法出着或应着。人机则多采用分析模式拆解运算进行变着。
    有的网友提出:会用计算机拆棋,就一定是人机高手,原话为:“你没看过吕钦拆棋,他是人机高手毫无疑问。”摘自《人机高手讲座》第17、21楼回帖。
http://www.dpxq.com/DhtmlXQ_www_dpxq_com/DhtmlXQ.swf?DhtmlXQ=w690456.swf
需要指出的是:会用计算机拆棋,不等于会用计算机博弈。这是两个不同的概念。全国象棋大师和特大,如今都会用计算机拆棋,可用计算机博弈,真正掌握计算机与人结合,据我所知,除象棋大师张强外(张强大师的电脑配置是Intel Xeon E5-2670×2,16核心32线程计算机),还没有听说哪位大师或特大师会计算机博弈,是人机高手。
    历年、历届的《中国象棋计算机博弈大赛》各软件商没有一个请象棋大师或特大操盘,为什么?很简单,象棋大师的特长是棋盘上的智慧和思维。而计算机博弈,需要学习、了解、并掌握《中国象棋计算机博弈原理》,评估函数,各兵种在棋盘的不同位置上的权值,棋子配合评估值,博弈树分析,截断/剪枝,扩展/延伸,返回值/倒推值/局面评估值/最佳路径/当前着法,等一系列博弈知识。这就是“隔行如隔山”的道理。
    如今已商业化的中国象棋软件(引擎),主要有4种:
    象棋-名手 作者 蒋志敏
    象棋-旋风 作者 陈朝营
    象棋-佳佳 作者 李国来
    象棋-天机 作者 郑旭
    半商业化和非商业化软件(引擎)有:
    棋天大圣 作者 王娇
    象棋倚天 作者 韦余涛
    陶情弈趣 作者 谭卓勋、张闽
    象棋奇兵 作者 王贤谷、赵明阳
    象棋巫师,小虫引擎 等

    自2011年至2012年后,所有商业化象棋软件引擎都加入了“二次估值”和“局势因子的优化”。
    二次估值的定义:
    1:二次估值方法是指在原有估值基础上,根据不同局势,通过一个合适的“局势因子”,嵌入博弈双方的战略意图,提高估值实用性的一种方法。
    2:局势变化是指当棋面经过激烈变化(吃子,兑子等),对弈双方在相同棋面下占有总棋力的百分比发生超过阈值的变化。
    二次估值方法的步骤
    (1)按照静态估值方法首先对棋面进行初步评估。通过对博弈双方各自棋子的评估值比较,判断己方的攻守形势。
    (2)在中国象棋计算机博弈第一个回合中,选取适当的局势因子(若初始棋局为均势,取局势因子0.5)得出不同走法下棋面的估值后,按传统方法搜索返回值。结束后,记录下博弈路径上红棋棋力在棋局中所占总棋力的百分比,给出博弈走法(总棋力=红棋棋力+黑棋棋力)。
    (3)在第二个回合中,先使用原局势因子下的二次评估函数对棋面进行估值和搜索,对博弈路径上红棋棋力在总棋力中所占百分比与上回合中记录下的棋局中红棋棋力的百分比进行比较。
    (4)若差值大于设定的局势变化阈值,则使用新局势因子下的二次评估函数对棋面进行估值和搜索,确定新的博弈路径。结束后,记下博弈路径上新的红棋棋力在棋局中总棋力的百分比,给出博弈走法。
    (5)若差值不大于设定的局势变化阈值,则记下博弈路径上新的红棋棋力在总棋力中所占百分比,给出博弈走法。
    (6)以此类推,直至终局。
    二次估值方法的优点
    采用二次估值的方法,不仅在博弈中对双方各自的棋力评估,而且充分考虑各自棋力占总棋力的比例以及这一比例的变化,对局势进行总体评估,同时针对双方的博弈态势(攻势?守势?和势?)和博弈策略,选择合适的“局势因子”不断地调整估值函数,变单一判断为整体判断,变静态评估为动态评估,变局部寻优为全局寻优,有效地解决机器静态估值与实战对弈思维方式“剪刀差”存在的问题,以达到选择全局最优博弈路径的目的。
    结论:
    通过运用二次估值方法对中国象棋计算机博弈问题的研究,得到如下结论:
    (1)以“双方棋力合理消长”为目标的二次估值方法,可以把博弈者的战略意图反映到博弈算法之中,嵌入“博弈战略”,提高整体博弈水平,提高估值的灵活性和实用性。
    (2)博弈的搜索路径可以随着“局势因子”而改变,定向搜索可以实现博弈战略的转移,掌握博弈主动权。
    (3)针对中国象棋计算机博弈问题的非线性0-1规划模型,实现了博弈问题的全局优化。
    (4)在对弈平台中的其他棋局的实战表明,二次估值方法能够作出正确的判断。
    (5)遗传算法等人工智能方法可以用于研究博弈问题,为进一步研究提供了思路。以上算法不仅可以应用于人工智能博弈之中,而且在军事、经济、自然科学的其他领域都有一定的推广价值。

日升草民 发表于 2014-2-8 23:48:32

长知识了,顶一个:)

文文文 发表于 2014-2-9 00:39:49

Very good! Thanks a lot..............:D
页: [1]
查看完整版本: 计算机软件与行棋思路的互补