策略部分就是哪个下载的权重的网络,根据棋面黑白子状态,输出一些下子位置和(在该位的)胜率。

网络输入:

Leela Zero网络权重输入是:```
1)在时间T = 0时行棋的一方
2)在时间T = -1时行棋的一方(如果T = 0则为0)
...
8)在时间T = -7时行棋的一方(如果T <= 6则为0)
9)时间T = 0时的另一方
10)时间T = -1时的另一方(如果T = 0则为0)
...
16)T = -7时的另一方(如果T <= 6则为0)
17)如果要移动黑棋则全部为1,否则为0
18)如果要移动白棋则全部为1,否则为0
```形成18个19 x 19平面。

由黑方和白方下子序号--->生成18通道输入数据:

void 生成18通道输入数据(vector<int> &顺序黑,vector<int> &顺序白,卷积层  &out)
{   float *d=out.data;int wh=out.width*out.height;bool b=false;//黑,白移动方if(顺序白.size()==顺序黑.size()){//黑下b=true;}int num=0;//步数int endn;//终止点if(b)endn= 顺序黑.size();//终止点elseendn= 顺序白.size();//终止点//移动方8步while(endn>0){if(b)for (int i = 0; i <endn; i++){d[顺序黑[i]]=1.0f;}elsefor (int i = 0; i <endn; i++){d[顺序白[i]]=1.0f;}endn--;num++;d+=wh;if(num==8)break;}while(num<8){d+=wh;num++;}//非移动方8步num=0;//步数if(b)endn= 顺序白.size();//终止点elseendn= 顺序黑.size();//终止点while(endn>0){if(b)for (int i = 0; i <endn; i++){d[顺序白[i]]=1.0f;}elsefor (int i = 0; i <endn; i++){d[顺序黑[i]]=1.0f;}endn--;num++;d+=wh;if(num==8)break;}while(num<8){d+=wh;num++;}//d+=wh*16;初始黑棋下子:第17全为1;if(b){//黑下for(int i=0;i<wh;i++)*d++=1.f;//白区不变为0}else{//白下d+=wh;//跳过黑区for(int i=0;i<wh;i++)*d++=1.f;}
}

模型定义:

