# 电脑围棋领域的研究概述

Janet Wiles

Departments of Computer Science and Psychology The University of Queensland, QLD 4072, Australia

（原文也在增补中，故本译文也是不完全的，但将随原著的变动而变动）。

1.0 概述

2.0 围棋常识
2.1 气与提子
2.1.1 自尽
2.2 块棋
2.3
2.3.1 死活
2.3.2 假眼
2.3.3 Seki
2.4
2.5 打将
2.6 征子
2.6.1 印征
2.7 联络
2.8 棋块
2.9 棋势
2.10 数棋
2.11 让子与段级位

3.0 围棋编程的挑战
3.1 围棋与国际象棋的比较
3.2 围棋的复杂性
3.3 为什么围棋无法象国际象棋那样编程

4.0 电脑围棋的历史
4.1 学术著作
4.1.1 Zobrist
4.1.2 Ryder
4.1.3 Reitman and Wilcox
4.1.4 其他
4.2 程序
4.2.1 The Many Faces of Go
4.2.1.1 G2
4.2.1.2 Cosmos
4.2.1.3 其他
4.2.2 Go4++
4.2.2.1 着手选择
4.2.2.2 评估函数
4.2.2.3 性能和用时
4.2.3 Handtalk（手谈）
4.3 电脑围棋比赛
4.3.1 应氏杯

5.0 围棋程序的结构

6.0 目前程序的性能
6.1 程序之间的对抗
6.2 人机对抗

7.0 今后在性能上的改善

8.0 Internet上围棋和电脑围棋资源
8.1 电脑围棋资源
8.1.1 匿名 FTP Archive 及镜像站点
8.1.2 The Internet Go Server (IGS)
8.1.3 棋局存储格式
8.1.4 The Computer-Go Mailing List
8.1.6 电脑围棋比赛和结果
8.1.7 电脑围棋大全
8.1.8 棋局库
8.2 围棋资源
8.2.1 棋规，入门指南
8.2.2 围棋入门指南及演示
8.2.3 The Go News Group
8.2.4 围棋FAQ

9.0 结论

2.3.3 Seki

## 3.0 围棋编程的挑战

### 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 围棋的复杂性

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

## 4.0 电脑围棋的历史

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

### 4.1 学术著作

#### 4.1.1 Zobrist

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

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

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

#### 4.1.2 Ryder

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

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

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

Ryder的效果函数

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)以及人类在围棋中的感觉与认知过程再现。事实上，程序的目的是与人类棋手对弈并将结果记录事后由高手复盘以发现人类的思维特点。

INTERIM.2程序建立并维护了一个选择更新、多层网络的描述，Reitman和Wilcox介绍这是模拟熟练围棋棋手思维建立的。专家和评论员对于选择着手的分析是分层的，算路不是涉及全盘的，而是目标驱动的。

INTERIM.2程序

INTERIM.2采用了汇总-回馈技术(Wilcox, 1988)。信息中包含低层对象的描述如块棋，被汇总并在高层描述如棋块中使用，程序在高层对象中选取重点进行决策，决策结果回馈并修正低层对象的描述。

INTERIM.2程序的流控分别在MOVE和REFLEX之间切换，当落子后MOVE选择更新GAMEMAP受影响的组成因素，REFLEX负责在排序表中选择着手。

PROBE可以用来解决一个特定的问题并给出一个适当的着手，最初的着手选择后可以得到一个假定落子后的棋局形势。 PROBE根据这一假定继续计算下一手，知道得到该问题的结果。如果结果是成功的PROBE返回初始着手，否则推翻假定重新计算，在非限制性的计算中，要 遍历所有的着手以求的正解。但在PROBE中不是所有的着手都计算，每方的失败都被限制在2到3次以返回失败结果。

INTERIM.2 在描述棋局时维护了许多数据结构。点状态（黑、白或空）用以确定块棋，块棋的一个基本属性是死活。INTERIM.2可以识别尖、关、 二间关、小飞、大飞等联络，联络又分为普通联络、可能联络和死棋联络。联络的基本属性包括它们是否能连接或切断，是否与对方联络交叉，及建立联络的原因， 还可识别盘边四线以内的特殊联络。分界线即长距离的联络用于棋形评估及着手选择，不可能被切断的几块棋可以认为是成块棋形，而相互联络的块棋称为棋块，由 块棋、块棋联络及盘边围成的包含空点和对方死子的区域称为封闭区域。着手的动机也记录下来以增强选择水平并便于调试。

Reitman和Wilcox认为，局部棋形及行棋次序是围棋的一个基本方面，优秀的棋手掌握各种普通棋形的行棋次序，如联络的攻防等。透镜就是设计用以此类的模式库。

INTERIM.2程序的3个对局结果在Reitman & Wilcox (1978)中发表，其中两局分别战胜了22级和34级棋手，一局输给了一位4级棋手，由此计算得出INTERIM.2程序的级位为27级。

Reitman和Wilcox对INTERIM.2程序首次模拟人类对弈的结果非常满意。它弈得较为保守，防守多于攻击，它防守得很好，除了程序错误外唯一被吃棋的情况是几块棋同时被攻击的时候。

#### 4.1.4 其他学术著作

Lehner

Paul Lehner是Wilcox的学生，他在围棋战略规划领域获取了科学博士学位(Lehner, 1981) ，他的著作是Wilcox曾发现这在围棋棋手中经常表现出的基于替代搜索(Kerwin and Wilcox, 1973)。

