银行 社区服务 每日签到 会员排行 网站地图
  • 3762阅读
  • 13回复

漫谈从穷举法说中国象棋

楼层直达
级别: 中尉
[棋中红钻2级]发帖数量≥100篇 [棋中黄钻1级]金币数量≥100枚 [棋中蓝钻1级]乐币数量≥10枚 [未点亮棋中粉钻]贡献值数量<1点 [棋中彩钻1级]精华帖数量≥1篇
发帖
344
金币
668
威望
5
贡献值
0
乐币
15
主题
37
这是从贴吧转过来的帖子,原作者女神拉克西丝。化工网也有人转过去。这篇帖子虽然没有什么犀利厉害的观点,但正如标题所说,是一篇漫谈性质的文章,所以,细细看下去,对拓宽眼界提高棋软方面的知识还是很有帮助的。我个人的归纳是,人脑的体系以趋向化繁为简为主,不管怎么复杂的东西,人的体系可以使它简化成模块形式存储在大脑,以备随时调用。计算机体系则相反,但是现今也出现了向人的体系靠拢的趋势,假如有一天真的实现了这种技术,例如棋软残局库的智能模块的智能检索调用,那么,棋软的真正威力才能真正恐怖可怕。闲言不赘了,原文有点长,大家自己慢慢看吧,体会也许自有不同。

昨天发了一次,至今未通过审查,今天把几个敏感词去掉了,再试试。




原作者的话:本文是纯粹的漫谈性质,有人喜欢看结论,我可以提前说明白:根本就没有什么结论。

1.局面和变化
数学的思维都是从定义开始的,有时候看到有人在局面和变化这两个概念上纠缠不清,所以我一开始要先把这两个概念给解释一下。
通俗点说,棋谱上通常都是画一幅图,然后写一串着法,这幅图叫做一个“局面”,而这一串着法叫做一路“变化”。局面是一些点,而变化是连缀这些点的线。
【思考题】几何入门问题:4条直线互不平行,一共有几个交点?过4个点中任意两点作直线,一共可以做几条?
这个思考题只是个玩笑,只是为了形象的表示局面和变化的关系。
有人在不知不觉中混淆了这两个概念,说起“变化”时,有时候真正想表达的是“局面”的含义。但是我这里但凡提到变化,就是指变化,不是说局面。
说到穷举法,一般最先问的问题是:象棋有多少变化?准确的说是两个问题:象棋有多少种局面?象棋有多少路变化?
至于这两个问题答案是什么,它们又在多大程度上有意义,这是后话。

2.穷举法的最初设想
早在很久很久以前,我既没有看过任何棋谱,也不知道有什么棋软,我就有过一种想法:能不能写出一本书,介绍下象棋必胜或不败的方法,对方每一步棋都有多种不同的走法,而这本书上要针对每种走法都给出一种最正确的应着。这样一来只要把这本书背下来,就天下无敌了。
现在看来这个想法很幼稚,现在象棋书很多,每本书所能介绍的东西连冰山一角都算不上,我所设想的东西哪是记在书上就能记得下来的?
最早接触的棋软就是红白机上的那个象棋游戏,很多人应该都知道吧。不仅仅是下棋,我也会去思考,它在编程上是怎么实现的?
我最初的想法就是像上面说的那样,在里面存储了类似于那本书的东西。只不过作者没有完全找到最正确的应着,所以它有时候还是会输棋。
可是这个游戏里还有个双人对弈的功能,而且双人对弈里还有一个让程序代走的功能。
这样一来就更麻烦了,像刚才说的那样存储那么一本书都不够用了,因为两个人乱走,走出了那本书的范围,这时候让程序代走,它仍然能给出一种走法,所以我想它可能存储了更多的东西,那么是什么呢?我的想法是:它存储了象棋中所有可能出现的局面,然后每种局面记着一步走法。
归结起来,以上这些内容就是存储法,具体的又分为:基于变化的存储法、基于局面的存储法。
存储法是最低级的方法,略微懂点编程以后,就知道其实完全没必要这么做,因为还有计算法。
不过我这时候所想的计算只局限于暴力计算。每走一步棋,分析有那些可能的走法,然后把每种走法一直算到底,发现按照哪些走法走下去能赢,哪些走法走下去能输,最后选出最好的走法出来。
存储法和暴力计算法就是我对于棋软最初的理解方式,大概很多人都有过类似的想法,这些在贴吧的帖子里可以看出端倪来。
归根结底,这些都是笨办法,一个挑战的是存储空间,一个挑战的是运算速度。
现在棋软所用的算法比这聪明多了,后面再说。
而关于局面数、变化数的讨论也大概从这里开始。这两个问题对于计算机穷举法或许有一点意义,对于人来说是没有什么意义的,即使象棋的变化比现在扩大10000倍,或者缩小10000倍,对于人来说也没什么区别,因为人所能遇到的、所能掌握的都只是其中的一点点而已,更重要的是,人的思维不同于计算机,下棋时根本也不需要关心这个问题。

