`
kanwoerzi
  • 浏览: 1647054 次
文章分类
社区版块
存档分类
最新评论

围棋程序=围棋数据结构+围棋算法

 
阅读更多

围棋程序=围棋数据结构+围棋算法

e.g.

各种典型的棋局或对弈程序=棋盘的数据结构(19X19 二维数组)+各种典型的下棋步骤即记录棋局对弈过程的一系列具体的算法


晓辉是这样想的:

如果所有可能的布局都蕴含在棋盘的序位关系之中,那么,这种蕴含的棋局只有在被具体的对弈双方选用的时候,才能由隐而显。


(2011-7-23 17:56)晓辉设想:

1. (2011-7-23 17:53)+(2011-7-23 17:46)

记录棋局的“数据结构类型”提取装置
+
体现棋局的“算法”记录与验算装置
=
再现棋局的“程序”记录与运行装置

2.(2011-7-23 17:53)+(2011-7-23 17:41):

体现棋局的棋盘“界面”生成器
+
体现棋局的布子“程序”记录仪
=
展示对弈过程的“软件”编辑器

(2011-7-24 08:10)晓辉是这样想的:
(可见且可操作的实物的)棋=棋盘+棋子
(例如:围棋、中国象棋、国际象棋)
(可知且可思考的虚物的)棋理=棋盘呈现的序位+棋子体现的点位
(例如:对弈双方思想或心目中的围棋或中国象棋或国际象棋的布局)


(2011-7-24 08:12)何谓“虚物”?
其实就是不确定的信息。


from:

http://bbs.sciencenet.cn/home.php?mod=space&uid=94143&do=blog&id=466099

什么是序位关系?可见:

http://bbs.sciencenet.cn/home.php?mod=space&uid=94143&do=blog&id=465924


附录1

数组是变量的集合,数组的下标可用变量或其表达式来表示:
数组元素panmian(1,1);panmian(19,1);panmian(1,19);panmian(19,19)分别表示棋盘四个角端
数组元素panmian(1,2~18);panmian(19,2~18);panmian(2~18,1);panmian(2~18,19)分别代表棋盘四条边线及边线上的各个位点
数组元素panmian(2~18,2~18) 分别表示除角端和边线外其余位点
panmian(1,1)=2表示左上角端的一枚黑棋,且panmian(1,1) 的下向点位panmian(y+1,1)和右向点位panmian(1,x+1)的值均=0;实际编写代码时则正好逆反,使用选择判断:
若panmian(y+1,1)=0,panmian(1,x+1)=0 则panmian(1,1)=2或-2

着子位点元素值及四向相邻位点元素值的计算规则
据上所述及根据围棋规律和规则在棋盘某位点着子,各邻向位点的状态可能为:<= -2;= -1;0;= 1;>= 2五种,即大于等于两口气的白棋活棋;仅剩一口气的白棋;空点;仅剩一口气的黑棋;大于等于两口气的黑棋活棋这五种情况

若panmian(y+1,1)= -1,panmian(1,x+1)=1
且panmian(1,1)>0
则panmian(1,1)=1; panmian(1,x+1)=0.5; panmian(y+1,1)白棋被提。
若panmian(y+1,1)= -1,panmian(1,x+1)= -1
且panmian(1,1)<0

http://www.computergo.net/forum/viewthread.php?tid=1899&extra=page%3D1

附录2

1. 方天丰 八段 主编的《死活》软件 是一个很好的学习软件。

2. 俞斌 九段 编制的程序中,有一个《棋谱管理》程序,属于这一类软件。

这个程序从1989年开始编制,用来管理国家围棋队的棋谱,经6年来实践使用,不断改进,已经趋于完善。它有输入棋谱、显示棋谱、大容量棋谱库管理、打印棋谱、制作参考图等等功能。现在,国家围棋队、中国棋院围棋部、《围棋天地》、《新民围棋》等围棋事业单位都在使用这个程序来管理棋谱,受到广泛好评。经多年积累,它已经拥有4千局左右中外职业棋手对弈的棋谱库。大多数棋迷朋友们都希望看到这4千局棋,因为多数棋局是从任何围棋书籍中都无法找到的,却又实实在在是职业棋们的沤心力作。

http://www.computergo.net/forum/viewthread.php?tid=884&extra=page%3D1

附录3

陈志行 电脑围棋门径

1.显示棋盘棋子及其他必须显示的内容;设置黑白选择、进子及有关的功能。
2.设置计算和记录棋子串气数的功能,赋予提子和禁着的功能。
3.设计一种函数,表征每个棋子对周围的影响,用以划分势力范围,作为静态 形式判断的基础。
4.对盘上各着点分别试进黑子和白子,比较进子前后的静态形势,以估算该点 的进子价值,成为着点选择的基本依据。
5.用多步搜索法判断棋子串是否可以歼灭或逃出,并分别记为“死”、“活” 和“半死”。这种搜索还可以包括“双吃”(叫吃一串后歼灭另一串)的可能性。
6.规定开局时的一些大点及其价值,设置随机地选取等价大点的功能。开局大 点可以纳入定式的范畴。
7.把棋子划分为块,考虑各块的眼位和出路以及块间的相邻关系,以估算各块 的危险性(负目数),从而构成静态形势判断的完整体系。
8.建立棋形效率模式,指明愚形、忌形和急所,从而增建由静态形势判断所估 算的进子价值。
9.估算棋子串被歼与逃出的静态形势 以估算歼逃价值。
10.设置定式库,规定定式中每步的价值;设置从定式库取数据来行棋的程序段。
11.设置大场、中盘侵分、收官等的数据库和程序段。
12.记录先手着点及其价值,以供寻劫、收官、做眼等参考。
13.设置利用以上各种数据按照适当方式选择着点的程序段。
14.设置在优势和劣势下采用不同策略的功能。
15.设置搜索广度和深度的选择功能使思考时间得以随时调整。
16.设置终局判断、PASS(弃权一手)及在对方PASS后如何处理的功能。
17.设置棋谱记录、计时、发声、显示形式对比、计算胜负等功能。

首先必需完成1、2部分。其次不妨先解决3、4,这样程序就算是会下棋了。不过,叫吃也不会逃,或者只会逃叫吃却不懂征子,也是不堪一击的。这样应解决5。第一步可以先解决二气问题、即三气就算已经逃出。

棋子分块以及眼位估计是获得战斗力的重要环节。这一功能解决后,棋力可望达 到高手让不了30子的程度。然后设置行棋模式又是一个关键,解决后让25子恐怕也困难了。

http://www.computergo.net/forum/viewthread.php?tid=16&extra=page%3D1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics