飞扬围棋

标题: 电脑围棋发烧友请进:偶正在测试GNU Go最新版3.7.12、MoGo的棋力 [打印本页]

作者: 东南星    时间: 2008-4-26 01:43
标题: 电脑围棋发烧友请进:偶正在测试GNU Go最新版3.7.12、MoGo的棋力
如题。

建了个QQ群:58615816 (电脑博弈俱乐部)。欢迎对电脑围棋感兴趣的朋友进群。加群时请务必注明“电脑围棋爱好者”或“电脑博弈爱好者”。

GNU Go最新版3.7.12、MoGo棋力如何?为此,我正在KGS上测试。。。

最近几天,我有时把GNU Go挂在KGS。有时9路、13路,有时19路。有时也挂MoGo。MoGo是从网上下载的。哇,昨晚我碰到大名鼎鼎的CrazyStone作者Remi Coulom在跟我挂的MoGo在下9路棋呢(对了、说不定他在测试他的CrazyStonei呢),害得我不好意思继续挂MoGo bot了,因为,这个Remi也帮MoGo很大的忙呢,可以说MoGo开始时的主要改进来自于CrazyStone.

GNU Go 最新版是3.7.12,我在最新版cygwin下编译通过。太大了,约8MB多,另加cygwin1.dll及另一个dll,不知上传到哪里合适。准备先放到群里。

你如果想跟GNU Go下棋的话(主要是晚上),我可以挂一个bot到KGS;你也可以下载到你的计算机上下棋。如果你感兴趣的话,我可以告诉你(你)如何在KGS挂GNU Go。实际上任何support GTP的engine都可以挂。
另外,昨天我也在CGOS上挂了GNU Go 3.7.12测试了3盘,输1胜2后其积分一下子从1200升到1500。

呵呵,my test bot现在正在忙于下棋,呵呵,最讨厌碰上懒皮,不认输而溜走,害得我的bot得等上5分钟;碰到这种情况,有空时只好再去挂几个bot上去。你可能会问,一台机器能挂几个bot?哈,如果你的机器性能高的话,能挂很多个的;我挂3、4个bot后计算机还能做其他事呢;当然看你做什么事啦。。。
作者: 东南星    时间: 2008-4-26 18:59
在百度建了个博客:http://hi.baidu.com/walker2009
作者: jiuding    时间: 2008-5-4 12:46

作者: afool    时间: 2008-5-12 01:15
高手讲道:
"GNU Go 最新版是3.7.12,我在最新版cygwin下编译通过。太大了,约8MB多,另加cygwin1.dll及另一个dll,不知上传到哪里合适。准备先放到群里。

你如果想跟GNU Go下棋的话(主要是晚上),我可以挂一个bot到KGS;你也可以下载到你的计算机上下棋。如果你感兴趣的话,我可以告诉你(你)如何在KGS挂GNU Go。实际上任何support GTP的engine都可以挂。
另外,昨天我也在CGOS上挂了GNU Go 3.7.12测试了3盘,输1胜2后其积分一下子从1200升到1500。"

afool问道:
"请教高手,如何使得gnugo挂上kgs后能用有级别的方式下棋?,你可以公布你挂了GNU Go 3.7.12能得到积分的方法吗?"

[ 本帖最后由 afool 于 2008-5-12 01:19 编辑 ]
作者: 东南星    时间: 2008-5-14 01:12
标题: 回楼上:
(1) 这位朋友跑到这里来了。
我不是在那里已经说过了,这里再仔细说明一下:经我写邮件给KGS管理员,他们回信说,GNU Go在KGS自动下棋,不能得到Rank(级别);只有原创的、或者是改动较大(应该是功能显著增强的围棋程序) ,他们才有可能给你程序的KGS账号有得到rank的功能。
。。。你也可以写email给他们试试。
看到KGS有人挂着有rank的GNU Go,应该是跟KGS管理员熟悉的人吧。
(2) 另外也有办法,比如crack KGS的protocol. 但看来实现起来费劲;有这功夫,(有人建议) 不如自己写个连到IGS的东西了。顺便跟你说一下,我的NNGS clone已经好了,从internet连到我的NNGS(应该)已经没问题,两个GTP程序已经可以自动下棋的了(多爽)。问题是我再把所有东西再重装一遍,这样硬盘分区会更合理些。
(3) 近来,由于万事都刚开始,一下子要做的事很多,建议这位朋友进群吧。在群里,我是24小时之内会回复的。Internet速度。其它地方我是不一定每天都登录的(包括其它群)。不喜欢群的话,可以闭群。GNU Go最新版3.7.12已经上传到群里,是在VC下编译的,是6MB多的。懒得再在其它地方上传了。有好事者自会去做的吧。
(4) 要做的事情不少呢。。。。

