用AI来复盘是一件很开心的事情,以前棋输了都不知道自己哪一步走错了,现在AI可以很轻松而且精确的告诉我,真是比请一位职业棋手在身边还有效,着实给普通接触不到职业棋手的业余围棋爱好者带来了福音。


自从两三年前AlphaGo横空出世以来,各种达到或超过职业棋手的AI层出不穷,但比较亲民的寥寥。今天要介绍的Leela是为数不多的一款棋力强、免费而且容易上手使用的一个。Leela的作者是一位来自比利时的计算机专家,大牛+大佬,Gian-Carlo Pascutto,我不确定怎么念,好像网上就简称他GCP。GCP似乎比较低调,几个放着他的研究成果的网站上都找不到关于他个人信息的链接,Google一通才能找到他的全名。GCP早在十几年前就写了象棋AI Sjeng,后来估计倒腾倒腾就变成了围棋AI,也就最早版本的Leela,当时的Leela就实力不俗,赢得过2008年世界计算机围棋比赛的奖项。最近几年,受Deep Mind团队的研究成果启发,Leela在2016年以后也开始强大起来,实力逼近最终在2017年超过职业棋手,据说是19路棋盘第一个在家用普通电脑上运行就能战胜职业棋手的围棋AI程序。


Leela程序很容易获取并安装运行,在官方主页就有下载:https://www.sjeng.org/leela.html。以mac为例,下载链接是:https://www.sjeng.org/dl/Leela_0.11.0.dmg这个Leela程序虽然容易上手使用,但UX方面实在差强人意、有待改进,主要的问题是胜率只能用颜色辨识(颜色越红表示胜率越高)没有数字显示,每一步的手数也不支持打开数字显示,快捷键不太顺手,每一步操作反应比较迟钝有时会卡住,要摆摆变化图需要保存一下当前状态,很是痛苦。Leela的棋力虽高、但肯定是不如Leela Zero这个后来的改进版的。所以我还是推荐Leela Zero,虽然安装运行会稍微费力一点。。。
Leela Zero,算是AlphaGo Zero的山寨版本吧。和Leela的最大区别,如同AlphaGo Zero和AlphaGo的区别一样,它是自己从零开始学围棋,没有使用任何其他棋谱作参考,通过海量自我对局,逐步接近围棋之神的。目前这个程序在mac上需要自己编译后运行。在mac上安装一套编译环境需要安装Command Line Tool。还需要安装brew,https://brew.sh。然后按照github https://github.com/gcp/leela-zero  的说明一步步执行。

git clone https://github.com/gcp/leela-zero
cd leela-zero/src
brew install boost
make
cd ..
curl -O http://zero.sjeng.org/best-network
src/leelaz --weights best-network

以上命令下载了源代码,编译出了leelaz,并下载了best-network这个网络权重文件,应该是机器自我学习的成果物吧。据GCP说用普通电脑让LeelaZero学到AlphaGoZero的水平还需要1700年。。。 问题是这样只能启动一个我至今都不明白怎么用的命令行程序,而且没人会喜欢在命令行界面研究棋谱吧,GCP没有提供图形界面的程序,要好好用上Leela Zero还得使用第三方图形界面辅助程序。。。


于是我找到了lizzie这么个GUI辅助程序:https://github.com/featurecat/lizzie 听上去有点像某位女神的英文名。这玩意要自己编译一下还得依赖maven和java...虽然maven用brew安装一下,java从Oracle那里下载安装一下也就分分钟的事。不知道为啥README说还非得用Leela Zero项目里的next分支编译出来的leelaz,也不知道和master分支有什么区别。问题已经够多的了,不管那么多了。反正经测试,确实非使用next分支不可。费了一番功夫,终于编译了Leela Zero + Lizzie,最后的一个坑是按照Lizzie的README执行了之后并不能成功运行,程序报错退出连个原因也没留下。。。后来我才发现原来是Lizzie的配置文件config.txt(打开一看内容明明是json嘛,为啥叫txt呢。。。)需要修改一下。里面默认指定的网络权重文件不存在。不得不想吐槽一句:大佬少写一句话,累死小白千千万啊。赶紧把前面下载的best-network文件拿来,然后把”network-file”配置改成”best-network”,再次启动Lizzie终于看到了期待已久的能显示胜率数值的棋盘。


如果不想搞事情的话,可以在https://github.com/featurecat/lizzie/releases 直接下载里面的懒人zip包,编译好的leelaz,lizzie和“网络权重”数据包全都在了,这不就是我一开始就梦寐以求的一键全都有功能吗,早知道我折腾前面这么多事情干嘛。。。
最后,为了方便每次运行Lizzie,我写一个快捷脚本放在已经加入到$PATH的/usr/local/bin目录下,取名为简短一点的liz:

#!/bin/bash
pushd lizzie所在路径/lizzie
java -jar "target/lizzie-0.5-shaded.jar"
popd