3.合法与非法,有意义与无意义
当然不是说随便把棋子一摆就可以构成一个局面,也不是说棋子随便乱走就能构成一路变化,毕竟象棋是有规则的,只有不违反规则的局面和变化才算是合法的。
如果棋盘上出现三个马,或者没有帅,或者士象过河等等,这些都是不可能出现的,属于非法局面,如果出现马二进五、兵一退一、炮隔二子打士等等,就属于非法变化。还有一个很重要的规则:不允许送将或不应将,出现这种情况也算非法局面或者非法变化。
一般支持摆子功能的棋软都要对非法局面有一定处理能力。有些棋软是完全随便摆,把将摆在九宫外面它也照常计算;有些棋软还是有限制的,想把将摆到九宫外面也摆不上去,但是如果摆一个双车同时将军的局面,它也不会判断出这是非法局面。至于非法变化,那是不会出现的了,没有那个棋软会把时间浪费在计算马二进五的变化上,除非是双人对弈,如果判断机制不完善,有可能出现不应将的情况。
当然这些只做简单说明,一般说局面和变化的时候,都默认是合法的。
在合法与非法之上,时常被人提及的是有意义和无意义,经常有人说“这个局面是没有意义的”或者“这种变化是没有意义的”。我不接受这种说法,数学讲究要有严格的定义,编程讲究要有判断的准则,从这种意义上讲,“有意义”这个概念本身是无意义的。
首着帅五进一有意义吗?有人说没意义,因为谁下棋都不会这么走。那么为什么不会这么走呢?因为它是败着。为什么又说它是败着?说到底还是因为对帅五进一的后续着法做了些推演,所以才得出这个结论。既然已经推演了这么多,又怎么能反过来说它没意义呢?
最早的时候编棋软的人认为首着帅五进一没有意义,所以不去管它,结果这步棋成了对付棋软的好方法,差一点的棋软直接死机,好一点的还能走棋,但是走的一塌糊涂。
所以讨论这些问题的时候,只讲合法与非法,不讲有意义无意义。

4.有穷?无穷?
首先毫无疑问,象棋的局面数肯定是有穷的。因为一共只有90个点,32个棋子,且不说合法非法,就算把棋子随便往棋盘上摆,也不会有无穷种摆法。
至于变化,这个就有点复杂了。
其实这个问题可以换一种问法:一盘棋的回合数有没有上限?很明显,如果回合数有上限,那么变化就有穷。如果回合数没有上限,那么变化就无穷。
说起回合数上限,就该说到自然限着了:如果连续若干回合双方没有吃子,一方可以提和,另一方不得拒绝。这个回合数一般定为60。这么一来,回合数上限就是31×60=1860。
有人说这个自然限着是非本质的,改成30或者改成120都不会改变象棋的本质。这种说法是对是错也很难判断了。不过我要说的是另一个角度的问题:如果到了自然限着,双方都不提和会怎么样?有人可能以为裁判会判和棋,但事实上,裁判在这个问题上执行的是不申诉不受理原则。
也就是说,一盘棋可能的回合数是没有理论上限的,那么变化就是无穷的。
虽然变化是无穷的,但是计算机在计算的时候,却可以通过巧妙的算法,借助有穷的局面,把计算步骤变成有穷,这是另一回事。

5.棋软已经实现穷举法了吗?
前面提到了我早年对于棋软的两种理解:存储法和暴力计算法,这两种方法本质都是穷举法。后来就知道这种想法的幼稚,因为它一没有必要,二没有可能。
但是,有些人因为对于象棋和棋软都不够了解,对于棋软的理解仍然局限在穷举法。
在这些方面,象棋和西洋棋是很类似的。当年西洋棋冠军卡斯帕罗夫输给了“更深的蓝”,这件事情被很多人解读为“计算机已经破解西洋棋”,。
象棋也是类似,目前棋软已经发展到很多人下不过的程度,于是也被人解读为“计算机已经破解象棋”。
贴吧曾经有一个帖子,说棋天大圣只有60M,连最好的棋手都只能和它战平,也就是说象棋的变化只要60M就能涵盖。(当然这是不是为棋天大圣做广告暂且不谈。)
这些人在得出这些结论的时候都用了一个前提:棋软要想战胜人,就要算尽全部的变化。事实当然不是这样,因为人也没有掌握象棋的全部变化,棋软也没有掌握象棋的全部变化,棋软所掌握的只要比人多就够了,没有必要都算尽。
那么棋软是怎么计算的呢?在很大程度上说,棋软是在模拟人的思维方式。
人一方面记忆了一些棋谱,比如说记布局,记残局定式。相应的,棋软也有开局和残局库。另一方面就要靠计算,但是绝对不是一直算到终局,而是算几个回合,然后判断局面是优势还是劣势。相应的,棋软也是算几个回合,然后判断优势还是劣势。
不过有一点,人在判断优势劣势的时候,靠的是经验和直觉,棋软当然做不到这一点,所以它就只能用一些线性的算法来判断局面优劣。这个判断优劣的算法对于棋软是很重要的,它构成了棋软棋力中很重要的一部分。