Stoutamire

David Stoutamire (1991)以围棋为对象研究机器学习，是通过专家知识库获取着手选择而不是运用围棋战术/战略知识组合。Stoutamire接着开发了一种名为模式优 先的分类技术以自动获取好棋的模式表达；由于模式库呈指数增长，还开发的一个补救程序在内存需求增加时降级处理。

Sander

Kyu的数据结构是基于块棋、棋块和棋势的联络记录，从棋盘上的任意点都可以访问其所属或影响的块棋、棋块和棋势。在每个棋步之后，数据结构就相应改变，这种改变是从低到高的，即从点到块、从块到群再从群到势。

Kyu中引用的结构是Sander根据多层结构数据表达和分层组织规划系统综合得到的，将战略与目标紧密地相结合，他还认为这样的结构也可以应用在围棋以外的各种对象。

Friedenbach

Kenneth Friedenbach以围棋为对象研究感觉和认知在解决复杂问题中的交互作用(Friedenbach, 1988)，他基于图论将层次抽象化并应用于围棋。他之所以使用围棋作为研究对象是因为其理念与多层组织相关。

Friedenbach的感觉-认知模型包括三个部分，首先是包含五层的静态组织：棋盘点、同类点块、相关块群、松散群（势）和全局的属性摘要；其次是对由于棋局进展而产生的结构变化的分析层次；最后是各种分析的综合考虑。

Friedenbach 用三种条件规定一个分析：启动条件、终止条件和继续条件。以战术分析为例，其启动条件是有一少于三气的块棋，终止条件是所有块棋都至少有三气；其继续条件 包括打吃提子和防守方的新增棋子，在分析过程中如果一个着手导致了气数的变化，则需要重新分析。

### 4.2 程序

#### 4.2.1 The Many Faces of Go

The Many Faces of Go (MFG)是目前最好的商业围棋程序之一。David Fotland从1981年起开始利用业余时间编程围棋并于1990年发表了MFG。Fotland此后还不断的改进MFG并在电脑围棋邮件列表中经常就 电脑围棋编程和MFG发表论题。MFG发展为两个著名的程序：G2和Cosmos。

4.2.1.1 G2

Fotland 的第一个围棋程序使用辐射效果函数确定边界。不幸的是，它很容易被一个简单的收气算法所击败，于是他又设计了G2。G2的内部结构分为数据结构、战术分析 和着手选择(Fotland, 1986)。G2使用了全盘考虑逐一评估有效着手并侧重战略部署，最后选择最高估值的着手。

### 数据结构

G2 中的大多数代码是用来更新数据结构，棋子占据点（称格）并组织成块棋（称群）最后形成棋块（称大群）。数据与盘上每点相联系，包括到最近纵横边界的距离、 邻接点和对角点列表、块棋指针、气数及其列表、邻接点棋子颜色（黑、白或混合）、效果函数以及各个方向的最近邻接点。

G2识别的联络棋形包括单关、二间关、尖和小飞，联络数据包括其所属块棋、颜色、位置和状态。

## 4.2.1.2 Cosmos

Fotland converted G2 into Cosmos in 1988. The main difference between Cosmos and G2 was that instead of evaluating all legal moves, only suggested moves were evaluated. This transition was achieved by increasing the number of move suggestors to over 250. Quiescent search was added and the connection, eye, and territory evaluations were made more accurate (Fotland, 1996).

### Data Structures

The data structures used in Comos were basically the same as those used in G2. The eye information included the number of eyes achievable in gote, the number of eyes achievable in sente, the number of eyes achievable if the opponent moved twice, a list of vital points, and eye type. The information contained in the data structures was updated either incrementally (e.g., lists of liberties) or after every move (e.g., influence).

### Tactician

Essentially, Cosmos had the same tactician as G2 but better move generation and sorting. In Cosmos, the tactician was only used to determine dead and threatened strings by trying to capture them. Its parameters were maximum liberty count, maximum, depth, and maximum search size. The maximum liberty count was 4, and therefore as for G2, strings with more than 4 liberties were assumed to avoid capture.The maximum depth allowed was 100. The search size determined the playing level (Stoutamire, 1991) and since forcing moves were not counted, ladders could be accurately read even at low playing levels.

### Influence Function

Territory was determined by radiating positive influence from alive groups and negative influence from dead groups. Radiated influence did not pass through stones or connections and was inversely proportional to distance.

### Board Evaluation

Life and death of groups was the primary concern dealt with by the evaluation process. Board positions were evaluated by a similar process to that used in G2 with the addition of quiescent search.

The tactician was used to determine dead and threatened strings (those that could be captured if they moved second) and whether the stones at the diagonal of eyes could be captured. This information was useful in identifying unbreakable connections and forming strings into groups.

Eyes were analysed to determine their potential and then allocated to groups. False eyes were identified by checking the diagonals of eyes and some dead shapes were also known by Cosmos. Any group with enough eyespace to make two eyes was considered to be alive. Potential eye space could be gained by extensions along the edge, possible connections, being adjacent to a threatened enemy group, and by controlling territory which was not already considered to be an eye.

There were 25 values that described a groups strength in terms of its life and death status. The values were divided into five main categories which included very alive, alive, unsettled, weak and dead. Determining the strength of a group included considering potential connections, potential eyes, and potential extensions along the edge. Positive influence was radiated from alive groups and negative influence was radiated from dead groups with black and white influence being maintained separately.

