Permalink: 2016-05-09 by Kai Sun in History tags: gomoku

赛前准备

我原以为和Epifanov Dmitry的约战会是Yixin与人类棋手的第一次比赛,然而5月6日下午我收到了Alexander Bogatirev(下文称他为Alex)的一封邮件,告诉我他们打算在5月7日-9日在圣彼得堡举办俄锦标资格赛的中组织一场Yixin与冠军棋手的比赛。虽然这个比赛通知来得突然,比赛细则(什么时候比,规则是什么,时间设定机制是什么,具体时限是多少,硬件配置是什么)还不清楚,且准备时间上很紧,但这类人对机器的比赛是我很感兴趣的事情,于是还是决定参加一下,并连夜准备了一下程序。次日在facebook上联系到了Alex,问清了比赛时间(莫斯科标准时间9日16:00)、规则(Swap-2)、硬件配置。不过,那时比赛组织方并没确定将采用怎样的时间设定机制以及时限,这为比赛后续埋下了大坑。

由于Alex也是该资格赛的参赛者,他在比赛现场简单检查了一下我发过去的程序后就去比赛了。由于该叮嘱的细节我都在此前给Alex的邮件上详细列出来了,并且程序在我的两台机器上表现都没问题,同时在5月9日前我又没收到Alex的关于程序的后续消息,我乐观地以为比赛会顺利进行。

比赛时间对应于东部时间的早晨9点,为了应对可能的我未预料到的问题,8日我睡得比较早,9日很早就起床了。事后看这是一个正确的决定,早晨5点多我收到了Alex的消息,告诉我程序在时间控制上有问题,总是超时。看了他发给我的设置截图,我意识到沟通上存在问题:

  • 步时和局时分别被设成了10000s和720000s。可能是把s当成了ms?

  • 此前我在邮件中特别强调过,除了时间控制外、线程数等与比赛或硬件相关的参数外,其它都采用默认参数。结果棋风被改成了4。

我指出问题后Alex又试了几次,然而他告诉我时间控制上依旧存在我无法理解的故障,比如他告诉我在20步后Yixin开始无视时间控制并出现超时的情形。我向Alex提议把比赛的时间设定向我说明一下,我把改好的设置文件直接发给他。得到的回复是还没确定……于是Alex向组织方确认到底用什么时间设定,而我只能等他们的回复。一段时间后,Alex告诉我时间会采用60s+45s/move或120s+45s/move,我索性发了个45s/move的设置文件给他们,心想这样总不会再超时了吧。这里补充一点,人类棋手被给予的时间是比机器多的——人每步有60s加时,机器采用45s是因为组织方决定留下15s提供给将机器的输出转到真实棋盘上的操作员。当然少这些时间对Yixin并没有什么问题,毕竟仅相当于Yixin改在3核(比赛方的CPU是个台式机四核i5,4*45/60=3)机器上跑而已。

关于这个时间设定再多说几句。实际上,对于这个时间设定我是非常不爽的,因为在世锦赛中用时往往是120min+30s/move这种规模,我给Yixin的Swap-2的设定的比赛策略也是按照这类时间分配来的,即,不用任何棋谱库,开局的4,5步给足够多的时间(约为整场比赛总时间的1/3~1/6)让Yixin算清楚,以此防止开局中研究。而面对这种60s或120s初始局时,在某些类别,如子比较分散的局面下(后文会提到的人类棋手用到的一个开局就属于这一类),并不能算清楚。

与此同时,人类棋手的比赛也出现了一些问题,一方面,人类棋手的比赛比预想的更费时间,所以人机的比赛开始时间向后拖了一个多小时,另一方面,showme的网络直播出了奇怪的故障,我试了多条网络线路,直播要么黑屏,要么满屏马赛克,组织方表示人机比赛会同时在logic games上直播,由于logic games只有棋盘数据,没有视频流,所以问题应该不大。