6.人和计算机思维方式的差别
人和计算机不同,计算机的思维方式是线性的,而认识非线性的。人的计算速度比计算机慢了不知多少,但是在下棋的时候思考时间却未必比计算机长。
有那么一类特殊的残局,如果给人心算,可以很快算出来,但是给棋软分析,往往就算不出来。
如果是在局面很简化的情况下,人的思考方式可能是:“连冲5步兵,然后……”,这时候,“连冲5步兵”的计算量丝毫不比“冲1步兵”的计算量大。可是对于计算机就不一样了,它要一步一步的计算,计算量不是5倍的关系,而是5次方的关系。
当然棋软也在进步,有些原来算不出来的现在已经能算出来了,但是仍然有许多算不出来的正在等着它。
有时候,一个局面有走车、走马、走炮等多种选择,人可能潜意识里就告诉自己:“这棋怎么可能走车和炮呢?肯定要走马。”然后就专心的思考走马之后的变化去了。可是计算机却不管,既然有这么多种走法,它就要每种都算算看,然后说不定就发现“这儿有一个巧手”——走炮。当人看到计算机的计算结果时,不禁感叹:“我怎么都没想过这棋还能走炮?”
人的漏着往往就是这么产生的,按照从前的说法,这叫做“犯了经验主义的错误”,但是计算机不会这样。
经常有种说法:棋软的中局水平很高,而残局水平就很差。可是就不觉得很奇怪吗?棋盘上的棋子减少了,计算量也就会减少,怎么可能水平反而下降呢?
原来,这里所说的水平高低是相对于人而言的,虽然棋软的残局水平比中局水平要高,但是它的中局水平仍然比人要高,而残局水平仍然比不上人的水平。
所以,不是棋软的残局水平差,而是说人中局水平差。
人的残局水平其实是凝结了很多人的经验,有些例胜的残局可能要走几十个回合,但只要有个固定的套路,前人总结好,后人还是很好掌握的。可是对于棋软来说,要计算几十个回合谈何容易?
本帖最近评分记录: 3 条评分 金币 +18
关键词: 棋软 穷举法 体系
级别: 中尉
[棋中红钻2级]发帖数量≥100篇 [棋中黄钻1级]金币数量≥100枚 [棋中蓝钻1级]乐币数量≥10枚 [未点亮棋中粉钻]贡献值数量<1点 [棋中彩钻1级]精华帖数量≥1篇
发帖
344
金币
668
威望
5
贡献值
0
乐币
15
主题
37
只看该作者 一楼  发表于: 2012-09-28


7.能否突破人的体系?
曾经有一个帖子说:如果哪一天,计算机真的用穷举法破解了象棋,说不定会得到让我们意外的结论。比如说,开局炮二平五可能是败着,帅五进一才是正着。
如果出现让人意外的结论,那么计算机就突破了人的体系。
不过,即使真的实现了穷举法,得出“炮二平五是败着,帅五进一才是正着”的可能性也很小。因为我相信,虽然人的体系肯定有错误的地方,但是怎么也不至于错到这么离谱的程度。
近年来发展起来的残局库,本质上就是穷举法。而且残局库在一定程度上确实突破了人的体系,例如炮高兵单仕相例胜士象全,就是残局库得出的结论。以前很多人表示不相信这个结论,我也曾经不相信,可是后来看了残局库的原理就相信了,穷举法得出的结论不容置疑。
可惜残局库只能局限于子力较少的情况,随着子力增加,建立残局库所需的存储容量会迅速增加,以至于无法实现。
但是现在的棋软却很难突破人的体系。因为我前面说过,软件是用一些线性的算法来判断优势和劣势的,而这个算法是人根据自己的体系教给它的。所以棋软的计算本质上还是体系内计算,只不过在这个体系内算的更深一些而已。
一个局面,如果人判断为优势,那么就会教给棋软:这个局面是优势。这样一来,棋软就不太可能得出“这个局面是劣势”这个结论。
不过,如果棋软在体系内算得很深,人在学习它的计算结果之后加深了认识,对于优势和劣势的理解能发生一些变化,自己修改自己的体系,然后由此修改棋软的算法,在修改后的体系内继续计算。如此周而复始,就可以让体系越来越正确。
量变积累产生质变,质变之后在新的基础上发生新一轮的量变。棋软所完成的的是量变,人所完成的是质变。
这是我所描绘的美好图景——人与棋软共同进化。
有人抱怨:现在很多棋手都用棋软练棋,以至于棋风越来越像棋软。从某种意义上来看,这未必是坏事。
不过,人与棋软共同进化,结果一定会让人的体系越来越正确吗?有没有可能越错越远?
这个也很难说,对待类似的问题,我还是习惯于抱着乐观的态度。
用了3节,关于目前棋软算法的问题就只说这么多了吧,下面该说点别的了。

