乐者为王

Do one thing, and do it well.

象棋残局大师开发实录(1)

小时候经常在街头看到有人摆象棋残局,红方无论赢棋还是和棋都算破解成功,否则就是失败。作为象棋低手,也曾尝试过好多次,但从来没有真正破解过哪个残局。有次甚至默记住某个残局的走法去破解,结果在解完所有圈套后还是在接下来的走棋中输掉。

一晃许多年过去了,象棋也很长时间没有再玩过。最近偶尔在网上接触到象棋残局,又再次把思绪给挑动起来。同时也了解到那些街头残局的最终结果通常都是和棋,并且由于残局往往会包含多个圈套,所以破解成功的可能性非常非常之低。因为在解套阶段,你必须步步走对才能把所有的圈套解除,否则只要有一步走错便是输。解完套之后,你仍然得小心翼翼地走棋,要是误走一着也很可能会输掉。正所谓:一着不慎,满盘皆输。

残局棋谱通常会有参考走法,按照这些走法逐步执行就可以破解成功。但目前我在网上碰到的有些残局的参考走法明显有错误。比如,红方在某个关键步骤时有不遵循参考走法的走法会让红方对黑方形成必杀,又或者黑方在某一步时换个走法就会使和棋的结局变成黑方必胜。当然,这些错误或正确的走法也可能是我想当然,因此我也不能确定我的想法是否真的正确。为解决这个问题,我决定开发一款结合人工智能的象棋残局软件。毕竟现在的人工智已经非常强大了,上半年的AlphoGo都已经把围棋这个难题给攻克,所以用人工智能来探索象棋残局还是非常合适的。

象棋游戏属于完全信息博弈游戏,所以它至少应具备如下几个部分:

  1. 某种在机器中表示棋局的方法,能够让程序知道博弈的状态。
  2. 产生合法走法的规则,以使博弈公正地进行,并可判断棋手是否乱走。
  3. 从所有合法的走法中选择最佳走法的技术。
  4. 一种评估局面优劣的方法,用以同上面的技术配合作出智能的选择。
  5. 用户界面。有了它,程序才可以用。

但我要开发的程序主要是用于研究象棋残局的,所以它还需要一些特殊的辅助功能。在最理想的情况下,残局的人机博弈走法应该和参考走法相同。但有时候我们会发现黑方会走出不在参考走法上的步骤。因为参考走法是经过多年的演变而来,通常是最优的,所以我们需要能对黑方的走棋进行纠错。当然,最好的做法是提高博弈算法的能力,但智能的改进不是一蹴而就的,纠错功能的提供只是作为这种无奈的补充。假如黑方的走法确实比参考走法更优,并且我们发现黑方这样走以后红方似乎找不到可以赢棋或者和棋的走法,这时就需要机器帮助我们计算出最佳走法。此外,轮到红方走棋时可能会发现有貌似比参考走法上更优的走法需要验证,这时我们需要在验证失败后能够回退到不同走法的分叉点上。

带有这些特殊需求的游戏界面线框图如下所示:

Comments