Weak groups which were contacted by the influence from friendly alive groups were considered not to be surrounded. Weak groups were further divided into those that could run and fight and those which would almost certainly die.

In general, board points were scored according to the radiated influence values. However, occupied board points, board points adjacent to a stone and board points between a stone and an edge were scored differently. Unsettled groups were scored according to who as to play next.

### Move Selection

Cosmos had over 250 rules that suggested moves which included fuseki moves (including shimari, kakari and joseki moves), edge moves, playing in the centre, playing safe when ahead of opponent, "squirming" around when behind opponent, pattern matching, saving weak friendly groups (including making eyes, running, or fighting semeais), killing weak enemy groups, cutting, connecting, contact fights, ko threats, and filling dame. Cosmos had a joseki library which contained around 5000 suggested joseki moves and a pattern database which had 60 patterns which were 5 x 5 in size. Whenever a match was made, the rule (code) associated with the pattern was applied (executed) and would then suggest a move. The addition of extra moves to be suggested could easily be accomplished by the addition of new move suggestor rules or the addition of patterns.

The rules would supply a guess value (probable evaluation of the move), bonus value, minimum aliveness value, and would indicate which groups were being attacked or defended if any. The moves were sorted by their guess values and, depending on playing level, a certain number were "played". Moves could be rejected before being evaluated if they did not "apply". A move applied if it accomplished what it was intended to do: if a move was intended to defend a group and the group ended up weaker than it started the move was rejected. Surviving moves were awarded a sente bonus if they achieved sente. The position resulting from the move was then evaluated. The evaluation score, the sente bonus and the rule bonus were summed together and the highest scoring move was selected as the next move.

### Size, Performance and Timeline

It took Fotland nine months to compress G2 down to 512 k and add a new user interface. In 1988 Cosmos was released by Ishi Press for IBM-PC as Cosmos, The Computer Go Partner and was released a second time in 1989. Due to the amount of time spent on the user interface, Fotland was unable to devote sufficient time to improving Cosmos' playing level and its performance in various world computer Go championships was modest coming 8th in 1988 and 7th in 1989 (Fotland, 1996).

## 4.2.1.3 Many Faces of Go

After a rewrite of the user interface and addition of professional graphics and new features, Cosmos was released as The Many Faces of Go in 1990. Additions to MFG included a limited full board lookahead capability, consideration of the value of sente, and a strategy function which is used to focus attention on the important areas of the board and to identify urgent moves. The number of patterns in both the joseki and pattern databases were increased. The pattern database was also improved by increasing the pattern size from 5x5 to 8x8, by storing many suggested moves for each pattern in a move tree (rather than just one per pattern as for Cosmos), and by a complete rewrite which encompassed algorithms, code, and data structures and lead to an increase in speed (Fotland, 1996).

### Data Structures

The dynamic data describing a board position is stored in three classes of data structures: incremental, locally recalculated, and globally recalculated. The data in the incremental data structures is updated upon addition or removal of a stone and includes low level information such as lists of empty points, number of liberties etc. Locally recalculated data is updated as it is needed i.e., it is only updated for regions of the board which have been affected by a particular move or move sequence, and includes connection strength, and eyes. Globally recalculated data is updated for the whole board and includes group strength and influence. The locally and globally recalculated data structures are maintained by the evaluation function.

The dynamic data is stored globally and is generated progressively in several passes of increasing abstraction. The dynamic data used in MFG includes point environment, string data, connection data, eye data, potential eye data, group data, territory, and score.

An instance of the connection data structure stores information pertaining to connectivity between two strings. Each connection has a list connection points i.e., a liberty of one string which is no more than three points away from the other string. Thus, the connection recognised by MFG include hane, one point jump (ikken tobi), knights move (kogeima), two point jump (nikken tobi), large knights move (ogeima), three point jump, and bent three point. Other special connections near the board edge are handled through the pattern database. The data stored in the connection data structure includes the strings involved in the connection(s), the number of and lists of one, two and three point connections (i.e., as measured from the connection points), the type of each connection, and the strength of each connection (e.g., already cut, cuttable, shared connection, connected with aji, connected solidly). Other than the type and strength data which is stored in a locally recalculated data structure, the connection data is stored in an incremental data structure.

The eye data structure records information pertaining to either a block of empty point or dead enemy strings which are partially or completely enclosed by friendly stones. Data stored in the eye data structure includes colour, a list of the points in the eye, vital points, and eye type (e.g., one point, two point, line eye, big eye, and dead group eye). The number of eyes (to a resolution of 1/8 of an eye) achievable under various conditions were recorded including the number of eyes if opponent moves twice, number of eyes if opponent moves next, and number of eyes if program moves next. A board point can only be recorded as belonging to one eye. The eye data structure is a locally recalculated data structure since eye data does not lend itself to incremental update. In hindsight, Fotland says that a pattern based approach to recognizing eyes would be preferable (Fotland, 1993).

The evaluation of group strength and the generation of attacking and defending moves involves identifying potential eye space and running points. The potential eye data structure contains type, value and location data for potential eyes. An examples of data stored in the potential eye data structure is "extend along edge" (type), value is number of new points of eye space, and location is the liberty to extend from. Running points are stored by type (e.g., running towards friendly/unfriendly stones) in several different lists. Potential eyes and running points are stored in a globally recalculated data structure.