8.穷举法能实现吗?
前面一直没有真正分析过这个问题。
先说存储法,基于局面的存储法是把所有局面列出来,然后每个局面给出最正确的应着。所有合法局面有多少个?准确的数字我现在还不敢说,但是我知道数量级,是个40位数,这是我唯一一个敢说的。
基于变化的存储法,就像我之前所说的那本书一样,存储对方每一步棋所有可能的走法,然后给出最正确的应着。
改进点方法是局面与变化结合,不同的变化里可能有相同的局面,可以合而为一。从所有合法局面中选出一部分,构成一个子空间,只要按照给出的着法走,无论对方怎么走,形成的局面都还在这个子空间的范围内,这样可以减少存储量。
减少之后的子空间里要存储多少局面?这个我是不知道的,但可以料想,比起总的合法局面数来少不了几个数量级。
那么是否有办法做一个很大的存储器,把它完整的存起来呢?这个肯定是做不到了,别看存储器的容量越做越大,但绝不会无极限。知道阿伏伽德罗常数有多大吗?1T的硬盘不算小,可是1mol硬盘都未必够用,而这是穷尽所有的资源也实现不了的。
计算法和存储法不同,存储法挑战的是存储容量,而计算法挑战的是计算速度。或者说,存储法挑战的是空间,计算法挑战的是时间。空间有限,但是时间却可能是无限的(现代物理的有些内容我也不太清楚),即使计算速度再慢,一直算下去,算到山无棱江水为竭冬雷震震夏雨雪天地合……最后只要能算出来,那也是算出来了。
计算法对空间的需求也不是完全没有,这个是取决于算法的。对于硬盘的需求量就是程序代码长度,写这样一段程序未必会很长,甚至可能比现在的棋软还要短,因为它根本不是倚多为胜的,代码长短和算法优劣也没有太多的直接关联。
至于内存的需求,这个就很考验编程的水平了,如果程序写的好,后来的计算结果可以覆盖掉一部分前面的计算结果,未必需要占用太多内存,那么就只是时间问题了。
这个时间问题我就不想多说了,需要的时间肯定很长。至少肯定不是你我有生之年的事情。
但是首先要想清楚一个问题,一旦计算完了,要有输出结果,输出什么呢?当然不能把所有的信息全输出,否则又陷入了存储法的难题,所只能选择少数的关键信息输出。
针对某一个特定的局面进行计算,输出最优着法,最终结果,这是可能的;进一步说,对于当前局面的各种不同着法依次给出一个评价,甚至给出几路主要的变化,这些都是可能的。
输出内容决定了对于计算法的定位,我只寄希望于它能算出这些而已。
虽然从问题的规模上来说,有些复杂的方程是很难解开的,但是数学上可以证明它有解,并且预测出解的一些性质。
同样,穷举法虽然很难实现,但也可以用类似的方法去分析穷举法框架下的象棋体系,这是本文接下来的部分所要讲的主题。

9.终极结果
有一种说法:如果双方都不犯错误,那么结果是和棋。这个说法被很多人认可,当然也有人不同意,他们认为,如果双方都不犯错误,那么结果是红胜。
且不管这个问题的答案是红胜、和棋、还是黑胜,只说这个问题本身,这就是被我称为“终极结果”的问题。
我们经常见到各种残局,每个残局都有自己的终极结果,有的是红胜、有的是黑胜、有的是和棋,这些残局相对简单,所以都有定论。
进一步就会去想,象棋的初始局面是否可以看成一个很大的残局呢?那么它的结果是什么?这就是终极结果问题的引出。实际上,对于每个局面,都可以这么问,也就是说,每个局面都有自己的终极结果。只是我们顾不过来那么多,所以暂时只关心初始局面的终极结果。
前面提到,很多人都认为,象棋的终极结果是和棋。首先要说明,这只是个猜想,除非实现了穷举法(至少是局部的穷举法),否则无法证明它的对错。
虽然无法严格证明,但是可以从一些不太严谨的方面,大体上判断它是对的。还有人可能会提出一些理论去解释它,这些都只能说明:“象棋终极结果是和棋”这句话有很大的概率是正确的,这对于人的理解是很有用的。可惜的是,就算概率再高,再接近100%,仍然不敢说它一定是正确的。
有很多人热衷于用初等、中等的数学方法去证明哥德巴赫猜想,别的我不多说,只说我看过的一个很有意思的证明,最后得出的结论大致的意思是:哥德巴赫猜想有大于99%的概率是正确的。过程没细看,有可能是正确的。得出这个结论很好,至少给人以光明,但是对于严谨的数学,这个结论是没什么用的。
但是也要说一句,终极结果不能涵盖一切,它只是局面的若干特征之一。这几节先讲终极结果,后面还会提到其他方面。

