围棋对弈系统的设计与实现毕业论文.doc

上传人:文库蛋蛋多 文档编号:3937373 上传时间:2023-03-28 格式:DOC 页数:51 大小:2.90MB
返回 下载 相关 举报
围棋对弈系统的设计与实现毕业论文.doc_第1页
第1页 / 共51页
围棋对弈系统的设计与实现毕业论文.doc_第2页
第2页 / 共51页
围棋对弈系统的设计与实现毕业论文.doc_第3页
第3页 / 共51页
围棋对弈系统的设计与实现毕业论文.doc_第4页
第4页 / 共51页
围棋对弈系统的设计与实现毕业论文.doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《围棋对弈系统的设计与实现毕业论文.doc》由会员分享,可在线阅读,更多相关《围棋对弈系统的设计与实现毕业论文.doc(51页珍藏版)》请在三一办公上搜索。

1、围棋对弈系统的设计与实现摘 要计算机围棋是计算机博弈研究的一个重要分支,是当前人工智能研究的热点之一,一直以来吸引着大量的研究人员,产生了较大的社会影响和学术影响。由于围棋变化复杂、棋理深奥,是一种高智能的活动,因而围棋的计算机博弈设计难度较大,同时计算机围棋热点问题的研究为人工智能带来了崭新的方法和理论。计算机围棋的研究和实现需要多门学科的知识交叉,至少会涉及到围棋、计算机、数学、生物、逻辑学、军事学、教育、心理学乃至哲学等领域,因此其发展具有重要的研究价值和应用价值。论文主要介绍了围棋对弈系统中胜负判断与局面分析功能子系统具有的功能,论述了子系统的开发和实现的过程,同时对围棋胜负判断的主要

2、规则、计算机围棋中计算势的几个经典模型以及计算机围棋发展的现状进行了阐述。通过Visual Basic 6.0可视化开发工具实现了围棋对弈系统,该系统具有新局、继续以前局、存当前局、设置、回手、复盘、判断胜负、显示势力、显示定式等功能,能够辅助围棋爱好者进行“人-人”围棋对弈。围棋胜负判断与局面分析功能子系统,是围棋对弈系统的一个重要组成部分,并为“人人”围棋对弈系统向“人机”围棋对弈系统发展打下基础。在实现过程中,通过建立棋局的记录来判断棋盘上每一点的归属,从而确定双方地域,故能够对提掉死子后的终局棋盘进行判断胜负;通过建立棋子的影响模型、力学模型以及度量公式,将棋子向棋盘其它部分辐射的影响

3、量化,从而判断对弈双方的影响地域。 关键词:计算机围棋;胜负判断;影响模型;势AbstractComputer Go is an important branch of Computer Game research, and it is also an hotspot of Artificial Intelligence. Computer Go has been attracting lots of researchers and has brought remarkable social and scientific influence in the meantime. On one ha

4、nd, because the moves in Go are not only manifold but also complicated, which makes it a more difficult work in Computer Go programming. On the other hand, it has brought Artificial Intelligence many new methods and theories. At the same time, Computer Go has been involved in many cross-disciplinari

5、es such as Go, Computer, Mathematics, Biology, Logics, Strategics, Education, Psychics and even Philosophy. Consequently, its development has important research value and applied value.The paper mainly introduces the background, functions to be completed and the development procedure of the system.

6、It presents the rules of victory judgment, the classic influence model and the current situation. The Go Playing System is built by Visual Basic 6.0 and includes many functions such as new game, load game, storage game, settings, undo, redo, victory judgment of the two sides, show influence and form

7、ulized series of moves. It can help Go enthusiasts to make competition of human-to-human.Both of the victory judgment and situation analysis subsystems are needed sections of human-to-human Go Playing System, and they will all be foundations of the human-to-machine Computer Go System in the future.

8、In the process of implementation, the system can obtain the result by building the record adscription of every point. The paper builds the influence model, mechanical model and measurable formula. It is constructed to quantify the influence that stones make and estimate the areas of the two players.

9、Key words: Computer Go;victory judgment;influence model;force前 言围棋是一项广有裨益的智力竞技运动,它集休闲娱乐、陶冶性情、修心养性于一身,是中华文化的瑰宝,是人类智慧的最高象征之一。围棋经历了数千年,久盛不衰,且至今还在不断发展。现在的人工智能科学研究在它面前显得很是稚嫩,因而值得将它作为重要的研究对象。在人工智能领域内,博弈是很重要的一个研究分支。通过对博弈的研究,可以解决很多实际问题,使计算机智能向人类智能迈进。计算机国际象棋和计算机围棋一直是人工智能的热门课题,而围棋程序的编制被称作人工智能的“试金石”,是人工智能技术的一大

