电脑围棋

1.0 概述

本文旨在向读者介绍电脑围棋领域的状况及 Internet 上的相关资源。

为照顾尚不熟悉围棋的读者,第2部分介绍了围棋的基本常识和规则,熟悉这些的读者可以跳过它,或在必要时参考。

第6部分将告诉读者,由于各自的特点,目前围棋程序的水平与国际象棋程序相比差距极大,有待于进一步投入力量开发;第3部分 给出了其理论和实践的依据,并指出围棋程序是不可能仿照国际象棋程序那样开发的(参见表一)。

第4部分简要回顾了电脑围棋的历史,同时介绍了一些以围棋为对象的学术著作、电脑围棋比赛及结果和一些为围棋程序。

第8部分介绍了有关围棋和电脑围棋的Internet资源,其中包括网上对弈服务器、FTP 站点、邮件表等。

2.0 围棋常识

围棋是一种二人对弈的棋盘智力游戏,没有任何运气成分。它出现在2,500到4,000年前的东方,它在日本、中国(含台湾)和韩国(朝鲜)等国家的地位就如同国际象棋之于西方国家。

围棋的棋盘是由一些经纬线组成的网格点,通常是19 x 19的,称19路棋盘,但9路及13路棋盘也有使用,棋子分黑白两色,黑棋先行,对弈双方轮流落子,棋子就下在网格交叉点上。最后占据交叉点多的一方即为胜者。

2.1 气和提子

与棋子相邻的空点称该棋子的(如图1标L的点)。没有的棋子将被从棋盘上提起,称为提子(如图2中的白子)。提子又称吃棋,是一件很愉快的事,当然对手不见得如此,除此之外,落在棋盘上的棋子是不能移动的。

2.1.1 自尽

如果棋子落下后即处于没有气的状态,即要被提子,称为自尽。这是棋规所不允许的(如图3中的X)。(在应氏规则中允许块棋自尽)

2.2 块棋

同色的棋子在经线或纬线上相邻,称为连接。(如图4)连接在一起的棋子组成了一块棋,当然单一一颗棋子也可以称一块棋块棋是组成它的所有棋子的的总和,(如图5标L的点);也就是说,要提掉一块棋,必须包围它?⒉皇?A HREF="#2.1.1">自尽,因为要先提掉对方的子,它的气就有了。有两眼的块棋是永远不可能被提掉的,(如图9中标E的点),因为对方不可能同时落下两颗棋子填眼,而单在一眼中填子不能提子 就是被禁止的自尽了。

2.3.1 死活

有两眼的棋称为活棋,通常而言,如果即使对方先行也不能被提掉的就是活棋;而即使已方先行也不可能避免被提掉的就是死棋

2.3.2 假眼

有时眼是由两块或更多块棋围成的,这时要看它们之间的连接是否真实;它们之间肯定有一个或多个目前尚不属于已方的连接点,如果这些点都被对方占据,则这块棋围出的眼也会对方占据,是假眼。如果围成眼位的棋至少有一个对方无法占据的空连接点,或至少有两个空连接点,则该眼是真眼因为已方始终有机会将其连接。

2.3.3 Seki

2.4 劫

为了避免无休止的棋着循环,棋规规定对弈者不能奕出使棋局与上一手时相同的着法。通常这种情形发生在劫争的时候。如图10白子落在1位提掉了黑子2,此时由于白1只有1气,也可以在2位被黑提掉,反过来白又可以在1位提回来;这是被禁止的情形,当白1提子后,黑方不能立即着2位,而要在别的地方寻劫(一般是对方需要应付的地方),待对方应劫后再在2位提劫,这就是劫争

2.5 打将

高手有时可以通过打将引导棋局按自己的部署发展,这时他的着手使得对手只有唯一的应手。

2.6 征子

征子是一种吃子的方法,如图12,不管怎么走,黑棋注定要被提掉,因为白1打吃,黑只有2位逃,白再3位打,最后这个梯形延续到棋盘边黑棋被提掉。

2.6.1 引征

当棋子被征时,可以在征子的梯形路线着子接应,使得对方征子失败,称为引征。

2.7 联络

围棋规则中两棋子的连接仅指经纬线上的连接,又称。但实际的棋局中可以有许多连接方式(见图13)如并、关、二间关、尖、飞、大飞等,成为联络。如果两块棋没有联络,则称为开的。

2.8 棋块

两块或多块互相紧密联络的同色块棋组成棋块,如图15中的A和B以及C1、C2、C3和C4。由于互相之间有紧密的联络,它们可以被看作是一块棋。棋块是对局中棋手分析棋局的基本单位,其最重要的属性是它是否是活的,或是否可以做出两个眼,或是可以与一个已有两眼的活棋块联络

