jjj新游网

查看: 4774|回复: 0
打印 上一主题 下一主题

玩国际象棋不如玩仿盛大传奇

[复制链接]

9

主题

16

帖子

41

积分

新手上路

Rank: 1

积分
41
跳转到指定楼层
楼主
发表于 2014-11-15 15:20:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
国际象棋打败人类10多年前就已经由深蓝完成了,近年仅是个人电脑的国际象棋软件的等级分就已经大幅度超过人类,已经没有人类的世界冠军笨到跟计算机挑战自取其辱了。原先还经常的举办国际象棋人机对抗赛,但是几年前开始,为了使人机对抗赛更为有悬念,比赛规则已经改变成计算机让F线以外的一兵了——如果对国际象棋有较为深入一点的研究,就知道一个兵是多么大的价值。
国际象棋软件的结构分为:
1,人机界面:让人类能直接以国际象棋语言和计算机对话;
2,引擎:计算局面得分权重,以一定的算法得出分值,正数则白棋优势,负数则黑棋优势,分数越大(越小)则白棋(黑棋)越优。世界电脑国际象棋锦标赛(WCCC)每年都举办,引擎的计算能力是以摩尔定律的年为尺度的,而人类大脑的计算能力是以进化的百万年为尺度的,差距只会越拉越大,何况之中还有程序员的努力将算法优化的因素在内;
3,开局库:集合数以百万计的人类国际象棋比赛的开局,使得在有开局库的前提下,计算机可以不必计算直接走出人类认为的开局谱招。国际象棋大师们都会记住相当多的开局,但是计算机会记住几百万盘棋局;
4,残局库:由超级电脑计算好剩余棋子的所有局面,并存储以备调用。当局面剩余残局库中所存储的局面时,不必计算,计算机直接可以知道结果。6子以内残局库已经算完,7子残局库也已经算出大半。
认识好多国际象棋的国手,自己也对国际象棋小有研究,共同认识是:
1,开局永远拼不过计算机,除非脱离谱招拼计算;
2,计算永远拼不过计算机,现在引擎的计算深度已经远远高于人类,而且——它永远不犯错。而偶尔犯错却是人类的天性,如果能均势和计算机进入到残局基本就算胜利。
3,残局计算机相对弱势,但是残局库却在不断完善,计算机不需要局面达到残局库,而只需要计算到残局库就可以立刻知道胜利的正确走法,就像你在和一个已经知道考试答案的人拼考分一样。
即使对手的实力略逊于你,但是如果他永远不会犯错往往是最郁闷的事情,何况无论哪方面,计算机在国际象棋方面的实力都要高于人类。
未来:引擎算法会继续完善;摩尔定律会使得计算机的能力更加强大;残局库会继续计算7子,8子,9子;开局库虽然是基于人类,但是只要有人走出招式,就会被计算机收录以作备用;当残局库与开局库对接的时候,甚至计算机取消引擎直接就可以知道怎么走才是最优招法了。
关于三人当年的恩恩怨怨就不说了,直接正题。
当年的深蓝是一台有自闭症的超级计算机,因为它的芯片也是为下棋而DIY出来的,因为这样可以提高在这个特定领域的计算效率。现在由于硬件的飞速发展已近不需要软硬兼修的弈棋计算机了,只需设计软件就可以解决问题。
弈棋软件的基本原理是决策树和剪枝算法,不同程序的区别也主要在于这些算法的细节。之前看到一个答案说枚举法,这是绝对不行的。在一盘棋中,每一步可能的走法大概有几十上百种(当然大部分都是无厘头的走法,正常人想都不会想),深蓝的计算能力是每秒2亿步,卡斯帕罗夫在长考中能考虑到14步之后的情形,请问如果仅用枚举法深蓝要算多久?数字太夸张就不算了吧。因此必须给决策树剪枝,即合理地忽略掉一些不合理的可能性,有很多不同的剪枝算法,如α-β剪枝等(下面的链接是算法在黑白棋里的应用,更好理解一些),这些都是是计算机科学基础知识的应用,有很多资料可以查阅,叙述的都比我详细,就不多说了。总之不同的剪枝算法影响的是计算的速度和深度。
剪枝算法都需要依据一个估值函数,估值函数就是从任意一个局面到一个有理数的映射,用于评价当前局面对双方的优劣。估值函数需要考虑到场面上的很多变量,比如现存子力以及搭配、控制的空间、兵型、强格弱格等等问题,每一个变量都要分配不同的权重,最终相加起来得到函数值。程序的一大难点就在于变量的设置和权重的分配,这个问题是许峰雄无法解决的,但他的团队里还有国际象棋高手,变量和权重就是由棋手凭经验来设定。程序猿大概都有这感觉,最痛苦的事情不是编程而是调试,国际象棋程序的调试更加痛苦,比找程序的语法错误和逻辑错误都要困难。需要幕后的棋手们和程序一盘盘的对弈,然后棋手们要复盘分析程序哪一步走得不好,为什么会选择这一步。程序不会告诉你他为什么这样走,你只能查看运行日志,了解计算机对决策树中的各个关键局面的评分,看它错误的评估了哪些局面,从中归纳出不合理的变量权重或者没有考虑到的变量或者需要细化的变量条件。更麻烦的是,不同棋手对于同一局面的评估还可能不一样,因为他们各有自己的风格,比如弃兵获得的局面优势,保守的和激进的棋手就会有不同的评价。在传统国际象棋的理论中,你只知道各个变量的优劣,但并没有具体的数值,个人觉得如果它的研究价值足够大的话弄一个所谓的“计算弈棋学”领域出来也不是不可能。总之估值函数影响的是计算的正确性。
综上可知,剪枝算法和估值函数就是弈棋程序的两个核心内容,弈棋程序与其说是AI还不如说是程序猿和棋手的爱情啊不智慧结晶。
除此之外还有很多简单粗暴的方法来增加性能,比如说开局库和残局库。开局是可能性最多又最难评估的阶段,好在我们几百年的对弈经验中已经总结出来了比较完善的开局库,有了这个就不用费脑子想头十几步棋怎么走了,除非对手首先非主流。残局库更加凶残,只要局面满足了一定条件,你就把它当成DFA(确定有限状态自动机)来看吧,就是说该死的一定会死。
最后再说说人类怎么面对这个怪物。当年华山论剑卡斯帕罗夫是6盘以2.5比3.5惜败深蓝,但假设总共下60盘棋(当然要有足够的休息了),那我敢打包票卡斯帕罗夫会赢。面对深蓝最好的办法就是个两个词:次优,反推。
次优就是说,在自己也不确定的情况下,选次优的走法。因为在程序的计算中,想得最深的是如何应对你最有可能的走法,其他可能性的计算深度会少一些,那么变数就会更大,当它想了那么多结果你不照它想的走,那它很多局面就白算了。开局也一样,选择实例更少的开局,可以让程序尽早脱离开局库,开始独立思考。
反推就只有卡斯帕罗夫这样的大师能做到了,即通过大量的对抗,猜测它的估值函数的各个权重(这当然是保密的内容),从中找到设计者没找到的不合理之处,借此诱使程序进入自己想要的局面。人类可以针对机器改变自己的策略,而机器不会适应对手,这也是很多科幻电影的必杀技之一吧。
但是现在,由于计算机的速度一直在增长,即使剪枝算法和估值函数完全不改变,它的水平也会变强,借用一句老话就是,人类已经挡不住深蓝们了,因此也不会再有蛋疼的人机对弈比赛了。不过好在计算机的能力(应该是)永远不可能枚举出棋盘上的所有可能性,否则计算出了必胜的策略,我们就只能把国际象棋像Tic-Tac-Toe一样扔进垃圾堆了。
随意打败职业高手的象棋或者国际象棋程序已经有许多了,之前深蓝上用的可能算是第一例。

现在的国际象棋大师也不错。

国际象棋的情况和中国象棋有点不同,因为爱好者已经在早期就把国际象棋的残局库和开局库给电子化了。
就徐雄峰在他的《深蓝揭秘》中的情况来说。
开局和残局由开局库和残局库来搞定了。
这是因为开局和残局在几百年前已经被研究的很透了,这部分没什么理由再由机器来干。对顶尖人类选手来说也是如此,所以从根本上来说这里机器和人也拉不开差距。事实上,在残局上来说,在大型人机对弈时操纵机器的通常有一个负责人懂一点棋,在残局进行到一定程度时在必要的时候会主动认输或提出和局以免浪费时间。

剩下的情况下,在各个局面中根据棋盘上各个棋子的摆放计算出当个局面的势力方面的估值,每当要走一步时,搜索对应当前局面时、局面树上各个路径的情况来决定走哪部好。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表