10、难题,它将会在今后相当长的时期内哺育着人工智能科学的成长。本系统立足于“人人”围棋对弈系统的设计与实现,具有围棋记谱、打谱、对弈计时、查看定式、初步显示局面形势等功能,是一个适宜在计算机上对弈的“人人”对弈系统,可作为实用的围棋学习、研究和娱乐的良好的辅助工具。围棋胜负判断与局面分析功能子系统是围棋对弈系统的重要组成部分,本文在此基础上初步讨论了“人机”对弈的模式和方法,分析了“人机”对弈系统所应具有的功能。本系统的实现为进一步研究围棋的“人-机”对弈奠定了基础。论文研究的主要内容:(1)设计与实现一定条件下的围棋棋局最后胜负判断功能子系统。(2)探讨“非中国围棋规则中棋局最后胜负判断”实现的

11、途径和方法。(3)设计与实现局面分析功能子系统。(4)探讨“人机”围棋对弈系统实现的途径和方法。围棋胜负自动判断是一个实用的围棋对弈系统所应具有的功能。在现实的围棋胜负判断中,往往需要一个裁判员通过做棋来判断棋局最终的胜负。如果有一个客观、准确的围棋自动判断胜负系统,一方面可以省时省力,一方面可以做到客观公正。但实现一个具有人(裁判员)一样的判断能力的胜负判断系统,存在着许多困难和挑战。本系统通过建立棋局的记录来判断棋盘上每一点的归属,从而确定棋局中双方地域,故能够对提掉死子后的终局棋盘用中国规则判断胜负,并由此讨论如何实现用日本规则判断胜负;通过建立棋子的影响模型、力学模型以及度量公式,将棋

12、子向棋盘其它部分辐射的影响量化,从而判断对弈双方的影响领域,在此基础上,探讨如何实现“人机”对弈中着法的选择。但目前仍有许多问题有待于进一步解决,例如影响函数的优化,死子的提取等问题。 第一章 绪论1.1 围棋概述1.1.1 围棋简介围棋相传为尧所创,有“尧造围棋,以教子丹朱”的记载。班固在汉书中提到“纵横一十九道,天元是为太极,太极生两仪,为黑白子;两仪生四象,为四个角”。又记载:“棋有白黑,阴阳分也,骈罗列布,效天文也。”A1可知围棋本是仿效天文而制,逐渐演变为博弈游戏。1.1.2 相关围棋术语1. 块棋同色的棋子在经线或纬线上相邻,称为连接。如图1-1,连接在一起的棋子组成了一块棋,当然

13、单一的一颗棋子也可以称一块棋。块棋的气是组成它的所有棋子的气总和;一般来说,有两个及两个以上真眼的块棋是不能被提掉的,如图中的eye点,因为对方不可能同时落下两颗棋子填眼,故图1-1中的块棋是活棋。 eyeeye图1-1 已经活的块棋2. 假眼同颜色的几个棋子围住一个交叉点,该交叉点称为“眼”。棋块被围,至少须有两眼方能成活,而己方的这两眼能使对方无法入内打吃取子,称为“真眼”。有时眼形不完备,有被下子投入提吃的可能,称为“假眼”。一个完整的眼,在角上必须有三子,在边上必须有五子,在中腹至少占领周围七子。如图1-2,其中a为真眼,b为假眼。ab图1-2 真眼和假眼3. 死活死棋指棋盘上迟早要被

14、对方吃掉的棋子。常见形式有:(1)没有气的棋子。(2)有些棋子虽还有气,但本身已无条件做成两个眼,终将被对方吃掉。如图1-3,黑棋三例均为死棋。图1-3 死棋活棋指棋盘上对方无法吃掉的棋子。常见形式有:(1)一块棋至少有两个对方禁着点。(2)一块棋所围的空点较多,已经具备做成两个眼的条件。如图1-4,黑棋有a和b两个白棋的禁着点,为活棋。B1ab图1-4 活棋4. 分断也称“断”,指把对方的棋子分割成两部分,是一种激烈的攻击手段。此后双方将引起激烈战斗,所以要在对方两面薄弱的情况下选择断点。 5. 联络围棋术语中两棋子的连接仅指经纬线上的连接,又称并。但实际的连接中可以有许多方式,如并、尖、飞