10.和棋的意义
小时候,我也很不喜欢和棋,看棋谱的时候专挑那些分出胜负的看,和棋的就直接跳过去。因为我认为,激烈的攻杀入局才是最精彩的,和棋就没什么意思。
但不管怎么说,自己下棋的时候仍然免不了会和棋,劣势的时候怎么办?当然是想办法守和,就这样坚守下来,感觉原来守和也不容易。然后就去关注那些和棋的棋谱,渐渐地才领悟到原来精不精彩不在于结局,而在于过程。赢棋也有赢的很无聊的,和棋也有和得很精彩的。
后来就越来越体会到和棋的精彩之处,负阴而抱阳,冲气以为和,精彩的棋局是双方共同演绎的,而不应该是单方面的表演。
感性的东西说得再多也没什么用,有些人总是不喜欢和棋。好恶这个东西,也没什么好多说的,喜欢也就喜欢了,不喜欢也就不喜欢了。我也没办法理解那些因为爱好不同就互黑的人。
现在要说的是公平性问题,虽然现在不知道象棋的结果究竟是不是和棋,但我希望是,因为这是对公平性最基本的保证。
如果终极结果是红胜,也就是说只要红方走对了,不管黑方怎么走都必败,那么对于黑方来说岂不是太不公平了?反过来,如果终极结果是黑胜,那对于红方来说也是不公平。所以最好就是和棋。
五子棋最早是没有禁手的,后来发现黑方可以必胜,所以增加了禁手;后来发现加了禁手还是不够,所以又加了三手交换、五手两打,这些都是为了尽可能保证公平。
有人问:围棋为什么没有和棋?首先围棋也有和棋,就是所谓三劫连环、双提二子之类,不过这些不可能是围棋的终极结果。
关键还是说到黑方贴2.75子这个规则,2.75这个数字当然不是用什么精确方法计算出来的,而是估计的。为什么不是2.5?为什么不是3?因为没人说得清楚到底是黑方占了便宜还是白方占了便宜,所以也就这样了,其实多多少少还是一笔糊涂账,下棋的时候如果赢个一目半目也是件很难说清楚的事。

11.正着与误着
前面提到一种说法:如果双方都不犯错误,那么结果是和棋。其实后面还有一句:下棋就是两个人不断犯错误的过程,谁错得更严重谁就输。和棋也并不意味着没有错误,很可能是双方错误互相抵消了。
那么什么是正着,什么是误着呢?
从最广义的角度来说,不改变终极结果的着法就是正着,改变了终极结果的着法就是误着。以红方为例,如果本来就是红胜的局面,走完一步棋之后仍然保证红胜,那就算是正着,如果走完之后变成了和棋或者黑胜,就是误着。如果本来是和棋的局面,走完之后还是和棋,那就是正着,如果变成黑胜,那就是误着。如果本来是黑胜的局面,那怎么走都是正着(或者说已经无所谓正着了)。
有人问,那如果原来是和棋,走完之后变成红胜了呢?那就说明原来的局面,终极结果就是红胜,不是和棋。
这个定义实在是太宽了,所以一般在评述的时候,不是很常用“正着”一词。
局势不明朗的时候一般不说正着,虽然终极结果存在,但是谁也看不清。一盘棋刚走了几步,谁知道下一步走什么是正着?所以都是用先手后手之类的模糊说法来评价。
正着太多的时候一般也不说正着,单车对光将,只要别把车送给对方吃,那就怎么都是正着,所以也就无所谓正着了。怎么走都是输的局面也一样。这种时候更多的是说最优解。
对于可以取胜的局面,如果只有一两种走法可以取胜,才会去强调这是正着。同样,对于可以守和的局面,如果只有一两种走法可以守和,才会去强调这是正着。