### Tactician

Every string with three or less liberties and many strings with four liberties are read by the tactician. Each string is read twice, once with White moving first and once with Black moving first. The tactician determines whether a string is captured (i.e., can not live even if it moves first), threatened (i.e., it lives if it moves first and dies if it moves second), or stable (i.e., lives regardless of who moves next). The tactician relies on simple heuristics concerned with the number of liberties and connectivity; pattern matching is not used in the tactician.

The tactician has two separate move generators; one to generate attacking moves and one to generate defensive moves. The moves suggested by the move generators are sorted according to criteria which include second order liberties, cut points, and simple eye shapes. Once sorted, an alpha-beta depth-first search is employed with the performance of the search depending on the quality of the move sorting (Fotland, cgm1 5 Mar. 1993).

Tactical searches are goal directed and are limited to a maximum number of nodes. For string captures this is around 100, however, when only one move is suggested, it is not counted towards the node limit. In this way, ladders can be read without problems (Fotland, cgm1 14 Oct. 1993). The number of nodes for a search are allocated to the branches according to the value given to the moves by the first ply move generator and thus different branches may end at different depths. The branching factor at each successive ply is progressively constrained by the tactician. The branching factor falls from five at the first ply to one or two by the fifth ply.

Since the data structures in MFG are separated into incremental, locally recalculated and globally recalculated, low level local tactical searches can be executed quickly by only updating the incremental data structures. However, the possible goals of such a search are limited since the high level data structures are not recalculated. It is not possible, for example, for MFG to search for x liberties and two eyes (Fotland, cgm1 3 Nov. 1993).

The tactician is used to read connections and eyes. A cutting stone can be examined by the tactician to determine whether or not it will be captured. Stones on the diagonal of eyes can be examined to determine whether they can be captured. These types of search do not exceed around 12 ply since the program actually plays worse if more plies are considered (Fotland, 1996).

MFG uses caching to reduce the amount of time spent reading. Since strings are read twice, tactical results related to eyes, capture or threat, and cuts are cached rather than re-evaluated. Life and death analysis are cached as trees since they are smaller than the trees which would result from tactical searches (Fotland, cgm4 16 Aug. 1994).

### Influence Function

The influence function radiates influence which is inversely proportional to distance. Influence is radiated to a fixed maximum distance of nine although when lower playing levels are chosen, the distance is smaller. Stones and connection impede the radiation of influence. Black and White influence are radiated separately (i.e, they are not summed together to give a single value for each board point) so that their relative values can be compared. Dead stones radiate negative influence and thus, since Black and White influence is maintained separately, dead stones reduce their own influence rather than increase their opponents influence. The initial influence value radiated from a stone depends on its strength.

Influence is not used to determine group connectivity. The use of influence in MFG includes determining thickness and territory, identifying surrounded groups, and generating moyo building or reducing moves. Another way in which influence is used is to determine a group's running ability. A group's ability to run towards a liberty depends on the relative values of friendly and unfriendly influence nearby. The sum of a group's ability to run toward each of its liberties determines its running ability whilst the gradient of the influence determines the direction in which it should run.

### Evaluation

Board positions are evaluated in a multiple pass process. The evaluation function consists of many components which include the tactical analyser and evaluators for connections, eyes, group strength, and territory. A score for the position being evaluated is achieved by assigning a value between -50 and +50 to each board point to indicate the level of Black or White control exerted on them. The overall score for the board position is the sum of these values for each board point.

In order to try and overcome the difficulties associated with the horizon effect, Fotland chose to use quiescent search rather than modify the evaluation function. In quiescent search, positions are evaluated when they become quiet rather than when they are in a state of flux (e.g., such as in the middle of a piece exchange in chess). Positions which are not quiet are characterised by oscillations in the evaluation values returned for successive moves which makes it difficult to make good decisions based on the evaluations. MFG uses quiescent search as part of the evaluation function for full board evaluation to overcome this problem by either calling itself recursively (i.e., generating further moves) until a position becomes quiet or by using patterns suggested as obvious local answers to make the position quiet. MFG will generate up to six plies of moves in a quiescent search which improves its performance by up to four stones (Fotland, cgm1 30 Sep. 1993).

### Move Suggestion

Moves are suggested by a rule-based expert system and include fuseki (e.g. shimari, kakari, and joseki moves), moves on the edge (e.g., invasions and extensions), playing in the centre, conservative play when ahead, risky play when behind, pattern matching (e.g., cutting and connecting, surrounding and escaping, invasion and defence, endgame, killing and saving groups, and shape-based moves), group defensive moves (e.g., making eyes, running, and fighting semeais), contact fights (e.g., blocking, extending for liberties, and hane), ko threats, and dame.

A limited form of full board lookahead is achieved by storing move sequences in the pattern and joseki databases. Move sequences attached to patterns in the pattern and joseki databases are played onto the board and evaluated at their endpoints. Thus if a particular joseki is suggested as appropriate, the stones in that sequence are played and the resulting board position is evaluated. This enables MFG to "play" to the end of a lookahead sequence and minimax the score returned by the evaluation function for the resulting board position.

### Pattern Database

Each pattern in the pattern database has a a move tree associated with it. The pattern database contains around 1200 patterns of size 8x8 and around 6900 suggested moves with the average number of moves stored for each pattern being about 5.