15、、大飞等,如图1-5,1-6。如果两块棋没有联络,则称为断开的。图1-5 并、关、二间关图1-6 尖、飞、大飞6. 棋块两块或多块互相紧密联络的同色块棋组成棋块,由于互相之间有紧密的联络,它们可以被看作一块棋。棋块是对局中棋手分析棋局的一个较大的单位,其最重要的属性是确定它是否是活的,或是否可以做出两个眼,或可以与一个已有两个眼的活棋块联络。如图1-7中含三个棋块。图1-7 棋块7. 棋势两块或多块联络松散的同色块棋组成棋势,如图1-7中三个棋块(每个棋块由多个块棋组成)围成了很大的地域,构成棋势。对于棋手而言,将棋势转化为实地是很重要的。而对方侵入这块地域则称为打入。8. 棋局是所有那些必须

16、记录下来的信息。根据这些信息,比赛在按计划暂停后能够得以继续进行下去。显然,这些信息包括了此时棋子在棋盘上的位置以及指出下一步该哪方走,有时甚至需要有对局时间等信息。9. 数棋当对局结束后,从棋盘上提掉死子,分别数出双方的提子数和围空数之和,多的一方为胜者。1.2 计算机围棋1.2.1计算机与围棋计算机运用于棋类方面几乎与计算机诞生的历史一样长。这方面内容主要属于人工智能范畴。人工智能作为一门学科首先是在五十年代被建立起来的,随即便运用于博弈,同时博弈等方向的研究也极大地促进了人工智能的发展。 计算机围棋发展至今的一些代表性程序为陈志行教授的HandTalk、陈克训教授的Go Intellec

17、t、Mark Boon的Goliath和许舜钦教授的学生们所制作的程序以及开放源代码的GNUGO。还一些计算机围棋软件的界面还是基于DOS命令下的,以字符界面方式工作,通过命令提示符输入坐标及相应得命令来下棋。计算机围棋发展初期的八十年代,围棋程序以大约每年两级的速度在进步,而到了九十年代计算机围棋已发展到某一程度,但仍以大约每年一级的速度在稳定进步中,由此看来,计算机围棋目前仍在稳定发展之中,另一方面,由各围棋程序各有特色看来,计算机围棋还有相当大的发展空间。 就围棋而言,人弈棋凭的主要是经验,即“棋感”,精确计算为辅。人类的优势是模糊判断、灵敏的直觉,高手往往会灵机一动而弈出妙手。当然事物

18、有其两面性,即人的直觉有时也会误导形成错误,棋手的心态也至关重要,即直觉是法宝,亦是促成盲动的败因。 计算机的优势是计算速度快,不为情绪、直觉所惑,故地域广狭之分能较为准确,劣势是不擅模糊判断、只能根据少数经验选点导致搜索量过大,且没有棋感,不知道走哪一步较好、哪一步不好,只有逐点试,有时费时甚巨(也未必有用),有时不够准确。1.2.2 围棋编程的挑战围棋带来的众多挑战中的一个方面便是计算机程序的实现。福特兰德说:“计算机围棋程序已经产生了许多改进,但是没有突破性的进展。” B2计算机围棋程序不仅不能很快地计算出棋局变化的可能性,而且也不能准确地进行计算。但尽管如此,由于围棋本身的高深和复杂促

19、使程序设计师们在人工智能领域不断地推进基础性的工作,开发有关围棋计算机程序的吸引力也在不断增加。1. 棋类算法及其在象棋与围棋中的对比 由于技术的进步,计算机速度的提高、算法的不断发展,目前电脑国际象棋的水平已极高,一九九七年,IBM的电脑“深蓝”一举战胜卡斯帕罗夫,震惊世界。其实电脑国际象棋的水平早在七、八十年代已挤身世界高手之林,而中国象棋软件也已几乎具有大师水准,非一般爱好者能望其项背。唯独计算机围棋举步维艰,连业余下手都胜券难握,更莫论一等一的高手,究其原因不外是围棋之博大精深、纵横变换繁复,棋手多靠经验下棋,计算机很难描述经验,更难应用经验。围棋和象棋一样是博弈游戏,看似仅有黑白两种

20、棋子,简单不过。实则比起兵种繁多的象棋却复杂得多。目前,棋类算法主要有两大类:基于模式匹配和使用博弈树。这在国际象棋中的运用可以追溯到五、六十年代,且而十分成功。 电脑围棋起源于六十年代。Zobrist和Ryder两位博士在论文中均涉及了围棋程序,前者的算法基于模式识别;而后者的算法基于搜索,即使用博弈树。这两种在国际象棋中效果不错的算法在围棋中的表现却极差,竟然连仅有几盘棋经验的人都赢不了。 这里分析一下上述两种算法。(1)模式匹配象棋中因为棋子个数少、种类多,那么就较易分别与归纳(实际上也是困难的,但比围棋容易实现得多)。而在围棋中,显然将所有的模式都存储起来是不可能的。那么只有模糊匹配。