12.对局面的进一步评价
前面给出了局面的一个重要特征:终极结果,但是也说了终极结果不能涵盖一切。有了最基本的“正着”概念以后,就可以回头来看这个问题。
一个马兵对士象全的局面,其终极结果可能是和棋。但是对黑方来说,守和是很艰难的,每走一步棋都要小心,稍一不留神就会输掉。红方就没什么压力,反正怎么都不至于输,如果捡到对方的漏着就赢了。
仕相全对士象全,终极结果是和棋,而且绝对不会出现其他结果(当然前提是没有犯规)。
车兵对车卒也是和棋,但是双方都需要谨慎,因为双方都面临着一不留神就输的情况。
也就是说,同样是和棋,性质也不尽相同。
经常看到有人抱怨,在网上下棋,明明是和棋,对方就是不同意和棋。这也是看情况的,如果是仕相全对士象全,还不肯和棋的基本就是无赖行为了;但如果是马兵对士象全,黑方如果求和,红方不同意是很正常的。
同样,对于能赢的局面来说也是一样,有些局面怎么走都能赢,有些局面需要一步不错才能赢,这个区别也是很大的。
以上分析都是基于“人会犯错误”这一点,评价的本质也是在分析在这个局面下犯错误的概率是大还是小。
没有实现穷举法的计算机也会犯错误,但如果是两台实现了(或部分实现)穷举法的计算机在下棋,那就无所谓了,因为它们怎么也不会犯错误。

13.正着中的最优解
马擒单士,红方只要别把马送给黑方吃,那就怎么都是正着。话虽这么说,但绝不意味着红方就可以随便走。有人一直掌握不了马擒单士的技巧,马毫无目标的乱跳60个回合仍然捉不死士,也就和棋了。
正着只是保证这盘棋仍然有办法赢,但是要最终赢下来,必须把这个“有办法”给找出来。
所以提出最优解,几种不同的走法都同样是赢棋,但仍有所不同,需要给一个标准来评价它们的优劣。
最直接的标准是回合数,能以最快的速度赢下来就是最优解。一种着法只要三四回合就可以取胜,另一种着法要十几个回合才能取胜,那么前者就是最优解。当然,如果一种着法要10回合,另一种要11回合,也就不必纠结了,因为也不是非要把最优解找出来不可,次优解也未尝不可。
但是回合数也不是唯一标准,除了求快之外,有时候也要求稳。如果有两种方法都可以取胜,第一种方法是弃子抢攻,20回合之后可以成杀;第二种方法是兑子简化局势,形成自己会的例胜残局,40回合之后可以取胜。你会选择哪种走法呢?如果是算度高,喜欢攻杀的人可能会喜欢第一种走法,但是对于一般人来说,这样做太冒险,一着不慎满盘皆输,第二种方法虽然慢,但是可以稳赢。这就是上一节提到的,两个同样是能赢的局面,仍然有所不同。
对于终极结果是输棋的局面,也有个最优解。不会因为怎么都是输就随便走。
最直接的还是回合数,能把回合数拖延的最长的着法就是最优解。其实这个也不是一定的,很大程度上,其实是在寻找败中求和,甚至反败为胜的方法,也就是说,最大程度的给对方取胜制造麻烦。拖回合数当然是制造麻烦的一种方法,但是也不是唯一的方法。如果红方走完一着之后,黑方有十几种走法,其中只有唯一的一着可以取胜,一旦走错就和棋,那么红方这一着就给黑方取胜制造了很大的麻烦,虽然不是拖延最久的着法,但仍然可以成为最优解。
那么如果终极结果是和棋呢?和棋当然就不存在速度一说了。
某个马兵对士象全的局面,终极结果可能是和棋。对红方来说,怎么走都是正着,但是红方肯定不愿意简单地就把马或者兵送给对方吃。马兵对卒士象全也是和棋,黑方直接把卒弃掉仍然是和棋,但是黑方也不会愿意简单的就把卒弃掉。
上一节提到,和棋与和棋还不一样,优势的一方要尽可能地想办法去创造胜机,劣势的一方不可居于险地,不要给自己犯错误的机会。
归根结底,这一节还是基于“人会犯错误”这一点,所为最优解的本质,其实只有两条:减少自己犯错误的机会,或者增加对方犯错误的机会。这个也是因人而异的,不同的人在各种局面下犯错误的概率都是不同的,所以还取决于自己和对手的状况。
但如果是已经实现(或部分实现)穷举法的计算机,那又无所谓了,赢棋的最优解就是赢得最快的方法,输棋的最优解就是就是输得最快的方法,和棋无所谓最优解。
14.优势与劣势,先手与后手
这里所说的优势,和胜势是有所区分的。虽然有时候说起来也不很区分,把胜势也算作优势的一种,但是我这里是很强调概念的。已经很明确能赢的就是胜势,还算不上胜势的才叫做优势。
这里所谓“还算不上胜势”,有两种情况:
第一种是局面很复杂,看不清终极结果,不能确切的知道能不能赢,但是根据形势判断,赢的概率比较大。
第二种是虽然知道终极结果是和棋,或者从形势判断上很可能是和棋,但考虑到实际对弈时双方都会犯错误,仍有较大的取胜机会。
从这个意义上讲,优势这个概念仍然是建立在“人会犯错误”上的。虽然终极结果可能是和棋,但是其中一方犯错误的概率很小,另一方犯错误的概率却很大,这就有了优势与劣势之分。
如果终极结果是和棋,虽然一方占有“优势”,但对方没犯错误,最后走成了和棋,那么这个优势是没有什么作用的。
而从穷举法的层面看来,就不需要优势这个概念了,能赢就是能赢,赢不了就是赢不了。
而所谓先手、后手,就是个比优势、劣势更轻微一些的说法,一般开局阶段说的比较多。哪一方布局走得不好,落了后手,另一方得了先手,这个时候如果说有优势,那也是很微弱的,所以一般也不这么说,只说先手后手。
有时候中局也说先手后手,总的来说,这个概念和优势劣势只有量的区别,质是一样的。