[ 本帖最后由 东南星 于 2008-5-14 02:10 编辑 ]
作者: afool    时间: 2008-5-15 01:10
非常感谢你的回答.
我也已经将gnugo 3.712 在vc6.0下编译完了,环境是xp sp2 .解决了一些vc下的编译问题比如TCP/IP 客户端模式和服务器端模式的问题.
我研究gnugo的时间不长,才入门4~5个星期,请你多多指教.感觉有几个问题,
1-好像3.7.12本身没有处理GTP的控制端,是用另外的脚本程序实现的,所以我还没有摸索到使用TCP/IP 不借助其它程序来实现gnugo在本机直接通信下棋的功能,见笑了,因为一些原因,其余工具源码到今天还没有看完.
2-我将gnugo使用c++重写了一偏,各工具库部分也使用c++以windows的API形式将函数提取了,特别是我改了自动生成模式c代码的程序,使其生成的代码每个文件不超过65535行,所以3.7.12的13个程序在windwos下编译已经是很顺畅了,并不需要任何unix相关的环境,所有的编译错误和警告也消除了.这样我将gnugo改名为ngggo了,其它暂时还没有使用c++重写的部分程序也很快就会使用c++重写了,到时我们就有了一套gnugo的windows下的c++版本了,我这么做的原因很简单:我很少愿意不在属于自己的程序上花太多的精力,所以我们对付开源软件的一个有效的武器就是,立即用另一种语言重写,然后改变数据结构,再改变主要的算法,看看windows xp的源码,吸收了多少开源的代码!也仅仅是重写和改变数据结构而已,设计思想和命名体系很多几乎完全一样,所以我读xp的源码时就学到了一种技术:在尊重版权的前提下要充分利用开源的资源.
3-ngggo 在KGS上的名字目前是afool,几天后就正式叫ngggo了,有空可去看看,目前下棋的风格还有点象gnugo,主要是使用了它的模式库造成的.
作者: 东南星    时间: 2008-5-15 01:48
楼上不用客气。
看来是因为我在“那里”回答太简短造成了你没有理解。不好意思,我以为你已经把GNU Go的网站从头到脚都看了一遍的呢。(这几天我就是忙于看某些个网站,从头到脚的看,这边的事稍有点耽搁。)
(1) 两个GTP互相下棋:这里GTP是指支持GTP协议的围棋程序。是在Cygwin下用twogtp script来下棋,又用perl的,也有Python的;应该是Python的是支持新版GTP的。要知道,有的程序支持GTP方面不是很好(呵呵很多组合、一一道来太麻烦),简单来说,GNU Go、Aya支持GTP比较好;Mogo在CgfGoBan下可能会有问题(是前2天简单试了试)。twogtp文件可以在GNU Go网站上找;如果你能对英文感冒、或对cygwin(变种Unix/Linux)感冒,那没有办法了。
twogtp的缺陷是两个程序下棋时看不到下棋的过程,但最大优点是可以指定下棋的盘数,比如连续下20盘后自动停止。Perl、Python很简短的、很容易的。这里,如果用Aya程序来连另一个GTP程序,则可以看到下棋的过程了,但问题是下一盘后要手动后才可继续。Aya程序连早期的某些GTP程序可能会有问题。
上面说了这么多两个程序互相下棋,肯定是很需要的,至少是我觉得。
在Windows下能否两个程序自动下棋?理论上是可以的,你需要装Perl运行环境and/or Python运行环境。因为我那时先装了cygwin,所以Windows下没试。
GTP的网页:http://www.lysator.liu.se/~gunnar/gtp/
我看,现在这样你在KGS也不错的;也可以到CGOS去下棋。
作者: 东南星    时间: 2008-5-15 02:24
标题: 继续。
(2) GNU Go用TCP/IP来下棋,我也在那也简单的说过一句,在WindowsXP下没试通;后来想到是不是在Linux(包括Ubuntu)下人家已经试过。但这件事对我来说优先级比较低,没有继续测试。
如果你很需要的话,建议你先在Linux下测试。

(3) 你花了不少力气改程序,这很好。关键是要变成自己的东西,即要理解人家是怎么做的。