21、但这似乎也很难办。围棋中有“愚形”这个名词,一般指的是效率差的形状。那么怎样是效率差呢?就是浪费子力,在不必要的地方落子,哪怕只是一个子。而模糊的匹配在一子之差时究竟如何判断?是好形还是愚形?这就陷入了矛盾的境地。况且,根据实际情况,还有“愚形之妙手”,实难判断。(2)搜索算法搜索的代价是极大的,据估计,国际象棋搜索7个回合约有500亿至600亿种选择(当然是在博弈树剪枝后),这个数字尽管也十分庞大,但以目前的技术水平还是可以承受的;然而在围棋中,我们稍微计算一下便知道:假设每步大约有只有一百个可行点(已经非常少了),那么14步(即7个回合)以内的变化则约有1028种,当然这只是保守的估计,已

22、足以骇人了。可见在全局使用搜索算法是不可行的。因此当前的做法一般是在局部明确目标(如做活、杀棋、突围、切断等)的情况下,才使用博弈树进行搜索。2. 为什么围棋无法像国际象棋那样编程同国际象棋编程相比较,围棋编程领域的发展尚处于初级阶段。在国际象棋的编程研究领域中曾出现过像60年代和70 年代时投入了强大的研究力量的情形,在围棋编程领域从来没有过。在两者之间有着本质的区别,使得国际象棋受人青睐成为研究对象,同时,即使也有力量投入围棋编程,其结果也无法赶上国际象棋编程的进步。这其中原因,一方面是由于围棋本身的复杂性,另一方面是由于在国际象棋领域取得的编程技术无法恰当地运用于围棋领域。 (1)围棋棋

23、子类型简单,只有一种,但棋盘为19*19,且由于着手的相对自由,使得围棋棋局的平均手数大约为300步,每步棋着的选择(分支因子)可高达平均200个。(2)围棋有两种终局方式:认输和自然终局,且需要双方同时认可,但往往初学者很难判断是否已经没棋可下,所以他们的棋局往往比高手之间的要长,围棋程序也会犯同样的毛病。如果按照日本的数目法计算胜负,则多余的着手会因为填在己方的空里或变成对方的提子而减少目数。(3)围棋的棋子威胁度与国际象棋不同,就国际象棋而言,棋子的威胁度仅是它所能走到的格子,而在围棋中,棋子下后就不再移动(仅当提子时例外),但可以对棋盘上其他的棋子产生影响,如引征可以改变某块棋的征子关

24、系。(4)围棋中,棋子的移动对棋局的变化影响不显著,从而需要大容量的记忆分析棋局。即使是一个初学者也可以看出60步以后的征子结果,这是一个很深但很窄的计算问题。但只有最后当棋子被提掉的时候,棋盘的物理状态才发生显著的变化。3. 围棋的复杂性围棋的复杂性具有以下的特点:变化的复杂性;计算的复杂性;胜负判断的复杂性;打劫的复杂性;对弈时间长;顶尖高手失手率高;计算机程序的设计难度大;棋评的内容复杂。围棋全局与其死活问题其复杂性都大致可归纳为如下三点:(1)模糊性“围棋”之名自是取自围地之意,倘若是双方落子一开始便是紧紧相贴的,那么可想而之行棋的速度(即占领地盘的速度)是极慢的,故而布局、中盘以至大

25、官子阶段,双方只是围出一个大概的轮廓,甚而连轮廓都不明显。黑白势力难分,形状多变。这对于计算机处理造成了极大的困难。(2)反复性象棋中棋子一旦被吃,则永远从棋盘上提去,而在围棋棋盘上,被吃的地方仍可重新落子,甚至将对方反吃回来,这样搜索的难度就大大增加,如“倒脱靴”之形,送子后再吃子,一块空可以几易其主。所以“死子”不一定死,因此在计算机处理中不可以简单确定一块棋的死活和对周围的影响。(3)灵活性象棋的灵活,至多体现在兑子上,所谓“宁弃一子,不失一先”,也仅是一子而已,若是两子、三子呢?恐怕在双方实力相当的情况下必败无疑。而且在象棋算法中多有将各种棋子折合为一定的价值相加的做法,如在国际象棋中