15.设想:颠覆优势、劣势的评价体系
在第7节中,我曾经提出:一旦实现穷举法,或许可以突破人的体系。可是突破什么呢?发现某些原本认为某方能赢的局面其实是和棋,或者原本认为是和棋的局面其实某方能赢。这些都是突破,只是现在还很难预知。
我的设想是:穷举法会颠覆优势、劣势的评价体系。
上一节已经说过:优势和劣势是建立在“人会犯错误”这一点上的,而穷举法却是建立在“双方都不犯错”的前提上的,那么对于穷举法而言,优势、劣势也就失去了意义。
象棋在本质上只有三种结果:红胜、黑胜、和棋。穷举法前提下,能赢就是能赢,赢不了就是赢不了,而不再用优势劣势、先手后手这种模糊的评价体系。
或许原来认为某个着法是妙着,可以获得优势。但如果获得优势之后仍然赢不了,那么这个着法也就很难才称之为“妙着”了。
同样的道理,原来认为某种着法不成立,走完之后就会劣势。但如果劣势下仍然输不了。那么这个着法也没什么不成立的。开局帅五进一究竟是不是败着呢?这个真的很难说,劣势是肯定的,但是黑方得了优势,就一定有办法赢下来吗?

16.人的体系永垂不朽
现在有了两个体系,一个是“人会犯错误”的体系,另一个是穷举法的体系。
说了这么多,别忘了前提,穷举法是难以实现的,这个体系也只是个概念而已。其实还有更重要的一点,由于存储法的破产,即使这个穷举法的体系建立了起来,它也只存在于计算机的CPU里,连硬盘都难以进入,人就更无法去接受这个体系了。
无论计算机发展到何种程度,人都还在自己的体系里。如果穷举法体系真的建立了起来,它所能起到的作用也只是帮助人们发展自己的体系而已。人看不完这个体系的全貌,只能开一扇小窗户,从中窥得这个体系中的一小部分。
人们可以从中得知,哪些布局是可行的,然后加以发展;哪些布局是错误的,找出对付的方法。
人们还可以得知一些复杂的、无定论残局定式的胜和规律,然后发展出取胜、或者守和的方法。
然而无论如何,这个发展的过程还是只能由人自己来实现,其他的一切都只是辅助。
人的体系的本质是什么?象棋本来是个很复杂的东西,人不能直接掌握,所以运用了自己抽象的能力对它进行了简化,把它变成了一个不那么复杂,可以掌握的东西,这就是人的体系。
而穷举法恰恰相反,把一切复杂的东西全部囊括在内,它只可以给人提供用于抽象归纳的素材。但如果让人完全去学习穷举法的体系,那不是进化,而是退化。











级别: 中尉
[棋中红钻2级]发帖数量≥100篇 [棋中黄钻1级]金币数量≥100枚 [棋中蓝钻1级]乐币数量≥10枚 [未点亮棋中粉钻]贡献值数量<1点 [棋中彩钻1级]精华帖数量≥1篇
发帖
344
金币
668
威望
5
贡献值
0
乐币
15
主题
37
只看该作者 二楼  发表于: 2012-09-28
总体来说,还是一篇很好的文章,大家看看吧。

级别: 中校
[棋中红钻6级]发帖数量≥5000篇 [棋中黄钻3级]金币数量≥2000枚 [棋中蓝钻2级]乐币数量≥50枚 [棋中粉钻5级]贡献值数量≥50点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
6131
金币
4069
威望
15
贡献值
51
乐币
62
主题
1

