前言:

  前几天在 csdn 下载资源的时候才发现自己 csdn 有近 200 的下载积分,看了看共享的资源,哈哈 ... 7年前写的五子棋游戏很受欢迎。

  下载地址:新手入门五子棋游戏     刚入行的时候写的,采用的 "权值" 计算法。

  在这个 AI 的浪尖风口上,借助我对游戏领域的热爱,在工作余外的时间唤起了我的想法,学习 AI 实现一个五子棋机器人。

  

一、五子棋介绍

  种类及区别

  先说说五子棋吧,通常大家玩的五子棋分为带禁手和不带禁手两个版本,
  (前者称之为连珠Renju,后者一般称之为五子棋Gomoku
  然而无论哪一个版本,先手黑棋均必胜。
  (所谓黑必胜的意思是,只要黑棋按照一定的方式下,白棋选择棋盘上的任何一个点都不可能赢棋。)

  (禁手规则增加程序复杂度,暂不考虑加入)

  这里只说结果,至于为什么参考文末资料:
  1992年Victor Allis通过编程证明不带禁手的五子棋,黑必胜。
  2001年Janos Wagner第一次证明的带禁手的五子棋,也是黑必胜。

  先手优势及棋谱介绍

  黑棋的优势到底有多大呢?在26个职业开局里,已经发现有19个是黑棋必胜的(一打必胜)。

  因此为了进一步削弱黑棋的优势,国际上推出五手两打的规则。
  (就是黑棋的第三步需要下两个点,但由白棋挑选让其下较弱的哪一个)
  可是人们发现黑棋带禁手依然是必胜。

  从实践的角度来讲,网上是可以搜索地毯谱的,一般在几百兆左右,可以用renlib软件打开,

  所谓地毯谱的意思就是黑棋会指定下法,但白棋每一步都可以选择棋盘任意位置,最后黑棋必胜。也就是说,只要按照此棋谱下棋,五子棋世界冠军都一定会输给你。
  ( 目前花月、浦月、云月、雨月、峡月、溪月、金星、水月、寒星、明星、岚月、新月、名月,山月,残月都是五手两打必胜)

  那么正式的比赛是怎么玩的呢?

  现在的正式比赛通常会常用三手交换五手两打这些复杂的规则来平衡比赛,但这些规则的各个分支也是逐渐被人破解,
  五子棋的比赛已经很大程度不是在考验自己的临场发挥,而是考验选手对于少量黑白平衡 分支的记忆情况。

  广义的五子棋

  不带禁手的五子棋是属于一类更为普遍的 m,n,k游戏 的一种特例,既 15,15,5。

  m,n,k游戏是指m行n列,轮流下子,连成k个算赢。这个在数学中专门的研究如果在最理想下法(Perfect Play)的情况下有什么样不同的结果,

  比如标准的三连棋(Tic-tac-toe)是3,3,3是一个平局,同样只有六路棋盘的五子棋也是平局,当然上面我们已经说明了15,15,5是先手必胜,

  还有研究发现11,11,5也是先手必胜。m,n,k游戏只有先手必胜和平局两种结果。由于每下一个子都一定会对下子一方那一方有优势,

  所以可以通过反证法证明m,n,k游戏里不可能有后手胜利的情况。如果后手有胜利的方法,

  那么先手可以提前借鉴(Strategy stealing)过来实现必胜。

  参考来自:Csdoker's Blog

二、人工智能介绍

  先看图,来自:《Google TensorFlow 深度学习架构》

  

  AlphaGo 的介绍跳过、说说我们中国阿里巴巴的 "鲁班" 号称每秒能够做 8000 张海报的 AI + Design 设计师。

  其实也是机器学习在图像领域的应用,通过循环训练的方式。

  在回来说本文的重点 "人机博弈" ,AlphaGo 主要是由三个部分组成:

  蒙特卡罗数搜索(Monte Carlo tree search MCTS)

  估值网络(value network)

  走棋网络(policy network)

  核心就是估值和走棋,故名思议。

  通过在大量人类围棋高手对弈的棋谱获取的训练数据,走棋网络能够预测 57% 人类围棋高手的下一步;

  但是通过这个还远远不足以战胜人类冠军,就融入了估值网络,就是给当前的棋盘,判断每个棋位输赢的概率;

  据说 AlphaGo 团队将进入游戏领域的研究,星际争霸2;

三、实现思路

  开发语言:HTML5、JS  (轻)

  绘制棋盘、胜负判断规则、界面操作功能,这些比较基础的内容暂时不考虑;

  采用一个三维数据来定义棋盘内容:  

var _chessPieces = new Array();
_chessPieces[16][16][1] = -1; // [16][16] 棋盘大小:15 * 15,[1] 黑白棋子 (-1 没有棋子,0 白色棋子,1 黑色棋子)

AI实现五子棋机器人(一)的更多相关文章

  1. 如何使用自对弈强化学习训练一个五子棋机器人Alpha Gobang Zero

    前言 2016年3月,Alpha Go 与围棋世界冠军.职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜,在当时引起了轩然大波.2017年10月,谷歌公布了新版五子棋程序 AlphaGo Ze ...

  2. 人工智能-调百度AI接口+图灵机器人

    1.登陆百度AI的官网 1.注册:没有账号注册 2.创建应用 3.创建应用 4.查看应用的ID 5.Python代码 from aip import AipSpeech APP_ID = " ...

  3. [初识]使用百度AI接口,图灵机器人实现简单语音对话

    一.准备 1.百度ai开放平台提供了优质的接口资源https://ai.baidu.com/  (基本免费) 2.在语音识别的接口中, 对中文来说, 讯飞的接口是很好的选择https://www.xf ...

  4. Flask&&人工智能AI -- 6 人工智能初识,百度AI,图灵机器人

    一.人工智能初识,百度AI的创建与应用 参考连接:https://www.cnblogs.com/xiao987334176/p/9620113.html 1. 百度ai开放平台 2. AipSpee ...

  5. 基于Flask和百度AI实现与机器人对话

    实现对话机器人主要有个步骤 : 一.前端收集语音传入后端 二.后端基于百度AI接口进行语音识别,转换成文字 三.对文字进行自定义验证或通过图灵端口进行处理,生成回复内容 四.将文字通过百度AI接口合成 ...

  6. AI—家庭组机器人平台环境配置,高级人工智能实验总结

    首先说一下我的环境:Ubuntu 12.04 32bit,  gcc 4.6.3 一,安装boost 1.48,建议用这个版本的,不然会出现兼容性问题 步骤: 其实在ubuntu下,可以用一下命令直接 ...

  7. 五子棋AI教程

    https://github.com/Chuck-Ai/gobang 我写了非常详细的中文教程,教你如何一步步编写自己的五子棋AI: 五子棋AI设计教程第二版一:前言 五子棋AI设计教程第二版二:博弈 ...

  8. 使用QT creator实现一个五子棋AI包括GUI实现(8K字超详细)

    五子棋AI实现 五子棋游戏介绍 五子棋的定义 五子棋是全国智力运动会竞技项目之一,是具有完整信息的.确定性的.轮流行动的.两个游戏者的零和游戏.因此,五子棋是一个博弈问题. 五子棋的玩法 五子棋有两种 ...

  9. 5G和AI机器人平台为工业4.0和无人机提供服务

    5G和AI机器人平台为工业4.0和无人机提供服务 Qualcomm 5G and AI robotics platform delivers for Industry 4.0 and drones 高 ...

随机推荐

  1. [转载]javascript+ajax+jquery教程11--正则表达式

    原文地址:javascript+ajax+jquery教程11--正则表达式作者:morflame 正则表达式可以: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个 ...

  2. 二.数据库游标对象cursor与实例

    1.数据库游标对象cursor 2.select实例 代码展示: import pymysql conn=pymysql.connect( host='192.168.199.249', port=3 ...

  3. pip 查看已安装模块、卸载指定模块、安装指定版本模块

    操作背景 最近使用 pandas+numpy+plotly 画heatmap(热力图),来处理股票数据,语法.步骤都没问题,但到画图那一步老是报错,且 plotly 版本为3.1.0: 最后找到原因, ...

  4. Differences between Python2 and Python3

    @1:str, repr和反引号是Python将值转为字符串的3种方法repr创建一个字符串,它以合法的Python表达式的形式表示该字符串.Python2还有反引号`,但Python3中没有反引号, ...

  5. beego——模板处理

    beego的模板处理引擎采用的是Go内置的html/template包进行处理,而且beego的模板处理逻辑是采用了缓存编译方式, 也就是所有的模板会在beego应用启动的时候全部编译然后缓存在map ...

  6. Java基础_基本语法

    Java基本语法 一:关键字 在Java中有特殊含义的单词(50). 二:标志符 类名,函数名,变量名的名字的统称. 命名规则: 可以是字母,数字,下划线,$. 不能以数字开头. 见名之意. 驼峰规则 ...

  7. [转]HBase hbck——检察HBase集群的一致性

    Hbase提供了hbck命令来检查各种不一致问题.hbck的名字仿效了HDFS的fsck命令,后者是一个用于检查HDFS中不一致问题的工具.下面这段非常易懂的介绍出自于hbck的源程序. 检查数据在M ...

  8. Spark机器学习6·聚类模型(spark-shell)

    K-均值(K-mean)聚类 目的:最小化所有类簇中的方差之和 类簇内方差和(WCSS,within cluster sum of squared errors) fuzzy K-means 层次聚类 ...

  9. Sybase:存储过程中采用临时表存储统计数据

    Sybase:存储过程中采用临时表存储统计数据 作用 很有效的提升统计查询速度,对于数据量亿级.千万级多表之间关联查询,非常有效: 使用 --无需定义临时表,直接使用 --自动释放临时表 select ...

  10. require和require_once经济性能对比

    require和require_once都是PHP函数,开发人员可以使用它们在某个特定的脚本中导入外部PHP文件.你可以根据应用程序的复杂度调用一次或若干次require_once/require.使 ...