26、以一个兵为单位,一个马约可等于三个兵,一个车约可等于五个兵,再根据棋子所处位置加以一定的折算。而围棋的灵活远胜于此,有时弃去十来个子以取势,弃去二、三十目的角地以转换。而且,围棋棋子的价值是难以估量的,其价值不完全在其本身,而常在于周围,有些影响甚而可跨整个棋盘。1.3 围棋对弈系统开发的意义计算机围棋的研究和实现需要多门学科的知识交叉,至少会涉及到围棋、计算机、数学、生物乃至哲学等领域。从程序员角度狭义地看计算机围棋,它是计算机技术在围棋上的应用,即编写一个下围棋的程序,使计算机智能足以在棋局中得到发挥。从大的方面看,研究计算机围棋,也是探索机器智能、揭穿人类及其它生物智能秘密的一个重要途径

27、。早在1962年,人们开始以围棋为研究对象将电脑围棋纳入到研究工作中,尽管直到1968年(Zobrist,1970)才出现了第一盘由程序下出的完整的棋。而随着电脑围棋赛事的举办和第一个商业程序的发行,在80年代也正式确定了电脑围棋研究领域,并在90年代变得兴旺起来。目前在电脑围棋竞赛中比较活跃的顶尖程序有 Explorer,Go Intellect,Go4+,手谈和The Many Faces of Go,水平大致是在4-8级之间。这些围棋程序都使用了一定量的“知识”。由于建立在设计者下棋经验的启发之上,每个程序都可被看作一种(可能是含糊的)围棋理论的一次以经验为依据的实验。围棋理论成立的关键

28、要靠数据结构的选择,因为它们决定了编码不同类型知识的难易和应用这些知识的计算开销。随着程序员同时在围棋和电脑围棋方面获得技能,程序会有发展(例如,在过去的十五年中随着 Fotland 的棋力从15级发展到2段,MFG也增长了棋力并且代码长度增加到目前的4万行)。值得注意的是,程序的性能由它最弱的部件决定,而向程序增加新知识的难易是提高程序性能的重要部分。 由此可见,计算机围棋领域在关于怎样构筑一个围棋程序或者指配不同围棋知识的优先性(例如,Go4+注重联接性而MFG注重死活)方面还没有一致性。必须提到的一点是:关于人类是怎样下围棋的至今也没有一致的说法,这是目前认知科学研究的一个课题。这个领域

29、的任何进展都会对围棋理论有个直接的促进,并可能导致围棋程序算法的改进。 计算机围棋的挑战性在于要扩展当前的围棋理论或发展新理论特别是与评估有关的,针对实时限制设计合适的数据结构和算法,解决知识瓶颈。目前还没有一个有力的程序使用学习技术,尽管有过几次这样的尝试(如Pell,1991;Schraudolph, Dayan & Sejnowski,1994;Donnelly, Corr & Crookes,1994)。怎样把学习能力赋予现有的程序(或者它们暗示的围棋理论)是个等待解决的问题。本课题所建立的围棋对弈系统是一个适宜在计算机上对弈的“人人”对弈系统,能够作为实用的学习和研究围棋的辅助工具。

30、它立足于“人人”围棋对弈系统的设计与实现,该层次的系统可以辅助实现围棋记谱、打谱、对弈计时、查看定式、初步显示局面等管理功能,并在此基础上探索“人机”对弈的模式和方法,以让计算机代替人进行对弈思维活动, 胜负判断与局面分析功能子系统,是围棋对弈系统的重要组成部分,为“人人”围棋对弈系统向“人机”围棋对弈系统发展打下基础。第二章 围棋对弈系统的开发环境及使用工具2.1 开发环境的选择及使用工具l 开发与运行环境:Windows XP操作系统l 开发工具:Visual Basic 6.0l 辅助工具:Source Insight 3.5,Visual SourceSafe 6.02.2 系统开发工

31、具与编程方法1. Visual Basic可视化开发工具VB系统提供丰富的数据类型、众多的内部函数、子程序、事件子程序和自定义函数等模块,各个子程序模块之间可以彼此独立,可以相互联系。在VB中可以应用结构化的程序设计方法,也可以运用基于对象和面向对象的技术。Visual Basic允许程序员以单文档界面(SDI)或多文档界面(MDI)或资源管理器式界面来运行环境的选项,也有允许同时将多个工程作为工程组加载到环境中的功能。在VB集成开发环境中,用户可以设计界面、编写代码、调试程序,直至把应用程序编译成可执行文件。在VB应用程序开发环境,常常把程序和数据封装起来视为一个对象工具,每个对象工具都是可