只看该作者 三楼  发表于: 2012-09-28
说得不错,谢谢您的支持与分享,棋中有你更精彩!
级别: 一级士官
[棋中红钻1级]发帖数量≥10篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
27
金币
21
威望
0
贡献值
0
乐币
0
主题
0
只看该作者 4楼 发表于: 2012-09-28
穷举法是一种原始的模式,是蛮力式的方式,现在的开局库做法,就是这样,也许就是一种悲哀!
级别: 少校
[棋中红钻5级]发帖数量≥2000篇 [棋中黄钻4级]金币数量≥5000枚 [棋中蓝钻1级]乐币数量≥10枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
3464
金币
7217
威望
0
贡献值
5
乐币
47
主题
51

只看该作者 5楼 发表于: 2012-09-28
漫谈从穷举法说中国象棋好文章。学习了。
级别: 论坛检查
[棋中红钻5级]发帖数量≥2000篇 [棋中黄钻3级]金币数量≥2000枚 [棋中蓝钻4级]乐币数量≥500枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
3741
金币
2796
威望
6
贡献值
6
乐币
529
主题
0

只看该作者 6楼 发表于: 2012-09-28
文章太长了,实在很难一鼓作气的看完。
无意中看到一段:「人的残局水平其实是凝结了很多人的经验,有些例胜的残局可能要走几十个回合,但只要有个固定的套路,前人总结好,后人还是很好掌握的。可是对于棋软来说,要计算几十个回合谈何容易? 」这点偶非常认同。
级别: 超级版主
[棋中红钻5级]发帖数量≥2000篇 [棋中黄钻5级]金币数量≥10000枚 [棋中蓝钻3级]乐币数量≥100枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
4985
金币
19907
威望
6
贡献值
9
乐币
293
主题
139

只看该作者 7楼 发表于: 2012-09-28
久违了朋友,转来的文章有看头,谢谢你的分享。
_仯帥軟件象棋群
级别: 司令员
[棋中红钻6级]发帖数量≥5000篇 [未点亮棋中黄钻]金币数量<100枚 [棋中蓝钻3级]乐币数量≥100枚 [棋中粉钻2级]贡献值数量≥5点 [棋中彩钻1级]精华帖数量≥1篇
发帖
5629
金币
75
威望
6
贡献值
5
乐币
178
主题
188

只看该作者 8楼 发表于: 2012-09-28
感谢提供象棋理论知识学习学习!
级别: 少校
[棋中红钻5级]发帖数量≥2000篇 [棋中黄钻3级]金币数量≥2000枚 [棋中蓝钻3级]乐币数量≥100枚 [棋中粉钻3级]贡献值数量≥10点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
2569
金币
3442
威望
2
贡献值
10
乐币
427
主题
119

只看该作者 9楼 发表于: 2012-09-28
太多理论  搞不明白  瞎看一下
级别: 四级士官
[棋中红钻2级]发帖数量≥100篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
187
金币
61
威望
0
贡献值
0
乐币
2
主题
1
只看该作者 10楼 发表于: 2012-11-24
可看出楼主对计算机算法颇有研究,指望楼主发明新的算法提高计算机应用(不仅仅是象棋引擎而已)。
级别: 四级士官
[棋中红钻1级]发帖数量≥10篇 [棋中黄钻1级]金币数量≥100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
66
金币
151
威望
1
贡献值
0
乐币
5
主题
6
只看该作者 11楼 发表于: 2012-11-29
一口气看完了,虽然有些啰嗦,但也看出了很多道理。但愿象棋不要象五子棋那样,变成了执先必胜!!那样就是象棋本身的不幸和广大爱好者的悲哀!
级别: 三级士官
[棋中红钻2级]发帖数量≥100篇 [棋中黄钻1级]金币数量≥100枚 [未点亮棋中蓝钻]乐币数量<10枚 [棋中粉钻1级]贡献值数量≥1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
191
金币
859
威望
0
贡献值
1
乐币
4
主题
0
只看该作者 12楼 发表于: 2012-12-05
感谢楼主分享,确实好办法啊
级别: 四级士官
[棋中红钻2级]发帖数量≥100篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
128
金币
22
威望
0
贡献值
0
乐币
0
主题
0
只看该作者 13楼 发表于: 2013-02-05
学习了,呵呵,博大精深
快速回复

限56 字节
请不要在回贴只采用字母:“ PP、asdfhjkl、HAO、OK、ddddddd ......”。  请不要在回贴过于简单的内容:“不错、顶、支持、厉害、呵呵、靠、晕........”
 
验证问题: 我们论坛是一个什么棋类为主的论坛?
上一个 下一个