Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1242380
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2019-05-20 16:41:59

Leela zero是一个开源围棋项目,。
编译很容易,根据官方文档:

Example of compiling - Windows

# Clone github repo
git clone 
cd leela-zero
git submodule update --init --recursive

cd msvc
Double-click the leela-zero2015.sln or leela-zero2017.sln corresponding
to the Visual Studio version you have.
# Build from Visual Studio 2015 or 2017

唯一遇到的麻烦就是github有时下载非常慢。 Leela zero本身是基于GTP协议的程序,如果不使用第三方客户端的话,启动后需要在命令行下手动输入命令下棋。出于调试和移植的目的,这里用MFC改写了一下,增加了一个简单的UI,然后调用leelaapp.c里面的代码,整合成了一个独立的demo程序,见:
目前简单实现了人机对弈和悔棋两个功能。
主要功能在LeelaApp这个class中,比如:


void LeelaApp::init()
{  // Set up engine parameters  GTP::setup_default_parameters();  cfg_cpu_only = true;  cfg_num_threads = std::min(SMP::get_num_cpus(), size_t{ MAX_CPUS });  cfg_num_threads = 2;  cfg_allow_pondering = false;  cfg_max_playouts = 100;  cfg_timemanage = TimeManagement::FAST;  cfg_timemanage = TimeManagement::OFF;  cfg_max_visits = UCTSearch::UNLIMITED_PLAYOUTS;  //cfg_max_visits = 3200; // Default to self-play and match values.  //cfg_fpu_root_reduction = cfg_noise ? 0.0f : cfg_fpu_reduction;  cfg_fpu_root_reduction = 0.25;  //parse_commandline(argc, argv);  // Disable IO buffering as much as possible  std::cout.setf(std::ios::unitbuf);  std::cerr.setf(std::ios::unitbuf);  std::cin.setf(std::ios::unitbuf);  setbuf(stdout, nullptr);  setbuf(stderr, nullptr);  init_global_objects();  maingame = std::make_unique();  /* set board limits */  maingame->init_game(BOARD_SIZE, KOMI);  time_settings("0 10 1");
}

基本都是leela-zero的原始代码,只是改用MFC界面下调用。

根据这个demo程序,界面再优化一下,完善一下功能,可以做一个简单的围棋客户端了。
这里最大的问题是:leela-zero每次启动加载权重文件,如果有时间把权重文件分析好,放到内存缓存起来,这样每次启动客户端会节省很多时间。

这个程序是用VC2017写的,只是在leela zero的源码上增加啊界面,同样道理,使用Qt,C#等开发工具一样能实现同样效果。同样也可以在Android和iOS实现。
                                   
阅读(1565) | 评论(1) | 转发(0) |
0

上一篇:Berkeley DB简单使用

下一篇:C++工程

给主人留下些什么吧!~~

sxcong2019-05-20 16:44:15

CU的内容怎么不换行?编辑功能越来越差,难怪没人来了