32、视的。程序员在设计时只需要根据设计界面的要求利用现有的对象工具,直接在屏幕上设置不同的对象(如:窗口、菜单、按钮或滚动条等),并为每个对象设置属性,以所见即所得的方式进行程序设计。2. 事件驱动的编程机制事件驱动是增强程序图形界面交互性的主要方法。事件驱动是指利用用户的动作或行为控制程序运行的流向。用户的每一个动作或操作行为都可产生一系列消息,这些消息都可驱动一段程序(即某事件代码)的运行。程序员只需编写响应用户动作的代码,各个动作之间不一定有联系。这样的方式下,具有代码短、易编写、易维护的优点。3. 结构化的思想与原则(1)自顶向下,逐步求精原则进行程序设计时,先把对问题的处理(即算法)粗分

33、成几个步骤,叫做模块。然后对每个模块再细化为几个小模块,每个小模块再细分为若干个更小的子模块,直到每个小模块能直接用语言来实现为止。这种过程是一种自顶向下,逐步求精的过程,会使程序结构清晰,易保证程序的正确性,也便于修改和维护。(2)模块化思想整个程序和功能模块都由几个功能相对独立的子模块组成,每个子模块只有一个入口和出口与外界联系。这使程序结构清楚,便于调试和修改。(3)三种基本结构整个程序中的各级模块仅由顺序、选择、循环三种基本控制结构组成。这三种基本结构也只有一个入口和一个出口。2.3 Source Insight 3.5辅助工具 阅读源代码是钻研技术的最佳手段,在设计过程中,Gnu G

34、o 提供了开放的源代码库,本文借鉴了其中的许多思想,它是一个使用C语言在UNIX下编写的优秀的围棋人机对弈系统。如果缺乏良好的源代码阅读工具,会使阅读源代码尤其是个函数内部的调用十分困难,在阅读过程中,使用了一个优秀的源代码阅读工具Source Insight。Source Insight是一个面向项目的程序编辑器和代码浏览器,内建C/C+、C#和Java程序语法分析。Source Insight能动态地保持符号信息的自己的数据库,并自动地显示有用的上下文信息。Source Insight还能够显示参考树,类继承图表和调用树。Source Insight的特点是快速源代码导航,它能快速地访问源

35、代码和代码信息。当编辑时,Source Insight解析源代码并立刻提供给有用的信息和分析。这使得代码的阅读变得相对简易。 图2-1 工作窗口使用Source Insight的具体用途主要有:上下文敏感的智能改名、符号自动完成、快速访问所有符号和文件、项目定位、团队编程支持、源代码超链接到编译器错误的地方、快速项目范围的搜索和替换、项目窗口带有多个视图、集成额外的编译器和工具、剪贴窗口排序剪贴板和规范代码、双状态行修改标记和选择行恢复、可扩展的文档类型和语言、崩溃恢复提供保护、稳定的工作台、可自定义的菜单和键盘、支持远程终端服务会话等。 2.4 Visual SourceSafe 6.0版本

36、与配置管理工具 Visual SourceSafe (以下简称VSS)是一种源代码控制系统,它提供了完善的版本和配置管理功能,以及安全保护和跟踪检查功能。VSS通过将有关项目文档(包括文本文件、图像文件、二进制文件、声音文件、视屏文件)存入数据库进行项目研发管理工作。用户可以根据需要随时快速有效地共享文件。文件一旦被添加进VSS,它的每次改动都会被记录下来,用户可以恢复文件的早期版本,项目组的其他成员也可以看到有关文档的最新版本,并对它们进行修改,VSS也同样会将新的改动记录下来。用VSS来组织管理项目,会使得项目组间的沟通与合作更简易而且直观。 图2-2 VSS服务器的配置VSS的主要功能是

37、对项目进行版本控制和源码控制,它能够详细记录一个源码文件从创建到发布的所有修改和版本信息,而且还可以查看所有历史记录并对不同时间的源码进行比较分析,恢复代码到某一时刻和版本状态。VSS具有强大的用户管理权限,可以对每个用户设置R(Read)、C(Check Out)、A(Add)、D(Destroy)权限,非常适合团队开发。由于是四人共同开发围棋对弈系统,个人设计的任务不同,而且是同时进行各自子系统的设计工作,每个人每天都会在一定程度上修改自己的相应子系统,为了方便文本数据的管理,设计时尝试地使用了VSS代码控制系统,以一台机器为服务器,其余成员安装VSS的客户端软件,并创建相应的工作目录,只