Each point in a pattern is marked as black, white, empty, white or empty, black or empty, black or white, or anything (i.e., do not care). Patterns are categorised according to whether they are in the middle of the board or whether they contain edges and/or corners.

A successful match of a pattern depends on both matching the stones in the pattern with those on the board and matching any attributes associated with the pattern. Each pattern has as many as 10 attributes which pertain to stones and include whether they were dead or alive, minimum number of liberties, and connectivity between stones.

To match over a 1000 patterns on a 19x19 board in 16 different orientations requires around 3 million primitive operations. Since performance is a big issue, the patterns are compiled into a bit array which facilitates fast bit-parallel comparisons. By using an 8-bit hash function and bit-wise operations, the number of primitive operations is reduced to around 350000. This number of operations still takes enough time to make it too expensive to match all patterns more than once per move.

Patterns from the pattern database are evaluated after being played on the board in their entirety i.e., they are evaluated at the endpoints of their move trees. A small subset of patterns are used to read local sequences based on shape. Fotland has recently begun evaluating the strength of one point jump connection using patterns (Fotland, 1996).

A fast pattern matcher is necessary for a strong Go program according to Fotland. Pattern matching can be used to suggest and sort moves, and to classify connections and eyes. Reading is employed to determine whether eyes are false. Pattern matching on its own is not adequate for life and death and group strength determination (Fotland, cgm1 8 Apr. 1993). The eye and connection patterns are hand coded decision trees.

One method that Fotland tried to increase the number of patterns in the pattern database was to take them from professional games.When replaying a professional game, if MFG didn't consider the move played by a professional or the move played was low on the suggestion list, Fotland would manually cut-and-paste an 8x8 section from the game into the pattern database using a self-written graphics pattern database editor. Fotland discontinued this method since most of the missed moves were tactical (i.e., based on read-out not shape) or depended on a larger context than the 8x8 section that was placed in the pattern database. Fotland found that the cut-and-paste approach to patterns was more profitable from even games played on the IGS (Fotland, cgm1 13 Jan. 1994).

### Joseki Database

The joseki database contains around 45000 moves. Joseki sequences are stored as directed acyclic graphs (i.e., they contain no loops) having empty corners at their roots. Moves in a joseki sequence can be one of several types including urgent, complex, trick, and bad. The urgent move have priority whilst the complex and trick moves are only played if MFG is behind. The bad moves are not for the program to play, rather they are used by the program to know how to respond to bad moves played by its opponent.

Joseki patterns are evaluated by being played on the board in their entirety and evaluating the resulting board position. MFG selects joseki sequences that are appropriate given the status of the other corners (Fotland, 1993).

### Strategy

A strategy function is used to focus attention on important areas of the board before each move (Fotland, 1993). The dynamic data is examined to determine what phase the game is in, the relative score, the value of taking sente, and whether there are any urgent offensive or defensive moves that need to be made.

Urgent offensive and defensive moves are examined initially and if sufficiently urgent are played without any further considerations. Urgent moves can be suggested by the pattern matcher or by examination of groups which are determined to need urgent attention. Friendly groups which need urgent defence include big groups and cutting groups. Opposition groups which need urgent attack include big groups, cutting groups, and groups adjacent to friendly groups needing urgent defence.

Move suggestion is affected by the phase that the game is in. Certain rules will only fire in certain phases of the game. The fuseki phase lasts until joseki sequences have been pursued in all the corners. The middle game lasts until at least move 120 and MFG enters the end game when there are no unsettled groups on the board. Transition between middle game and end game phases may occur many times during a game.

The types of moves suggested are also affected by the relative score. MFG plays more conservatively when it is far ahead of its opponent and makes unsound invasions when it is far behind its opponent. The relative score is classified into many states including "way ahead" (over 40 points), "ahead (20 - 40 points), "about even", "behind" (over 10 points), and "way behind" (over 20 points).

### Move Selection

Since the evaluation function is very slow (Fotland, cgm4 16 Aug. 1994), a limit is placed on the number of full board evaluations which can be performed each move depending on the playing level. MFG can only look at 5 to 10 moves in detail (depending on playing level) before selecting the move it finally plays. A safeguard against errors in the evaluation function is that only reasonable moves are suggested for full board evaluation (Fotland, 1993).

By employing the strategy function, the move suggestion expert system, and the joseki and pattern databases, MFG fully examines a small number of moves, playing the one which receives the highest score from the evaluation function.

The score returned from a full board evaluation is also modified by the addition of sente if applicable. Thus if MFG plays a sente move, the value of sente is added to the evaluation for the resulting position. The value of sente varies from 7 points during the fuseki to 1 or 2 points in the endgame and is determined by the strategy function.

### Size, Performance and Timeline

With some help from Ishi Press and a professional artist, Fotland rewrote Cosmos' user interface and released it as MFG in 1990. Until the present time (July 1996), MFG has had 3 releases with various improvements. MFG contains around 40000 lines of C code with around another 20000 lines of user interface code.

MFG has performed well in various world computer Go championships including 4th in 1993, 2nd in 1994, and 3rd in 1995. According to Fotland, MFG gains about one stone in strength each year (Fotland, 1996). MFG plays on both the IGS and the NNGS as ManyFaces. MFG participates in the NNGS rating scheme and was rated 9 kyu (as at July 1996). It was also awarded an 8 kyu diploma from the Nihon Ki-in in Japan based on its performance against a 1 dan amateur at 9 stones and a sample play against a professional in September 1995 (Fotland, 1996).

