很期待看到哪款象棋界面能调用多个引擎共同完成一局棋。象棋是一个复杂的巨系统,人类对其认识也很有限,好在复杂的事务可以分成更细小的环节去研究,人类早就这么做了,棋软件都还是做为整体在设计的,即便在设计中对各部分都做了考虑,也难免有相互干扰,一点小的问题不知会产生多大变化,就象蝴蝶振翅引发海啸。
目前把象棋分成前、后两部分来研究和设计是可行的,首先是前后的划分问题,这是一个课题,可能要认真研究找到最好的办法,不过可以先从简单的做起,就是双方大子数都不高于3个时,可视为残局问题,引擎1停止工作,由引擎2接手。人类把某些开局就兑掉双车局面,归为提前了的残局问题,这个不用担心,第一这只占对局的一小部分,其次就是四马炮相斗仍很复杂,计算机仍有计算优势。如果在至少一方有4个或更多大子时成杀,引擎2当然不需出场,双方大子都不多于两个当然是正宗残局,这时介入可能有些晚,上一子力级数恰好处于一种过渡状态,较稳妥。最可能的类型为三对三,三对二,或是三对一(这一型将很少),对引擎的设计有充分技巧可用。
有人可能会说国际象棋都是整体设计不是棋力很高吗?首先,现在的国际象棋如果分开设计或许棋力还会高(如果有一天,程序员们发现不在能找到有效方法持续提高棋力,或许会拆开来看看),另外也是最重要的,两种象棋本质不同,虽然棋子都不能再生(数量不会由少变多),可是国际象棋只要有兵(兵很多共16个),棋子质量就会发生变化,一方在突然间就会获得足以吞没对方的力量,升变是国际象棋后期的核心问题,前期形成的兵形结构,天然具备屏障和进攻发起的依据,而棋盘上一次升变也没发生过兵就都消失了的多半立即和棋,这种情形很难看到一方有三子另一方有四子的稀奇局面,国际象棋的方向性、向背等问题也完全不同于中国象棋,再加上无论从计算机和人类两方面研究国际象棋均优于我们,象开局百科、残局百科这种高度的理论著作我们就没有。兵在中国象棋残局中也重要,主要是对匮乏物质力量的补充,兵不会直接形成屏障,将帅也不能去兵下面寻求保护,更不能跑到兵上面,我常看见残局时电脑会让同侧的两个兵连诀而下,形成同侧两个低兵,这是很坏的愚形,这一情形在中局不易出现,如出现也不是愚形,因为在有充足攻击子力时,这两兵是很有杀伤力的,还有弱势一方,在没有算出短期内有大碍时,会大大方方沉一步底炮,再潇潇洒洒开一步边,接下来没事做再花一手退回来,这可不能怨电脑,是设计的问题使电脑走出看似加分其实危险的棋步,而沉底炮在中局很有威胁,类似问题在分开后就易解决。
目前任一引擎稍做修改都能做为第一阶段引擎,关于残局的所有评介都可去除,子力价值也不需要为残局优化,如果能大幅减低代码复杂度,可能还会稍许提升前半段棋力。第二阶段引擎相对就麻烦一些,一开始会有许多障碍,目前几乎没有符合条件的,因为在一体化设计的引擎,在没有把握的情况下,是不会太为残局优化,棋总是从前往后下的,如果设计上伤到前面的实力,没到残局胜负已分就太不划算了。分开设计就好维护多了,处理开局库的问题肯定不用考虑,子力价值要从新考虑,子力交换也大不相同,兵和士相是设计的重点问题,中国象棋同样很难出现双方均无兵卒,也无士相却各有两三个大子的局面,而攻守两方士相的价值也不相同,比如车士相全对马双象,任谁也愿意用士相全去换一象的,就单车对马双象这一专题来说,电脑的行为也很别致,“高相边联马占中,形成三相车难攻”的歌诀对电脑没有任何意义,在有充分可调整为三相的棋步时,电脑绝对不走,即使你先为电脑设好三相局面,只要别逼的太狠,给电脑充分的安全时期,电脑多半会调出一个人类认为会输的架,其实这个好理解,多数程序对双象中联有加分,而且马是唯一有活力的棋子,电脑当然不会把它当个象使,并非以上行为让我任象深刻,而是下面要说的,当在这一形态下时,电脑大多一会安分地把马置于家中守卫,而是敢于将马向车方领域深入,一面溜达一面打将,只是当你以为有机会攻击时,电脑总能调配出最适当的防守,往往千钧一发,你会发现不是这样的步调就崩溃了,这里电脑的强大运算起了作用,它组合出来的棋路能使自己在十几步甚至更长时间不会丢子,从而在这一状况下赢电脑要比羸一个人难的多,而这一形态下局面较多,我也没有找到好方法。残局时期的攻守关系也完全不同于中局,局面犬牙交错一着不甚攻守互逆的情形不会发生在残局,残局的攻守关系会在较长时期固定,只是占优方扩优取胜也是一个长期艰苦的过程,因为“残棋技艺的绝诣就是最接近平衡的不平衡”,压倒性优势不是残局问题,那样即不需什么知识也不需太多技巧。
很多残局问题,只靠引擎的计算结果会很不可靠也很不稳定。残局库当然是最稳定最可靠的方法了,前提是它要管用。在4分钟加2秒时限下,我曾用单王成功守和Fritz8引擎的三马,当然我丝毫也没有心里压力,我原以为电脑会轻松取胜,我用王两边溜底线玩,Fritz8用三只马在中间围堵,老王远远飘在外边,偶尔动步王也渐行渐远,更象闲着就是不肯逼上来,当走了三十几合后我突然明白守和将不是困难,不是说这一局面人类一定能顶和Fritz8,不经意的一步可能就会刺激到电脑从而引发雪崩。后来使用残局库知道这是个十八步杀的局面。再后来,惊奇地发现ChessBase的新引擎Fritz9、Junior9、Shredder9、Hiarcs10都不再支持4+1残局库,因为4+1残局库中也只有三马杀单王有那么一点点价值,而且当电脑在优势下肯把王主动逼上去时,就连这一点价值也会烟消云散,何况这种局面在一百万盘实际对局中都难发生一次。其它三子方不胜的局面对电脑毫无影响,如两只车线叠兵外加一只与升变格异色的象,是简单的控制升变格问题,是胜是和连Fritz5在一秒钟内都能判断清楚。人脑和电脑对残局问题有本质不同,在有残局库时电脑是滴水不漏,没残局库电脑也有强大计算能力,人类多半要提前学习用功,对于陌生局面人类无论判断、感觉和计算都会大幅度下降,国际象棋杀单王的四种类型,后和车是太简单了,双象杀王中,我总结出先用双象封锁次斜线和第三斜线,把对方王封锁在只有十五个格的三角形中,再把王从三角形短边一侧突进,使敌王只有七格活动空间,再用双象从长边逼过去就能取胜,这也是我唯一会的一种方法,用这个办法在十八、九步成杀的局面中,我能花费三十余步取胜,好处是不用多想却总是有效,至于马象杀王,我没找出规律也就不会走了,而这些电脑很强地方,它们的计算力甚至比人类总结的规律还要有效。
台湾有作者做出中国象棋的残局库了,非常值得祝贺!虽说个人认为残局库在十年甚至更长时间里对中国象棋实战能力不会有大的提升,可是电脑技术的发展总是不以人的意志为转移的,不是吗。各种事情都要有人去做,拓荒者都是了不起的。而且我坚信专项的残局库对人类对残局的专题研究和理论建设有不可估量作用,这也可能是最有意义的地方,人类发明电脑最主要的目的不是检验能否击败人类的问题,而是电脑在各种领域都能给人类以帮助,当电脑在棋类运动中自然而然地击败人类时,人们都会欣然接受,我是多么多么多么期待自己无论如何都赢不了电脑啊。马兵专集、炮卒专集是陈廉庸先生留给我们的宝贵财富,陈先生为此花了多少时间和精力外人恐难统计,现在听说已出了炮兵士相全对士象全的残局库,那么就对我们发展完善这些专题做了充分的保障。
在象棋杀着中有一个叫“海底捞月”的,不知道最开始为什么会被列入杀法之中,我一般更愿意把它看成一个残局问题,而且是一种结构最单纯的,任意一方子力的添加都将背离原型而成为引申,这也是很少数的和国际象棋残局库相类似的类型,当然和国际象棋五子的难度是没法比的。大部分棋软对这个类型都不能100%处理(这也可以反证它不属于杀法,电脑对基本杀着都能迅速准确地做出反应),在做基本杀着整理时我曾对这一专题做了较完整的总结,终究我是无权把它排除在杀着之外的。我用这个局面对多个软件做了测试五分钟包干计时,大多软件在第一步就错了,只有旋风0.53走对并完成第一阶段反夺中路的任务,只是接下来它却失去了方向,可能是时间太短了,虽说开了后台思考,可我走子很快,电脑也很难命中我的应手,如果攻方车能占中,棋隐是最会走的,着法也经济,可能做过单独设计,不过海底捞月对电脑实战不会有多少加分。顺带把我整理的局面以附件上传给大家参考,是一个象棋演播室文件,着法是为了说明攻防关系不会十分精确,只要不出结论性错误。
[Game "Chinese Chess"]
[Event "海底捞月测试"]
[Round ""]
[Date ""]
[Site ""]
[RedTeam ""]
[Red "Cyclone 0.53"]
[BlackTeam ""]
[Black "king"]
[Result "1/2-1/2"]
[ECCO ""]
[Opening ""]
[Variation ""]
[FEN "9/9/4k4/9/9/4r4/2CR5/9/9/3K5 w - - 0 1"]
1. 车六进五 车5进4 2. 帅六进一 车5退3
3. 炮七进六 将5平6 4. 炮七平九 车5退1
5. 炮九平八 车5退1 6. 炮八平二 车5退4
7. 炮二退三 车5进3 8. 炮二进二 车5进1
9. 炮二退七 将6平510. 炮二进六 车5退1
11. 帅六退一 车5进612. 帅六进一 车5退3
13. 炮二进二 将5平614. 帅六退一 车5退1
15. 车六退七 将6退116. 炮二退八 将6退1
17. 炮二平五 车5进218. 炮五退一 车5平6
19. 车六进八 将6进120. 炮五进三 车6退1
21. 车六退一 将6退122. 车六平五 车6进3
23. 帅六进一 车6退324. 帅六平五 车6进2
25. 帅五退一 车6退226. 车五退四 车6进3
27. 帅五进一 车6退328. 炮五平八 将6进1
29. 帅五退一 将6退130. 车五进五 将6进1
31. 车五退一 将6退132. 炮八进六 车6退2
33. 炮八退三 车6退134. 炮八进二 车6进1
35. 炮八进一 车6退136. 炮八退二 车6退1
37. 炮八退七 车6进238. 炮八平六 车6进1
39. 炮六进二 车6进240. 炮六进四 车6进2
41. 帅五进一 车6退642. 车五退三 将6进1
43. 炮六退一 车6进344. 车五进三 将6退1
45. 帅五退一 车6退246. 炮六退二 车6进5
47. 帅五进一 车6退448. 炮六退二 车6退1
49. 车五进一 将6进150. 炮六进一 车6进3
51. 车五退三 1/2-1/2
============================