38、要通过该客户端软件登录到VSS服务器上,CheckOut当前要进行工作的项目或文件,复制到自己的工作目录进行修改,如有修改的在工作结束时将其CheckIn提交给VSS服务器进行统一更新,同时存有修改的记录。可以撤消错误的修改,极大地方便了对系统的管理,并节省了许多时间。第三章 胜负判断功能的设计与实现3.1 围棋计算胜负的方法与规则3.1.1 围棋计算胜负的方法围棋判断对局双方胜负结果的方法有数子法、计目法和计点法。它们的实质都是对棋盘上已明确具体归属地域的计算。所谓地域,是棋盘上已明确归属的位点总和,地域应包括棋盘上已成活的所有棋块以及双活棋块所共有的公气。地域的归属由对局双方用行棋的自然方

39、式决定,地域的形成和归属在终局时由裁判仲裁,不由任何一方单方面决定。1. 计目法计目法,也称比目法,是我国最早的判定胜负的方法。计目法计算的计量单位是目,目就是由活子所围成的空点,一个空点就是一目,计目法是对所属部分位点的计算,用简单的文字表述,就是计算比较双方终局时所围的地域目数,并以目数多少来判断胜负结果。也可以认为,目是对局双方着子权的价值表示。计目就是计算双方各丧失多少所有权或着子权,或者说,得到多少所有权或着子权。因此,计目法特点在强调棋子的围地效能,没有围到空的棋子称为单官。计目法由于只计算所围的地域目数,收完单官与否并不影响胜负结果,因而规定棋局终局不收单官。所以是否收完所有单官

40、,是数子法和计目法在终局时的主要区别。棋块(棋形,棋串)是棋子的集合,棋块成活的最低条件是不能被对方从棋盘上一手提取,非双活棋块成活的最低条件是至少具有2个真眼眼位。狭义的眼位具有排他性,即敌子可以在眼位内存在,但不能在眼位内存活。成活棋块由构成活形的棋子以及棋子所围成的空组成,所谓空,由地域内未经着子的位点和对方已经着子但不能存活的位点组成。空是广义的眼位,因而空也具有排他性,如果敌子能在空内存活,则空立即消失不存在,空内未着子位点全部还原为公共所有状态,甚至还可能威胁到己方棋块的生存。空的排他性明确表明了空的归属,同时原属公共所有状态的位点,也因为排除了对方的所有权(着子权),而由2目变为

41、了1目。空是目的集合,成活棋块一旦定型,其空目数保持基本不变,空的这一特性,是计目可以作为形势判断和胜负判断的主要依据。由于对局双方的着子权是对等相同的,是可以互相抵消的,而双方的死子也是容易清点计算的,所以对全部归属位点的计算统计,可以简化为比较双方归属的空位点数量和死子数量之总和,并以此判断双方的胜负。计目法的一个缺陷之处,就是死子不能由提取来证明,尤其对于围棋初学者,死活判断不是那么准确,多下一手就损失一目,若不下,又不放心。且如果双方对死活产生歧义,还是不易解决。图3-1 计目法例1如图3-1,黑1是无意义的一手棋,如无黑1,是8个空点,即8目棋,下黑1后,现只有7目,即黑1不但没有增

42、加空点,反而减少了自己的空。1图 3-2 计目法例2如图3-2,黑1提两个白子,在计目法是损手,角上黑棋由9目变成8目。2. 数子法数子法是根据棋局终局后对局双方的棋子在棋盘上所归属位点的多少来判断胜负结果的。数子法是对所属全部位点(地域)的计算,计量单位是子。前图3-1中, 黑1虽是无用之着,但无损于角上空域。数子法必须收完盘面上的所有单官,否则就无法知道双方终局所得的子数,也就无法与归本数相比较得出明确的胜负结果。所谓归本数,是指数子法的基础胜负标准。因为标准围棋棋盘总计有361个交叉点,所以对局双方每方应得点数应为总点数的一半,即180.5点。多于此数者胜,少于此数者败,等于此数者和。故

43、数子法的一个明显的优越之处,就是不易引起纠纷,如果对局双方对胜负结果有分歧有异议发生纠葛,那么化解争端的最佳方案就是实战解决,比任何理论道理都管用。前图3-2中,黑地不会因提取而减少。3. 计点法 从表面上看,计点法与数子法没什么大的区别,也是以棋盘总点数361为准,谁超过半数谁就获胜。一块活棋中,棋子是1点,空也是1点。道理和数子法一样,但是计点法要较数子法精密和复杂些,计算时不会破坏棋形,也容易查证。4. 子数与目数如前所述,我们可以导出数子法和计目法的关系式:black+white+G=361其中:black=黑棋终局子数;white=白棋终局子数;G=无争公共位点数=单官数+双活公气数