## 4.2.2 Go4++

Micheal Reiss started writing Go programs in 1983 and his current program, Go4++, has evolved from various predecessors over that time. Reiss has met with some success in computer Go competitions and Go4++ came 2nd in both the 1st and 2nd FOST cups.

Reiss' programming philosophy is to use simple algorithms on a large amount of data rather than complex algorithms on a small amount of data. Go4++ calculates everything from first principles; complex concepts are calculated from simpler concepts which are in turn functions of even simpler concepts. Thus, Go4++ does not have an elaborate rule-based expert system at its core. A positive consequence of this approach is that Reiss' relatively weak ranking (2 kyu) compared to other top Go programmers is not a deficit. It also means that Go4++ usually responds well to the strange moves (by human standards) that are quite often played by computer Go programs and which are difficult to foresee when designing a rule-based system. The major drawback of this approach is that it is computation intensive and requires a powerful computer.

At the foundation of Go4++ is a massive amount of connectivity data from which almost everything else is eventually derived. Go4++ selects a move by first generating about 50 candidate moves that are analyzed by an evaluation function which estimates territory. The move scoring the highest evaluation is played as the next move. Thus, Go4++ uses 1 ply global lookahead although tactical lookahead and search is used in evaluating each move.

## 4.2.2.1 Candidate Move Generation

Candidate moves are generated by a process of pattern matching to determine the best 50 moves to examine in depth. Go4++ has around 15 high level patterns which include terms for the probability of an eye, safety, and territorial value. Whenever a match is made, the board point(s) suggested as good places to play have an appropriate value added to them. The 50 highest scoring board points are then examined by the evaluation function. The board point which receives the highest score from the evaluation function is played as the next move.

In some circumstances, Go4++ effectively evaluates more than 50 candidate moves per turn. Pattern matching is not applied to regions of the board where the stone safety (see Stone Safety in section 4.2.2.2) and territory (see Territory in section 4.2.2.2) do not differ from those of the previous move. Thus after evaluating the 50 highest scoring board points after pattern matching, the next move is selected from the combined set of evaluation scores of the 50 board points just considered and the evaluation scores of any board points in the undisturbed regions which were considered during the selection of the previous move.

## 4.2.2.2 Evaluation Function

The evaluation function is a six step process: 1. a connectivity probability map is generated, 2. groups are determined, 3. eye space is determined from which individual eyes are identified, 4. the safety of each stone is determined, 5. a radiation function combines the stone safety data and connectivity probability map to radiate safety to empty points, and 6. territory is determined. Reiss describes the evaluation function as pessimistic since whenever it is applicable, the evaluation function considers that the opponent is the next to move.

### Connectivity Probability Map

Each time a hypothetical move is played on the board, a connectivity probability map for all friendly and opponent stones (including the hypothetical stone) is generated and stored. The connectivity probability map for a stone contains the probability of connecting to nearby friendly stones already on the board or to an empty point if it was occupied by a friendly stone. Stones and empty points which can be reached directly (nobi), by a diagonal move (kosumi link), a one point jump (ikken-tobi link), a two point jump (nikken-tobi link), a small knight's move (kogeima link), or a large knight's move (ogeima link) are examined (total of 32 possible points).

The probability of connecting two stones is calculated empirically by playing out the sequences of moves needed to determine whether the stones can be connected or whether the opponent can cut them. This process requires the use of lookahead, particularly when ladders are generated by cutting moves (e.g., cutting a kogeima link generates two ladders, one for each cutting point). If all possible cutting stones are captured, then the probability of connection is 100%. However, if the cutting stones can not be captured, a hand-tuned algorithm estimates the connection probability.

A massive amount of data is generated in calculating the probability map for each stone on the board for every hypothetical stone being evaluated. The process is very computationally expensive and requires a powerful computer (Go4++ currently runs on a Pentium-Pro 200).

### Group Determination

Stones and strings are catalogued into groups: any stones which are 100% connected are considered groups. A tactical search on all strings with less than 4 liberties is used to determine which strings are definitely dead. Dead strings are not included as part of any group.

### Eye Identification

Identifying eyes is achieved in a two step process: 1. eye space is determined, and 2. individual eyes are identified from the eye space.

A floodfill type algorithm is used to identify contiguous regions in which opponent connectivity probability is low. Points in those regions whose 8 neighbouring points are mostly clear of opponent connectivity probability are considered to be eye space.

Individual eyes within a groups eye space are identified by shape. There are several grades of eyes with the grade being a function of the opponent's connectivity map. Eyes with a grade above a certain level (see Stone Safety below) are considered to be true eyes.

### Stone Safety

The safety of each group is determined by the number of true eyes it has. The safety process is repeated 5 times; each successive pass is more pessimistic about which points will eventually become true eyes (i.e., the threshold is raised for selecting which grade of eyes will eventually become true eyes). The final safety value for a group is the average of its safety scores on each of the 5 passes.

The safety value for each stone is radiated to the nearby empty points in proportion to the connectivity probability map for that stone. The inverse of a stones safety (100% - safety) is radiated in the same manner and contributes to the opponents radiated value i.e., dead stones radiated full opponent safety. Black and white radiation (including inverse radiation) is summed at each empty point.

### Territory

