围棋机器人
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