44、;从以上关系式可以发现:当G=0时,即收完全部单官,数子法不变;如black或white361/2时,为胜方,如black或white=361/2时,为平局。把上面的关系式变换移位,得black+white=361-G我们可以发现数子法不收单官,同样可以计算胜负,不过基础标准即归本数发生了位移变小,但胜负结果不变。3.1.2 围棋计算胜负的规则目前的围棋规则有三种,即中国规则、日本规则和应氏规则。1. 中国规则计算胜负中国规则又称数子规则,子空皆地,主要在春兰杯及中国国内使用。它规定“双方下子完毕的棋局,计算胜负采用数子法。 先将双方死子全部清理出盘外,然后对一方的活棋(包括活棋围住的点)以子

45、为单位进行计数。 双方活棋之间的空点各得一半,一个点即为一子。 胜负的基准以棋局总点数的一半180又1/2点为归本数。凡一方活棋与所属空点的总和大于此数者为胜,小于此数者为负,等于此数者为和。 采用贴子方式的棋局,胜负标准另行规定。”B3关于贴子的规定:“ 为了抵消黑方先手的效率,现行全国性正式比赛在终局计算胜负时,黑方需贴出三又四分之三子。”B4因此,黑184又1/4,白176又3/4为双方分别获胜的基数。对终局有以下规定: “一、棋局下到双方一致确认着子完毕,为终局。二、对局中,有一方中途认输,为终局。”B5关于终局判断的规定:“一、除总则第七条的规定外,凡比赛一方弃权或因各种原因被裁判员

46、判负、判和的对局, 也作终局处理。 二、双方确认的终局,确认的次序应是,先由轮走方,后是对方以异色棋子一枚放于已方 棋盘右下角的线外。”B62. 日本规则计算胜负日本规则又称数目规则,空才算地、死子加倍。日本规则使用较为广泛,在除应氏杯、春兰杯外的所有国际比赛中,均使用该规则。日本、韩国的国内比赛,也使用日本规则。但两国在贴目等方面有微小差异。在日本围棋规则中,某一方的活棋所围住的空点称为“目”,目以外的空点称为“单官”,有单官存在的活棋称为“双活棋”,双活棋以外的活棋的目称为“地”,地的一点即为“一目棋”。完全的并且独立生存的活棋的目称为地,而共有单官才得以生存的双活棋,因其本身不是独立的活

47、棋,所以其为主的目不是地。 B7其中对胜负的规定有:1双方达成终局协议后,相互把自己地中的对方死棋子取出,加算到提子中。2用提子互填对方的地,比较双方地的目数,多的一方为胜。相同时称之为“和棋”。3一方对胜负有异议时,必须通过复盘再现等办法,再次确认胜负。4双方确认胜负后,不能以任何理由来加以改变。B8 日韩围棋规则都采用计目法。依日韩规则,双活棋形一概不计目数并不合理。双活是棋形成活的一种特殊形式,由棋局行棋过程自然形成,和普通两眼成活棋形一样,也不能从棋盘上被一手提取,从而满足构成活的要件,因此构成带眼双活棋形的眼位理应等同普通成活棋形。在眼位目数不等时,或一方有眼一方无眼的双活棋形,如果

48、按计目法,形成眼位的空点数应按成空目数计算,如果按数子法,则空点数应按子数计算。图 3-3 双活棋形如果双活棋形不计目数起源于要还“棋块头”的中国唐宋棋规的“填空法”,则属于“填空法”内在逻辑的必然结果。但现代计目法不用还“棋块头”,因而无论从法理上,还是用内在的逻辑推理,都缺乏充分的必然依据。日本规则,吃掉的死子要拿起来,否则会不准,所以日本规则更适合耍赖, 只要偷拿对方吃掉自己的几个棋子,就可以很容易地扭转局势。. 应氏规则计算胜负应氏规则仅在由应氏杯中使用。其中关于胜负计算规定:“子空皆地 填满计点”,它创“子空皆地、空属邻界”为胜负准则:凡“活子”及其“属空”皆为“域点”。同时创“填满计点、以子量地”为计算实务:原有邻界一子未变,胜负点数即使是初学者也可一目了然。关于填满规定

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号