在开源的围棋项目中,fuego应该是棋力最强的了。
使用很简单,这里主要分析一下代码。
代码是c++的,可以在gcc下编译,用vc2010稍稍修改一下也可以。这不是主要的,关键这么小的项目,也引入了boost,向手机上移植,一是稍麻烦一点,当然fuego已经成功移植到iPhone上了。另外就是代码体积也庞大了一些。计划去掉boost,用标准c/c++修改成更通用一些。
fuego结构如下:
gtp是个通信协议,外挂一个界面,或双机对弈时使用。
smartgame是monte Carlo utc核心算法
go是围棋相关功能,比如棋盘布局,棋子链表。
gouct是围棋算法,调用smartgame。
fuegomain是与外界的接口,通过gtpengine传入命令,传出结果。
用到boost的地方主要在gtpengine和smartgame。
gtpengine很简单,就是stream的通话。
这样,重点就在smartgame上。
主要代码流程:
main()
{.....
FuegoMainEngine engine(g_fixedBoardSize, g_programPath, g_noHandicap);
.....
GtpInputStream in(cin);
GtpOutputStream out(cout);
engine.MainLoop(in, out);
}
很明显,FuegoMainEngine是主要处理模块。
再:
class FuegoMainEngine
: public GoGtpEngine
{
...
GoUctCommands m_uctCommands;
}
明显看出,FuegoMainEngine接收命令,进行处理,再返回结果。
传入传出的命令遵守gtp协议。
到此,程序流程已经很清楚了,下一步开始分析命令,然后再进入算法。
看代码应该类似斯诺克,先轻轻一碰球,把握整体,再一一把球打进袋。用成语来解释,就是庖丁解牛。
阅读(5064) | 评论(0) | 转发(0) |