2.9 棋势

两块或多块联络松散的同色块棋组成棋势,如图15中的AB棋块与C1C2C3C4棋块组成棋势。这两棋块之间没有对方的棋子,似乎是围成了一块很大的地域,但这并没有保障;所以对于棋手而言将棋势转化为实地是很重要的。而对方侵入这块地域则称为打入

2.10 数棋

当对局完了时,从棋盘上提掉死子,分别数出双方的提子数和围空数之和,多的一方为胜者。

2.11 让子和段级位

围棋有着独特的让子和段级位制度。棋手按棋力分为30级。下过10到15局棋后棋手大致为20级,达到1级以后便是段位了,业余段位是1到6段,职业段位为1到9段。

随着级位的提高,升级越来越难,从20级升到10级需要一年每周下1、2局,再看一些棋书 ,而要达到职业段位的水平,则需要多年的专业训练。职业段位之间的差距相对业余的要小,初段和九段的差距大约相当于业余段位的两段之差。

为平衡高手和下手之间的棋力差距,下手可以被授先。在应氏规则中,授子是由下手先行奕出的若干步棋着,而在中国/日本规则中,授子是有固定位置的。授子数根据棋力的差距而定,例如10级棋手可以对15级棋手授5子。其确定的原则是使得下手对高手的胜率为50%,或可以按每输10子授1子概算。如果使用小棋盘,则授子数相应减少。如9路上授1子相当于13路授2子或19路授1子。

没有授子时,先行的效力大致为5目。下手一般执黑先行。如果对弈双方段级位相当,则先行的黑方要贴还白方5目。在正式比赛中为避免平局,贴目为5目半。中国规则由于采用数子法,应贴2又3/4子。

3.0 围棋编程的挑战

同国际象棋编程相比较,围棋编程领域的发展尚处于初级阶段。在国际象棋的编程研究领域中曾出现过象60年代和70年代时投入了强大的研究力量的情形,在围棋编程领域从来没有过。在两者之间有着本质的区别,使得国际象棋受人青睐成为研究对象,同时,即使也有力量投入围棋编程,其结果也无法赶上国际象棋编程的进步。这里有几大原因,一方面是由于围棋本身的复杂性,另一方面是由于在国际象棋领域取得的编程技术无法恰当地运用于围棋领域。

3.1 围棋与国际象棋的比较

1. 围棋棋子的类型简单,只有1种,而国际象棋则有6种;但围棋的棋盘为19x19,要远远大于国际象棋的8x8棋盘。

2. 棋盘的大小以及着手的相对自由,使得围棋棋局的平均手数大约为300步,大于国际象棋的平均80步。

3. 着手的相对自由,使得每步棋着的选择(分支因子)可以高达平均200个,而国际象棋中由于棋子走步的限制平均只有40个选择;随着棋局的进展,国际象棋棋子减少,使得分支因子降低,而围棋中则没有这种优势。分支因子还影响棋局的各个阶段(布局、中盘和官子)。在国际象棋中, 开局有许多著名体系,通常深达10步之多;而在围棋中,布局种类非常之多,而深度很少有超过3手的。当然,在边角上围棋也有定式可循,但定式的选择仍要考虑周围棋子的配置等等,需要一定的技巧。

4. 围棋与国际象棋棋局都有两种终了的方式:认输和自然终局,国际象棋的终局比较容易判别,就是将死,而在围棋中终局是由双方同时认可的,但初学者又很难判别是否已经没棋可下,所以他们下出的棋局往往比高手之间的要长,围棋程序也会犯同样的毛病。如果按照日本的比目法计算胜负,则多余的着手会因为填在己方的空里或变成对方的提子而减少目数。

5. 围棋和国际象棋的棋子都有一定的威胁度,就国际象棋而言,棋子的威胁度仅是它所能走到的格子,而在围棋中,棋子着下后就不再移动(仅当提子时例外),但可以对棋盘上其他的棋子产生影响,如引征可以改变某块棋的征子关系。

6. 国际象棋的棋局随棋子的移动立即发生变化,而在围棋中,这种变化并不显著,从而需要大容量的记忆分析棋局。即使是一个初学者也可以看出60步以后的征子结果,这是一个很深但很窄的算路。只有最后当棋子被提掉的时候,棋盘的物理状态才发生显著变化。在围棋中,价值30目的棋经常作为交换被提掉,而最终胜负却可能只有2目。