struct go模型 //6残差,128通道
{//w_input层数据 * conv1;//3x3卷积batchnorm * bn1;//正则化int 残差块数量;//6块残差块 * 块;//策略层数据 * p_conv1;//1x1卷积batchnorm * p_bn1;//正则化层数据 * p_ip1;//全连接卷积//价值层数据 * v_conv1;//1x1卷积batchnorm * v_bn1;//正则层数据 * v_ip1;//全连接卷积层数据 * v_ip2;//全连接卷积//构造函数go模型();};

网络部分和前面超分重建没什么区别

由策略部分输出362个值(361(19x19) + 1手pass)

按胜率排序并返回所有的点:

void 找出最好的落点(卷积层 & d,vector<int> &前5序号)
{//按胜率排序并返回所有的点//只取前好的5个点不行(已有子)float *di=d.data;int size= d.width * d.height * d.depth;vector<float*> zp;int *zpIndex=new int[size];//索引数组排序用int *zpi=zpIndex;for (int i = 0; i <size; i++){zp.push_back(di++);*zpi++ = i;//记录索引}//对zp,zpIndex排序//快速排序;zsort(zp,zpIndex);//升序,胜率大的在后for (int i = 0; i <size; i++){//cout<<zpIndex[size-1-i]<<","<<*(zp[size-1-i])<<endl;;前5序号.push_back(zpIndex[size-1-i]);//降序,胜率大的在前}//_getch();delete []zpIndex;  zpIndex=NULL;  }

对战一局图:

由于没有蒙特卡罗树搜索(因为看不懂),官子有点弱,占大场还是比较历害的。

全文已结束。

下载:

人机对战围棋.rar

win32人机对战围棋(使用Leela Zero权重)程序,喜欢下围棋的人可以一试

https://download.csdn.net/download/juebai123/11485184

C++实现人机对战围棋(使用Leela Zero权重)-策略相关推荐

  1. 手把手教你:如何让围棋人工智能Leela Zero陪你“人机大战”

    如今,围棋人工智能的水平已经碾压人类,对于像我一样的围棋爱好者来说,早已等不及通过与人工智能对弈和复盘分析来快速提升棋力了.不过,独孤求败的AlphaGo Zero已然退出江湖,而绝艺.金毛.星阵等围 ...

  2. Python实现五子棋人机对战 | CSDN博文精选

    作者 | 吴小鹏 来源 | 数据札记倌(ID:Data_Groom) 五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题.这篇文章主要介绍了Python版本五子棋的实现代码,大家可以做个参 ...

  3. c语言五子棋人机对弈算法,使用canvas基于AI算法实现人机对战之五子棋

    这是我使用canvas基于AI算法实现的人机对战之五子棋 黑棋是我 下了几局,真心下不过啊!!! 不说了,源码奉上: 人机大战之五子棋 canvas{ display: block; margin:5 ...

  4. python人机对战的实验步骤_人机对战初体验:Python实现四子棋游戏

    继去年3月人机大战引发全球瞩目以来,围棋AI(人工智能)再度引发跨领域的关注:一个叫Master的围棋AI,几天时间,面对中日韩顶尖职业围棋选手,已取得60胜0败的恐怖战绩,展现出的围棋技艺已经到了人 ...

  5. java人际对战五子棋_系统框图如下 java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...

    展开全部 一.实验题目 五子棋游戏e69da5e6ba9062616964757a686964616f31333365633835. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策 ...

  6. 五子棋程序设计(C语言、人机对战、禁手)

    五子棋程序设计(C语言.人机对战.禁手) 一.程序需求分析 1.1五子棋简介 五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏. 五子棋有两种玩法.玩法一:双方分别使用黑白两色的棋 ...

  7. 人工智能 - 五子棋人机对战

    人工智能 - 五子棋人机对战 作者: jig    阅读人次: 6635    文章来源:本站原创    发布时间:2007-7-12     网友评论(8)条 原帖及讨论:http://bbs.bc ...

  8. 人机对战初体验:Python基于Pygame实现四子棋游戏

    人机对战初体验-四子棋游戏 继去年3月人机大战引发全球瞩目以来,围棋AI(人工智能)再度引发跨领域的关注:一个叫Master的围棋AI,几天时间,面对中日韩顶尖职业围棋选手,已取得60胜0败的恐怖战绩 ...

  9. java五子棋游戏人工智能_基于java的五子棋游戏(人机对战)

    [实例简介] 我毕业设计自己做的基于java的五子棋游戏软件,获得优秀论文,功能在单纯的人机对战上算比较齐全,也比较好玩!希望为毕业设计做游戏的同学提供些查考! 软件的基本功能 软件的基本功能介绍如下 ...

  10. 设计一款博弈类游戏的人机对战算法、策略_卡牌游戏八合一,华人团队开源强化学习研究平台RLCard...

    雷锋网 AI 科技评论按:在过去的两三年中,我们经常听说人工智能在棋牌类游戏(博弈)中取得新的成果,比如基于深度强化学习的 AlphaGo 击败了人类世界冠军,由 AlphaGo 进化而来的 Alph ...

最新文章

  1. SAP MM Transportation of PR Release Strategy with Classification
  2. 2014年4月的北京大学微电子考研复试题-什么是小信号?
  3. 动态添加ContextMenuStrip项(ToolStripItem)
  4. cenos6.4安装gvim
  5. opencv基础知识及其一些例子
  6. TYVJ 1014 乘法游戏
  7. ios 怎么判断字符串的字节数_iOS 计算字符串长度-boundingRectWithSize:
  8. 奇怪的问题:Windows 11 22H2任务管理器颠倒显示GPU使用率
  9. 抖音很火的计算机音乐,抖音最近很火的几首背景音乐(BGM),推荐给大家很好听...
  10. BMFont 制作字体时,无法导入图片
  11. tp6 获取session_TP6文档
  12. 视频号领域发布的不同时间,视频号上热门秘诀:国仁楠哥
  13. jQuery引起的用layer弹出层上传文件不能获取文件名的解决(thinkphp5)
  14. java支付宝rsa2签名_JAVA RSA签名 解签(利用支付宝封装的函数)
  15. 如何调出手机信任计算机的指令,如何取消信任iPhone或iPad上的计算机 | MOS86
  16. debian 安装wine
  17. 推荐5款自学手机APP,请低调收藏,让你变得越来越优秀
  18. 共享自己电脑硬盘空间还能赚钱?
  19. 定义一个联系人类其中有姓名 电话 年龄 性别 家庭住址 身份证号码 父母联系方式属性和无参构造方法有参构造方法...
  20. Linux系统用什么翻译软件,Linux安装翻译软件StarDict的步骤(自己的操作总结)

热门文章

  1. 如何计算Lyapunov exponent spectrum?matlab计算李雅普诺夫指数
  2. android jni c调用java,Android JNI中C调用Java方法
  3. 小米5主板原理图_小米5手机拆解及评测 小米5拆机详细图解教程
  4. 基于昊芯DSC28034+四针OLED屏(保姆级教程)
  5. DSP2812入门4——构建完整工程
  6. [渝粤教育] 南开大学 面向对象程序设计 参考 资料
  7. 海纳百川下载器(道客巴巴免费下载器)程序已停止工作解决方法
  8. Vue配置TinyMCE富文本编辑器 + 图片(本地)上传到服务器
  9. 小学生python游戏编程6----碰边变颜色的小球
  10. 苹果id注册邮箱方法