Black and white territory is estimated from the radiation values of the empty points. The difference between black and white territory is returned as the evaluation of the hypothetical move for which it was generated.

## 4.2.2.3 Performance and Timeline

Reiss' Go skill has progressed from 10kyu in 1987 to 4 kyu in 1992 to 2 kyu in 1996. Reiss has programmed full-time on Go4++ for about the last year (1996) and also programmed full-time for one and a half years around 1986. Other than for these two periods since starting Go programming in 1983, Reiss has programmed part-time with the most effort usually expended in the two months leading up to a competition.

There have been many commercial releases of Reiss' programs by Oxford Softworks with another soon to follow. Notable releases have been Go Player Professional and an updated windows version, Go Professional II, released in Japan.

Reiss characterized Go4++ as the weakest of the current strong programs at tactical situations requiring life and death analysis although it is good at creating moyos and gaining territory in the middle and endgame. Since Go4++ tends to play well in the centre of the board, Prof. Chen played 200 games against Go4++ in an attempt to test modifications to Handtalk which were designed at playing better in the centre.

According to Reiss, other weaknesses are the absence of global lookahead, lack of a concept of "shape", and the reluctance of Go4++ to invade. Since the evaluation function pessimistically considers that the opponent moves next during tactical searches, Go4++ does not usually evaluate the likelihood of invading stones forming eyes as being favourable. To compensate for not invading well, Go4++ always plays it first move at the 3,3 point and also tries to live in as many places as possible to stop its opponent creating moyos early.

Reiss uses many empirically hand-tuned algorithms within Go4++ although no learning algorithms are used. Carefully crafted changes to these algorithms can improve the strength of Go4++ e.g., by making the connection algorithm more accurate, eye and territory evaluation also become more accurate, resulting in an increase in playing strength. Before the 2nd FOST Cup in 1996, Reiss tuned the performance of Go4++ by playing 700 test games against Handtalk, resulting in Handtalk's only defeat during that competition.

## 4.2.3 Handtalk

Handtalk has been one of the strongest programs in recent years and is written by Zhixing Chen, a Chinese professor from the University of Guangzhou. Although Handtalk becomes stronger each year and was awarded a 4 kyu diploma by the Nihon Kiin in 1996, Prof. Chen does not believe that Go programs will reach shodan by 2000 if shodan is taken at its international level (2 - 3 dan Japanese).

Details of the architecture and algorithms used by Prof. Chen are not abundantly available. Some of the details which have emerged from discussions that various people have had with Prof.Chen at various competitions are provided below.

Handtalk is written completely in IBM-PC assembly language and is very small (around 250k) and very fast. Only a very small number (around 4) candidate moves are evaluated using a static evaluation function which seems to be accurate and stable. Handtalk also uses an influence function whose influence decreases as 1/2^distance.

Handtalk does not use very much global search. Pattern matching is used to some extent although it is unclear whether the patterns are contained in a database or if the pattern matching is rule-based. Handtalk does not use joseki much and has only about 10% as many josekis as MFG.

According to Prof. Chen, Handtalk's strong points are its fighting, group safety estimation, ability to recognize life and death, the end game, and board evaluation. Other people have also commented on its strength at estimating a group's running ability, sense of shape, the middle game, and winning semeais. Prof. Chen characterizes its weaknesses as surrounding, ko, and attacking territory. Recent changes include fighting less often than in previous versions and an improvement in gaining territory in the centre which was achieved by testing alterations in around 200 games played against Go4++.

## 4.3 Computer Go Competitions

There are various computer Go competitions throughout the world including the United States Computer Go Championship, the North American Computer Go Championship, the Computer Go European Championship, and the International Go Contest. There is also a computer Go competition conducted as a part of the Computer Olympiads held in England.

## 6.0 当前程序的性能

### 6.2 人机对抗

1994 年世界电脑围棋冠军Go Intellect在对年青棋手的受14子对局中连败三局，由于应氏规则允许让子由下手自行摆放，这就意味着让15子即由黑方（电脑）先下16手，再由白 走。1991年世界电脑冠军Goliath在对5段棋手的受15子比赛中三局全胜但在受14子对局中三局全败。

## 8.0 Internet 上的围棋与电脑围棋资源