7. 在国际象棋和围棋的棋局中,棋手通常要考虑全局策略和局部战斗两个因素。在国际象棋中,由于存留棋盘上的棋子的数量和质量与棋局形势基本相关,所以在电脑国际象棋中基本并不把全局策略考虑在内。而在围棋中,局部战役的得失与全局的胜败并不完全相关,在开局时,棋手要考虑棋势而不是实地。所以大多数围棋程序都包含一个棋势的估价算法,但除了实战解决无法评价这类算法本身。

8. 综上所述,国际象棋的编程可以通过优秀的评估函数和修剪搜索树解决,而这样的方法在围棋中则行不通,因为后者的分支因子太大,又没有合适的评估函数用于修剪。

9. 人类棋手在国际象棋和围棋中的思维也是不同的。初学者都只能看几步,但在围棋中,类似征子之类的棋形,初学者可以不费力气地一目了然,因为这一连串的着手都是打将。在典型的国际象棋棋局中,专家可以计算出10步左右,但每步只有几种变化而已,在围棋中,每步的变化就非常之多,其中也可能有很深的如征子手段,这样用广度搜索和深度搜索都是无法很好把握的。

10.地平线效应,即在深度搜索取得一个评估之后,如果再深算几步,该评估就会被修正,例如在弃子的战术中。地平线效应在国际象棋领域只在大师级水平中才出现,而在围棋中,即使在初级棋手对局中也有,例如征子。

11. 国际象棋在70年代早期被用来作为人类思维的研究对象,Chase和Simon于1973年表明专家棋手使用的是棋子分级思维;而Reitman1976年的研究结果则表明归于围棋棋手正相反,使用的是棋子交叉思维。确定棋子的联络与分割,是决定棋子死活的关键,Reitman的研究表明,只有到终局,棋子间的关系才能澄清,这一研究结果显示了在围棋编程中使用分级理论产生评价函数可能带来的问题。

12. 在国际象棋和围棋的实际对局中,对手的水平是影响棋局的一大因素。在国际象棋中只有两位旗鼓相当的棋手才可能奕出可观的棋局,而在围棋中,由于存在授子制度,高手的水平可以由授子来抵偿,在这种比赛中,下手总是力图简化棋局,保持优势,而上手就不得不出险着引得对方犯错误;尽管最终的目数可以反映双方的棋力差距,但对局者更多关心的是输赢,宁可少赢也不肯冒险多赢,所以在许多棋局中对手的水平可以决定棋手的战略。棋手需要在各个方面下工夫,而不是偏重某种技巧的原因,这样才能有效地攻击对方的弱点。根据电脑围棋程序对某人的首次对局确定其棋力是通常的做法,同一个人第一局输给了电脑,以后几局很可能都会赢,因为他发现了对手的弱点,而电脑程序则没有任何改变。

3.2 围棋的复杂性

一个有限时间可求解的算法可以应用于现实世界的问题解决,而不能在有限时间求解的算法则称为指数时间算法,这类算法只能应用于非常小的问题。在计算机的有限内存空间中可解的问题称为P-空间可解问题。

研究表明,对任意给定的n路棋盘围棋棋局,确定胜者这一问题是P-空间难解的。 (Lichtenstein and Sipser, 1980)另一项研究还涉及了劫争问题以表明,对任意给定的围棋棋局,确定胜方和选择着手都是指数时间问题。 (Robson, 1983)因此,在解决一些围棋问题时使用模糊算法以取得接近最优解是必要的,而单纯的搜索很快就会导致困难。

在Allis et al. (1991)一文详尽地分析了围棋与其他棋类相比的复杂性,文中定义了两个术语:可求解完全可解;并演示了搜索空间的复杂度决策复杂度的区别。 如果一种棋类在任意棋局中都可以通过程序得到最优解,称为可求解的;如果这一正解可以由人类语言解释,则它是完全可解的。演示是通过一种围棋的抽象模型完成的,该模型规定双方轮流落子或放弃着手,先占据181点的获胜,它具有与围棋相同的搜索空间复杂度,但只要先行一方不放弃着手就肯定会赢,所以没有决策复杂度

Allis et al 就16种棋类按可解与不可解分类给出了其搜索空间复杂度的复对数指标和决策复杂度的对数指标图,图中显示围棋的两项指标都是最复杂的,而且是不可解的。对于围棋与国际象棋的比较,研究结果表明9路棋盘围棋的复杂度与国际象棋近似,搜索空间以10为底的指数为35对50,而19路棋盘围棋要复杂得多,所以如上所述是不可解的。(Allis et al. 1991).

3.3 为什么围棋无法象国际象棋那样编程