因比赛,Alex又离线了一段时间,Alex回来的时候已经10点多了。此次资格赛Alex获得了冠军,所以最后的比赛就是对战Alex,于是Alex肯定不能作为操作员了,而其他人更不熟悉这个支持Swap-2的特殊Yixin版本的用法,这进一步为后续比赛埋了坑。

一波三折

比赛刚开始一会儿就出问题了,组织方Skype找到我,跟我说Yixin还是会超时。我无法理解,他们决定直接把直播镜头转到电脑界面,然后演示给我“超时”的操作步骤,结果在这次演示中,并没有超时发生……组织者似乎认为这种超时是否发生是难以预料的概率性事件,所以虽然给我的演示是正常的,还是向我提出了他们的决定——让Yixin在我的电脑上跑,我作为操作员通过logic games远程把Yixin的着法给出。

一开始他们提出这个请求的时候,我是拒绝的,因为我在大概半个小时后需要开一个小会,我询问是否可以在1小时后开始,对方表示至多等半小时,理由我听得不是很清楚,好像是比赛场地的问题。于是我只好临时取消了会议,然后简单设置下准备通过logic games联线。

Logic games是个俄文的在线对弈平台,尽管他有英文版本,但翻译得不彻底,比如在Swap-2里的交换步骤中的选项在英文版本下依旧是俄文,而Google翻译因为与操作界面有一定冲突,我没有打开。另外在英文版本下,棋盘没有了坐标,给棋子定位也带来一些麻烦(每次动作需要在15秒内完成,开局的几步棋子没有坐标要定位准是有些难度的,尤其是logic games默认界面棋子是落在格子内,而Yixin默认界面棋子是落在交叉线上,二者的对应看起来有些别扭)。因为这些原因,比赛中间有数次重开(比如我不知道Swap-2第二步里“交换”“不交换”分别是哪个按钮)。

对局

比赛中Yixin的主要参数如下:

  • 引擎版本:0.6.17
  • 步时: 45s
  • 棋风: 1
  • 后台思考:开启
  • 线程数:4
  • 分裂深度:6
  • 哈希表大小:21
  • 开局库/数据库:无
测试局(Yixin先手,第三手Alex选择执白):

Alt text

此为测试局,所以人类的表现可能不如正式对局中出色。Alex第6手开始就出现了可观的劣势(Yixin审局为-81分),至18手Yixin的优势已经相当明显,审局分超过200。22手审局分超过300,24手Yixin算出自己必胜。

第1局(Yixin后手,第三手Yixin选择增加两子,第五手Alex选择执黑):

Alt text

这是一个有名的开局,在一年多前我曾和一些朋友讨论过此开局。在不给任何谱的知识前提下,45秒内给出平衡的4,5对于Yixin来说是困难的。实战中Yixin给出的4,5并不理想(深度只有13层),Alex给出黑7后,Yixin算出自己的8是必败的(16层)。之后Alex保持了黑必胜的优势,并至35手取得了胜利。

第2局(Yixin先手,第三手Alex选择增加两子,第五手Yixin选择执白):

Alt text

对于Yixin来说,Alex给出的4,5平衡度在短时间内看是不错的,Yixin第6手给自己的评分是25(17层)。直到16手,Yixin给出的评分都是接近平衡,16手Yixin给自己的评分是13(15层)。然而17手Alex选择了一个在Yixin看来是黑必败的点(12层)。Yixin的判断是正确的,它在一串连续进攻下取得了这局胜利。

后记

此次比赛十分仓促且问题重重,Alex向我解释说这次比赛是一个实验性质的比赛,他们准备在五月下旬举办一场在更长时间设定下的比赛,若会有,但愿此次比赛中出现的种种问题不会重现。

同时,Yixin取得了1:1的结果是出乎意料的:即便45s每步的时限,即便没有开局库/数据库,我也没有预想到Yixin会输1局。当然,从对弈记录也可以看出,如果不借助类似第一局中的特殊开局,人要想对抗Yixin是比较困难的。至于应对这里特殊开局的策略,目前看需要实现一种更可靠的“balance2”的实现方法,或者完成三子开局库的计算。