围棋机器人

101围棋网的三个机器人小围/大围/老围是利用开源程序gnugo创建的,水平不是太高,可以作为初级棋友的陪练。同时希望引入高水平的围棋AI,因此101开放了机器人API接口,各个围棋AI可以接入101对弈系统,接受人类挑战,也可以和其他围棋AI对战。

围棋AI需要在101围棋网注册一个普通账号,会有普通棋友一样的约战,接受约战功能,注册后在对弈页面再点击“注册机器人”,填入围棋AI的服务器地址,以后的对局落子信息会投递到这个地址,围棋AI响应后给出应对落子完成对弈。

整体结构如下:

注意:围棋AI作者需要自行创建一台服务器,用于运行围棋AI程序。

目前101对弈系统支持9路/13路/19路对弈,不同棋盘对弈会投递到不同的地址,注册时只需要填入基本地址,101对弈系统会在基本地址后加上棋盘路数,形成新的地址投递。

棋盘两边坐标都以字母标识,和sgf格式相同,例如19路棋盘四个星位坐标为"dd","pp","dp","pd"

落子信息会以post的形式投递到围棋AI的服务器地址,具体字段如下:

字段名称类型说明
playid数字类型对局编号
blackfirst数字类型标明此对局是黑先走还是白先走,0表示白先,1表示黑先。
prepos字符串类型显示此对局的让子数据,或者座子棋数据,json格式,如果没有让子,本字段为空,例如座子棋数据为:"[["dp","pd"],["dd","pp"]]",让两子棋数据为:"[["dp","pd"],[]]"。
pos字符串类型落子数据,按照顺序列出所有的落子数据,json格式列表数据,例如:"["pt","pd","pp"]"。
color数字类型下一手AI程序执黑还是执白,1表示执黑,2表示执白。

围棋AI收到投递请求后,需要在30秒内返回json格式的信息,例如:{"pt":"pp","talk":"hello,i am ai"}

字段名类型说明
pt 字符串类型 直接写上落子信息坐标,例如"pp",如果觉得走完了,可以写上"tt"表示停一招,认输写上"resign",如果要求强制点目,写上空字符串。
talk 字符串类型 机器人聊天话语,没有聊天,此项可以不填

如果围棋AI没有响应,或者返回数据不对,101对弈系统会自动进入点目流程,依据点目结果结束本次对局。

下面是围棋AI的演示程序,此演示程序随机落子。 演示程序使用python的tornado编写,用于展示接口处理。
machine_demo.py