国际象棋程序中使用了启发式搜索和评估技术,搜索树是固定深度的,根据对棋局的评估启发修剪,该项技术在国际象棋中应用得很好,因为其棋盘足够小且从本质上更注重局部战术而不是全局战略。

在围棋中评估棋局遇到了在国际象棋中不曾有的问题,围棋与后者相比更注重全局战略。围棋不象国际象棋那样注重单个棋子的得失,而棋势又是在漫长的对局中逐渐形成的,在对局中有着各种各样直接的和间解的战略以赢得胜利,如围取实地、扩张外势、攻击弱子、防守、打入等等。由于棋盘很大,围棋棋局还包含了许多局部定式。如果把国际象棋成为一场战役的话,那么围棋就是一场战争。许多局部战斗的应手都要根据全局战略做出选择,因此棋手必须掌握局部和全局的均衡。

由于棋局评估带来的种种问题,在国际象棋编程中使用的人工智能优先搜索技术在围棋中无法适用。围棋在人工智能和认知科学中更有研究价值。Hans Berliner前国际象棋世界冠军、美国著名棋手、著名国际象棋编程专家曾就围棋说过"... 围棋必将取代国际象棋作为人工智能的研究对象" (Berliner, 1978).

4.0 电脑围棋的历史

  关于围棋编程的著作最早出现于60年代末,最初是纯学术性的,只是把围棋作为某些研究进一步深入的研究对象,而不是试图探索围棋的编程理论。真正开始投入力量开发商业围棋程序还是在个人电脑走入家庭和应氏电脑围棋奖金设立之后被推动起来的。

4.1 学术著作

4.1.1 Zobrist

最早的围棋程序是由Albert Zobrist作为他模式识别专业博士论文的一部分提出的(Zobrist, 1970)我们在此主要涉及与电脑围棋相关的部分。

效果函数

Zobrist引入了效果函数的方法将棋盘分为黑方和白方地域。效果函数计算棋盘上每一个交叉点的数值量,黑子取值+50、白子取值-50而空白点为0;正数效果的点要给其邻接点加+1,同样负数效果点的邻点加-1,这样的算法递归执行4次,将棋盘最终数值化(如图17).

程序由此建立了一个19x19的数组来表达棋盘的状态,包括:
交叉点的状态(黑子、白子还是空)、邻点的黑白子个数(水平的、垂直的和对角方向的)、棋块的棋子数和气数、空白点邻接的空白点以及块棋包含的空和棋子数。

该程序还使用了另一个效果函数来表达棋子自身的效力,它与上述函数相似,但棋子的初值设为+100,正数效果的点对邻点的增量为+3,而负数效果的点为-4,这是由于计算机是执黑方,所以把对手的形势估计得乐观一些。

选择着手

建立内部表达诸侯,程序对棋局进行模式识别在自身的模式库中寻找匹配。模式库中包含着着手及其评估值,得到一个匹配后,就在该点加上它的评估值,在匹配过程中需要使用旋转和对称等技术。最后把取得评估值最高的点选择为着手。Zobrist的程序大致是使用了累加评估值的方式。

Zobrist试图弥补该程序在对局中表现出的弱点,他把棋局分为四个阶段:布局时的边角定式、挺进中腹、防守与打入、官子。为使程序能在棋局都能正常应对,各个阶段使用了不同的模式库。

结果与改进

该程序的另一个改进是限制性计算也即启发搜索,在模式识别中,局部可以深算三步使得程序可以掌握救孤和吃棋、连接和切断、征子、做眼。

Zobrist的程序性能一般,它击败了两个初学者,但对熟练的棋手表现较差。

4.1.2 Ryder

Jon Ryder(Ryder, 1971)的程序是Zobrist研究的深入,同样使用效果函数和累加评估选择着手。但Ryder增加了全局战略和局部战术考虑,并增强了算路的深度,Ryder在短线目标中考虑局部战术而在长线目标中使用全局战略。

由于在围棋中使用完全搜索树是不切合实际的,所以需要有一种方法取而代之,Ryder的程序使用了许多象局部战术分析这样的组合分析方法。

Ryder把围棋视为实地、棋势与避免被吃棋之间的均衡,他将这三者公式化以维护这样的均衡:棋盘组织显示对棋盘区域的控制度、形势判断以选择双方着手最佳方向、棋块分析以确定其安危。

着手选择

着手选择分两层完成,第一层确定所有块块的局部战术状态、识别棋块、棋势并分别进行分析以确定双方的地域以及对对方棋块的威胁度。最后从所有的可能着手中选出15个以备下一层分析。

第二层使用局部战术和朴素的全局战略理论对第一层产生的15个着手进行分析,将两次的分析值相加,取最高值。如果能够确定一个“明显的”好棋,第二层分析可以简单地终止。