(本章摘自Accessing Go and Computer Go Resources on the Internet将 发表于《the proceedings of the Second Games Programming Workshop in Japan》许多章节选自bsdserver.ucsf.edu/Go的README文件，由于站点的更新，不能保证其中所有部分都可访问）

### 8.1 电脑围棋相关的Internet资源

#### 8.1.1 匿名FTP Archive和镜像站点

aga             美国围棋组织文件clients         Internet 围棋服务器客户comp            电脑围棋编程
games           注解的棋局
igs             IGS棋局以Postscript或Smart-Go格式info            普通文本文件信息mgt             MGT程序，可读写Smart-Go文件printing        用于打印棋局的程序pro             未评论的职业对局problems        围棋问题，主要是关于Smart-Go格式 prog            与围棋相关的程序，但不是对弈的
comp目录包括：
Amiga, Macintosh, IBM PC (DOS and Windows), Linux, and X windows公用程序电脑围棋邮件列表的Archives电脑围棋大全电脑围棋人物与程序各种关于围棋程序和电脑围棋的报告、文章和论文

#### 8.1.2 Internet围棋服务器(IGS)

The Internet Go Server (IGS) provides a means for people to play real-time interactive games of Go against other people or against Go programs over the internet. The IGS serves as a virtual Go club which is particularly useful for players who do not have local access to other Go players or a Go club.

First time users can login as "guest". Full access can be gained by registering for an account. Information about registering can be obtained by typing "help register". The help command provides information on how to use the interface. Once logged on to the IGS, you can play a game against another player, watch games in progress, or even comment on games in progress.

Interfacing to the IGS can be difficult and as a result, client programs have been written for various platforms e.g. Atari ST, Amiga, Macintosh, NeXT, MS Windows, IBM PC, Unix (ASCII) and X11.

Client programs available in the clients directory:
bsdserver.ucsf.edu/Go/clients/

Help on client programs:

Telnet connection to the IGS:
igs.nuri.net:6969
hellspark.wharton.upenn.edu:6969

## 8.1.3 Game Record Formats

Several game record formats exist although currently the two most commonly used are Smart Go Format (SGF) and Ishi "Standard" Format. Information, executables, converters etc. related to game record formats can be found in the info, mgt and prog directories of the FTP archive sites.

#### 8.1.4 电脑围棋邮件列表

computer-go-request@comlab.oxford.ac.uk

bsdserver.ucsf.edu:/Go/comp/ (compgo-mail-*.Z)

## 8.1.5 The Computer Go Ladder

Discussions on the computer-go mailing list resulted in the establishment of an informal competition between computer Go programs called the Computer Go Ladder. The primary purpose of the ladder is for the enjoyment of the participants with the secondary purposes of stimulating both interest and work on computer Go programs and providing a way of measuring the state-of-the-art of current programs.

There are HTTP links from the Computer Go Ladder page to pages related to some of the programmers and some of the programs involved in the Computer Go Ladder, world computer Go competition results, the IGS and various other associated pages on the Internet. The Computer Go Ladder is maintained by Eric Pettersen (pett@cgl.ucsf.edu).

#### 8.1.6 电脑围棋比赛及其结果

nobi.ethz.ch/martin/cgresults.html (Martin M黮ler)
www.reiss.demon.co.uk/webgo/gores.htm (Michael Reiss)

#### 8.1.7 电脑围棋大全

nobi.ethz.ch/martin/references.html (Martin M黮ler)
www.reiss.demon.co.uk/webgo/bib.htm (Michael Reiss)
www.psy.uq.edu.au/~jay/go/comp-go.bib.html (Jay Burmeister)

#### 8.1.8 棋局库

IGS以postscript和Smart Go格式存储棋局库。Jan van der Steen在进行一项名为GoBase的围棋数据库项目，可以查询数以千计的棋谱。

### 8.2 Internet围棋相关资源

#### 8.2.1 棋规与教程

Internet上有各种版本的棋规介绍。

## 8.2.4 The Go Frequently Asked Questions (FAQ)

The Go FAQ contains questions that are frequently posted to the rec.games.go newsgroup and includes sections on basic Go, the IGS, and computer Go related issues.

## 附录 通用围棋术语及英文对照

Atari: An immediate threat to capture; a single liberty remains. A verbal warning is often issued when placing an opponent into ate.

Dame (useless): A neutral point, territory for neither; a liberty.

Fuseki: The opening moves of the game where influence and territory outlines are formed. (literally: no stones')

Gote: Defensive play, loss of initiative. (Literally:'lower hand'.)

Hoshi: (star point'), 4-4 point.

Ikken-tobi: One point extension.

Joseki (established stones): Known sequences of moves near the corner which result in near equal positions for white and black.

Keima: Knight's move extension.

Ko: Repetitive capture. (literally: eternity')

Ko threat: Intervening move (that one hopes will force a reply) before a ko can be recaptured.

Komi: Score adjustment usually penalizing black for playing first. Often 5.5 points.

Kosumi: A diagonal play next to one's own stone.

Nobi (Stretch): An extension away from an opponent's tsuke, cross-cut, etc.

Ogeima (large knight's move): Three across and one vertically (or vice versa).

Seki: A situation where neither player may place the other in ate without placing himself in ate. Stalemate, with no territory awarded.

Sente: Threat forcing direct response, creates initiative. The right to choose where to play next. Opposite to gote. (Literally: upper hand'.)

Shicho-atari: Ladder breaker. A stone played in the path of a potential shicho, threatening to make it fail.

Tobi: Jump.

Wei Chi: The Chinese name for Go. (literally:"game of encirclement")

# References

(以下为general Go Bibliography中没有的部分 )

Berliner, H. J. A chronology of computer chess and its literature. Artificial Intelligence, 10, pages 201 - 214, 1978.

Fotland, D. The program G2. Computer Go 1, 1986.

Fotland, D. Knowledge representation in the many faces of Go. Available on the I nternet at ftp://bsdserver.ucsf.edu/Go/comp/mfg.gz, 1993.

Fotland, D. Personal communications, 1996.

Stoutamire, D. Machine learning, game play and Go. Technical Report TR 91-128, Case Western Reserve University, Cleveland, Ohio, 1991.

Computer-go mailing list references (cgm)
Fotland, D. E-mail communication on the computer-go mailing list.
Mailing list archive available on the Internet at ftp://bsdserver.ucsf.edu/Go/comp/
cgm1 compgo-mail-1.Z
cgm4 compgo-mail-4.Z

• 本文已收录于以下专栏：

举报原因： 您举报文章：电脑围棋领域的研究概述 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)