(4) 搞CGo的人很忌讳提GNU Go, 实际上大家都心知肚明,都在“参考”。比如Leela, 突然冒出来的、并且功能很强,但你有什么证据证明人家不是原创的呢?人家multi-core、multi-thread,专职搞国象的,这套东西已经搞过了。
但要注意,相似程度不要太高。人家觉得相似度太高的话,就不认为是原创的。这或许就是MoGo开局乱走、官子不收的原因吧!如何评价相似程度:你的程序走一步,GNU Go程序也走一步、并且列出前几步的走法、比如前3步的走法,然后下一盘或几盘棋,比较相同步的比例。我想,那帮GNU Go的人会去做的。老外下围棋不行,就喜欢编程序!确实,编程序能学到编程的知识。

(5) 这个名字太拗口了,至少得去掉一个g吧;但ggo一般是指GNU Go。不如叫nngo, No Name Go.
最后,祝你好运。
作者: 东南星    时间: 2008-5-15 03:03
GNU只处理GTP的client端,对。GTP的控制(control)端由glGo,GoGui等程序实现。

对了,好像你对如何调用GNUGO来人机对弈 貌似还不熟悉。
((a) 我是用PANDA-glGo,应该是最后版:http://www.pandanet.co.jp/English/glgo/
(b) GoGui也可以用,没有问题的。只是glGo用惯了。
(c) 也可以用CGoBan 1版、2版,这个比较旧。在Cygwin、Linux上可以用2版。
(d) 这里也可以CgfGoBan,在Aya网站的。
(e) Drago 界面太简单了,懒得去试了。
(f) 据说,SmartGo最新版也支持GTP client.
(g) 对了,还有这个Java写的程序,比如JaGo, 但JaGo是只用GMP的。JaGo连NNGS还不错的。
等等。
作者: bycn    时间: 2008-5-15 09:08
请问GUN GO 是与电脑,还是真人下?
作者: afool    时间: 2008-5-15 18:44
标题: 探讨一下借鉴开源代码的技术
非常感谢你给我的正在完善中的程序取了一个恰当的名字,我会认真考虑的.

ngggo的开发完全是基于gnugo的,我觉得这没有什么不好,但在另一个论坛上有朋友不能理解,我回了一个封山的帖子,就到这里来混了,下面将有关ngggo的搞法的步骤贴在这里,供你一笑,我这人脾气怪,用了人家的代码就要大张旗鼓的喊出来,在去某个论坛之前,好像我的代码从来还没有被人称为侵犯了谁的产权,我借鉴了什么代码,一定清楚讲明,我的搞法,比于我借鉴了大量的威美达的代码,但原作者还是非常认可我的代码是全新的程序,我不明白为和搞CG的人对版权的概念这么敏感呢,你实际的尊重人家的版权,重写了就行麻.

开放源代码的价值在于使专业人员省却了大量的重复劳动,我在这里公布一种专业级的程序员(包括微软)使用开放源代码构件非开源软件的常规技术,仅仅供你参考:
1-如有可能,找一份与自己的开发项目最为接近的开放源代码;
2-将这份开放源代码重写为vc下的一个工程(不使用MFC),如果原件是非c代码,就重写为c,如果原件是c++就重写为c代码(当然这些都是使用专用的c2cpp或者cpp2c来完成,速度极快.),调试通过;
3-使用某个字符串替换工具,例如UE,将这个工程中所有可能涉及到版权的名字都改为自己希望的名字,这一步包括工程名,文件名,函数名;
4-使用某个字符串替换工具,例如UE,将源代码的风格改为你希望的风格,例如微软的代码风格;
5-将项目最主要的数据结构,修改为自己认为感觉更好的数据结构,并将相关的函数一并修改好;
6-找出最主要的算法,修改为自己写的认为更好的算法;
7-如果有必要,对程序的体系结构做必要的修改;
8-编译,调试,发布之.

完成了上述8步,就认可你完成了一个新的软件的创作过程,你将依法拥有这个新的软件的全部知识产权.

凡原代码中不可能申报专利,不可能拥有独创思想权的命名,构思,架构如果你没有扩展的需求,就都没有必要改动,直接使用了就好,这样可以极大地节省你的时间.

例如.我打算开发一个类似gnugo的围棋机器人,完全没有必要一切重头开始,直接下载最新的gnugo3.7.12的源码,按照上述步骤,在纯净的windows xp sp2 + vc6.0 + sdk  for  sp2 环境下,我严格按照上述步骤,在不到24小时之内,我已经完成了1,2,3,4步,目前(从开始到现在不到2星期)已经完成了第5步和初步完成第6步,估计再有1个星期就全部完成了.

gnugo3.7.12 变成了 ngggo1.0.12, 在整个工程目录里,再也找不到一个"gnugo"串了,也找不到一个"GNU Go"串,也找不到一个"gg_"串,一共13个工程顺利编译完毕,ngggo1.0.12降生了.

这是在8小时内完成1,2,3步后的编译结果:

--------------------Configuration: board - Win32 Debug--------------------
board.lib - 0 error(s), 0 warning(s)
--------------------Configuration: dfa - Win32 Debug--------------------
dfa.lib - 0 error(s), 0 warning(s)
--------------------Configuration: engine - Win32 Debug--------------------
engine.lib - 0 error(s), 0 warning(s)
--------------------Configuration: fuseki - Win32 Debug--------------------
extract_fuseki.exe - 0 error(s), 0 warning(s)
--------------------Configuration: ngggo - Win32 Debug--------------------
ngggo.exe - 0 error(s), 0 warning(s)
--------------------Configuration: joseki - Win32 Debug--------------------
joseki.exe - 0 error(s), 0 warning(s)
--------------------Configuration: mkeyes - Win32 Debug--------------------
mkeyes.exe - 0 error(s), 0 warning(s)
--------------------Configuration: mkpat - Win32 Debug--------------------
mkpat.exe - 0 error(s), 0 warning(s)
--------------------Configuration: uncompress_fuseki - Win32 Debug--------------------
uncompress_fuseki.exe - 0 error(s), 0 warning(s)
--------------------Configuration: patterns - Win32 Debug--------------------
patterns.lib - 0 error(s), 0 warning(s)
--------------------Configuration: utils - Win32 Debug--------------------
utils.lib - 0 error(s), 0 warning(s)
--------------------Configuration: sgf - Win32 Debug--------------------
sgf.lib - 0 error(s), 0 warning(s)
--------------------Configuration: sgfgen - Win32 Debug--------------------
sgfgen.exe - 0 error(s), 0 warning(s)

我想,如果全部重头来,最少需要数月时间.毫无意义的浪费生命不必说,让开源的资源浪费也是一种罪恶.这8步转换技术中含有创造性的劳动,这也是严格遵循这8步作业的软件获得国际认可的原因,重要的是这8步劳动保证了既100%地尊重了开源代码的版权,也充分体现了对使用开源代码的程序员付出的劳动的尊重,其实这正是开放源代码软件运动的本意.
开源的本意就是不要重复劳动和集智,这种实际的功能并不能使得它能存活到如今,开源软件能存活至今的真实原因是国际大型软件公司台前的争斗和台后的大笔暗金的支撑,你没有加入这个明睁暗斗的体系,空着肚子奢谈什么GNU精神,对这些使用热情和兴趣支撑的自费CG人来说没有丝毫的帮助,只会将他们引入歧途!

这些话是我转过来与你探讨的,有些话不是应该在这里说的,希望你不要介意.

有空去kgs看看ngggo的下棋风格,目前还是有 明显的gnugo的痕迹,我想要在影响函数,局面评估,和核心算法上有大的改动后,就应该是一个全新的面貌了.
作者: 东南星    时间: 2008-5-15 19:48
回10楼:前面讨论的是:(1) GNU Go与其它电脑程序下,(2) 9楼一帖,说的是与人下。

回楼上:
做得很不错。但估计你这么做,人家还不会同意的。(再说这个Leela,我在Computer Go mailing list 以及其网站上从来没看见Leela提到过GNU Go。)
理由是,相似度太高。
自己玩,没问题。正式比赛,恐怕很难通过。至少要改开局定式(这个相对容易点);也要改官子;如果是在乎胜负,那就象MoGo那样,乱收官子,最后赢半目好了,赢不了时乱走几步就投降。

围棋程序现在的商业价值还不是太大,因为水平太低,大概要达到大家认可的业几的水平;这个,随着硬件的发展,尚需要好几年的时间。另,MoGo取得好成绩,是曾在五千台机器集群环境下运行的。
再考虑到中国内情,单个程序赚大钱的时代恐怕已经不存在了;即使存在,也很难存在较长一段时间。
建议你有兴趣不如看看网络编程、并行技术。你这个程序以后肯定要用并行(~multi-thread)编程,是必然的。

约两年以前----Wow、不至2年、刚查了一下、是在2004年,人家(美国)已经在玩多机编程、即所谓的网格计算,SlugGo,采用24台Mac机并行计算,也可用16台的。(现在还不时的能看到它的影子。) 原理很简单的,就是调用GNU Go做引擎、在分布式的环境下计算。貌似MoGo比这个更进一步,加了UCT。
举这个例子,是说国内的太落后。或许我是孤陋寡闻。
作者: afool    时间: 2008-5-15 22:44
嗯,有点意思!




欢迎光临 飞扬围棋 (http://bbs.flygo.net/bbs/) Powered by Discuz! X3.2