Ryder的程序对深算产生的搜索树使用了向前修剪的方法,应用不同的方案决定是否有必要跟踪搜索树的某个分支,也就是说某一着手是否值得考虑。终止搜索的放;方案包括目标块棋已有两眼、逃棋是否长出5气或是使块棋得救。向前修剪的风险在于最佳着手可能在被发现以前就被忽略了。

效果函数

象Zobrist一样Ryder也使用了一个效果函数提供每个棋子对其周围影响度的量化。他的效果函数与Zobrist的类似,也是黑方取正数、白方取负数,某点效果的取值由其邻点的效果传播累加形成。Ryder的效果函数较Zobrist的简单,传播系数是固定的(如图18)

Ryder的效果函数

对某点的效果估计过高或过低都将给判断带来问题,估计过高会使在该处过分注重而因此忽略大局,估计过低则可能被对手抓住要害。最优着手应当是接近效果估计曲线峰值的点。Ryder把棋子的效果视为棋子的局部属性,尽管他也承认在某些情形下棋子可能对距离较远的棋子有影响,例如引征。在这种效果函数无法准确表达的情形中,使用局部战术评估以弥补效果函数的缺点。

联络度是效果函数不能很好评估的一个环节。Ryder定义了两个术语:联络强关联,某点对于某方联络是指该点上是该方的非死子,或指至少有一个该方邻子且没有对方邻子的空白点。完全联络的一个延伸定义为半联络,指一个空白点至少有二个某方邻子及至少一个对方邻点。强关联是指某点由某方子占据或与某方子连接,某点与某子对角线连接且共有至少一个空白点(尖),以及某两子之间只间隔一个空白点(关)这两种情形也被认为是强关联的。棋块就是由一组联络半联络的点组成的。

效果函数部分使用于确定棋势。棋势是由一组联络的点组成,其效果函数不小于程序预定义的阈值,又分为强势与弱势。

程序中使用的局部战术概念包括数气、劫争、征子、眼和假眼。Ryder认为程序中的局部战术能力还需要改进,他称之为“躲闪袭击”。

变量描述

变量描述需要包含以下信息:基本的在计算中需要使用的、重点对象需要多遍重计算的、经常需要多次访问的变量。

棋势是由指针方式表达的,对每个点都维护一个向其所属棋势的指针;而每个棋势都有一个向其所属某点的指针,称为基点,其他点通过基点搜索。

棋盘的全局描述为一个21x21数组(19x19棋盘加上两边框),包含以下点信息:区域指针、弱势指针、强势指针、棋块指针、块棋指针以及状态(黑、白或空)。

结果与改进

Ryder发表的结果只是一局输棋,对手是一位刚刚学会了棋规和基本局部和全局技巧的初学者。作为Ryder研究的主要方面,他发表的结论认为在战术分析上,通过搜索技术已经足以完成与初学者水平相当的着手选择,而且只需略加改进就可以提高程序的局部战术水平。

Ryder提议的进一步改进方案包括搜索初期信息的复用、引征问题和弱势的定义,Ryder指出在处理中占10%时间的棋局阶段分析值得注意。Ryder程序的结果不甚理想,其原因也在于它对于开局、中盘和官子没有一个清晰的区分,因此特别是在官子中使用了不恰当的局部战术,Ryder认为以后的改进应对此加强。

4.1.3 Reitman and Wilcox

Walter Reitman和Bruce Wilcox于1972年开始将围棋作为研究对象,作为研究结果的程序分别命名为Reitman-Wilcox和INTERIM.2。研究中断后Wilcox重写了INTERIM.2程序而产生了一个商业围棋程序NEMESIS。

Reitman和Wilcox应用围棋开始的研究主要集中于人工只能领域,包括模式识别(Reitman et al., 1978; Reitman and Wilcox, 1975,1978)、规划(Reitman and Wilcox, 1974)以及人类在围棋中的感觉与认知过程再现。事实上,程序的目的是与人类棋手对弈并将结果记录事后由高手复盘以发现人类的思维特点。

根据Reitman和Wilcox围棋程序的三个基本方面是认知、知识和综合(Wilcox, 1988)。他们在程序中尽量加入描述以获得与熟练棋手相当的认知水平,识别并存储了两类围棋知识:着手决策知识包括如何吃棋、如何围空等;形势判断知识包括确定棋块的属性及相关的量化分析等;通过适当的控制结构综合程序的认知和知识以选择着手。

INTERIM.2程序建立并维护了一个选择更新、多层网络的描述,Reitman和Wilc

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值