BetaMeow的起源

前段时间AlphaGo和李世石广受关注,作为人工智能的脑残粉,看完比赛后激动不已,因为有一定的机器学习的基础,便打算撸一个棋类的AI,但我还算有点自知之明,围棋AI,甚至google打算做得通用AI是做不出的了,所以打算撸一个五子棋的AI。

选取五子棋作为试手项目主要是以下几点原因:

规则简单。为了简单起见,BetaMeow只要有一方练成五子就可以判输赢。

受众多。因为五子棋的规则相对简单,使得其受众远比围棋多,换句话来说,我把BetaMeow做出来了,那么可以测试的人也多。

机器学习的简单介绍

近年机器学习,数据挖掘,人工智能很火,但其实不少人对这些名词其实是一头雾水,我尝试用我自己的语言解释,如果有什么需要完善的地方,欢迎提出。

比如说,有一个模型能够能够根据一个人的社交动态,推断出他是喜欢苹果还是香蕉,那么,我现在想知道某个社交平台上市喜欢苹果的人多,还是喜欢香蕉的人多。显然,我把社交平台的数据扔进模型中跑一遍就可以了,但社交平台数据肯定不是说一两个txt文件这么简单啊。这时就可能涉及网络爬虫(收集数据),分布式存储(数据量巨大的时候),过滤无关的数据(数据清洗),修改模型使得符合当前业务场景(花式调参),跑完数据获得结果后决定采取什么商业措施等。(BI)

机器学习就是负责考虑如何建立模型,而数据挖掘则是负责其他地方,不过一般来说,数据挖掘部分的工作可能会分开几个部门来做。

简言之,机器学习是内功,而数据挖掘则是机器学习的一种用途。而人工智能,就是更广的概念了

五子棋AI

回到正题上,传统的五子棋AI采用的搜索算法,这个方面其实已经很完善,听闻已经出现了无解的结果(玩家无法取胜)。但BetaMeow本质上是我在学习机器学习方面的实战项目,所以我想办法利用机器学习的方面的算法实现。

最后选择决策树算法。通过决策树判断该局的状况,属于对方(玩家)占优还是己方(AI)占优。

什么叫决策树

至于什么叫决策树,有时真的是一图胜千言。

图片来至于http://www.52analysis.com/shujuwajue/2441.html

简单来说,通过一层层的筛选下来,你就能获得相应的结果。

如何构建决策树

关于如何构建决策树,如果需要了解文字说明,可以参考这里,如果需要参考python的代码实现,可以参考下文给出的github地址,这里只给出简单总结。

简单描述

在一个二维集合(可以看成矩阵)中,第二维代表每一个决策的实例,用某种方式(例如信息增益(首先要计算熵))在确定一个最佳分割点(p),然后以该点作为根节点,此时剩下的子集有两种情况,要么作为决策树的结果,要么递归下去创建子树。

选取特征

有句话叫好的数据胜过好的模型,经过这番实践我算是真正认识到这句话的意思。机器学习的算法不是你随便扔一个数据集下去,他都能训练出一个有效的模型。我曾经把整个棋局扔给他它训练,然而并没有什么乱用。几番周折才角色以连子形式作为训练的内容。

举个例子

[1,1,0,1,2]

这个训练集表明,玩家的连子形式已经是1,1,0,1(0表示空位),如果玩家顺利连成了4子,那么AI则彻底出于劣势,因为如果4子是在棋盘中间的话,那么ai只能堵一边,玩家还是可以在另一边连成5子。

所以ai应该下在2号位,阻止其连成4子。

我的代码中有大量如此的数据,用于教会ai决定是及时阻止对方,还是提高自己的连子数。(跑两次不同的决策树)

BetaMeow的未来与本文后话

BetaMeow现在显然是不完善的。

首先是五子棋规则的本身,首先是五子棋棋盘应该15x15,然后无知的我把它弄成了19x19,然后规先后手的规则好像也有不同的规定,但我没有考虑太多这方面,毕竟我的主要目的是机器学习的实践,并非做出一个五子棋游戏。五子棋只是一个载体。

同样是因为我的目的在于算法,所以界面不太美观,甚至在不同分辨率上可能有问题(使用的bootstrap应该问题不大),所以如果有较为熟悉前端的朋友,欢迎修改修改后Pull Requese给我。

第二点,算法本身也有不完善的地方。

因为目前的方案是遍历棋局,分析各店的形式,可能因为循环的原因,会导致后面的选择覆盖掉前一个选择,从而错过了一些最好的选择。

下一步会是给每一个选择的结果加上权重,从而避免上述问题。

嗯,说了这么多,最后给出这个项目的github地址

my_github

重要的事情再说一遍。

前端真的做得很烂,如果有熟悉前端的朋友帮我修改一下,真的万分感谢。

这个github地址会记录下我学习机器学习和数据挖掘的各种小项目(包括我之前的图片识别的项目),将会持续更新很长一段时间,如果你对这个有兴趣,欢迎关注和支持。

如果你也有机器学习和数据挖掘等相关的项目,欢迎推荐给我,大家互相学习的同时,我也会在我的项目的README中给出你项目的URL(你也要给出我项目的URL哦,亲)

感谢关注和支持。

文章来源:segmentfault,作者:肥肥的兔子。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:william.shi#ucloud.cn(邮箱中#请改为@)进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

后台-系统设置-扩展变量-手机广告位-内容正文底部

python五子棋算法_BetaMeow----利用机器学习做五子棋AI相关推荐

  1. BetaMeow----利用机器学习做五子棋AI

    BetaMeow的起源 前段时间AlphaGo和李世石广受关注,作为人工智能的脑残粉,看完比赛后激动不已,因为有一定的机器学习的基础,便打算撸一个棋类的AI,但我还算有点自知之明,围棋AI,甚至goo ...

  2. python分类算法报告_Python机器学习(1)——决策树分类算法

    1.决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归.不过对于一些特殊的逻辑分类会有困难.典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题. 决策树的构建 ...

  3. python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)

    本文转自博客园,作者为hsm_computer 原文链接:https://www.cnblogs.com/JavaArchitect/p/11717998.html在笔者的新书里,将通过股票案例讲述P ...

  4. python神经网络算法pdf_Python与机器学习实战 决策树、集成学习、支持向量机与神经网络算法详解及编程实现.pdf...

    作 者 :何宇健 出版发行 : 北京:电子工业出版社 , 2017.06 ISBN号 :978-7-121-31720-0 页 数 : 315 原书定价 : 69.00 主题词 : 软件工具-程序设计 ...

  5. python线性回归算法简介_Python机器学习(二):线性回归算法

    机器学习研究的问题分为分类问题和回归问题.分类问题很好理解,而回归问题就是找到一条曲线,可以最大程度地拟合样本特征和样本输出标记之间的关系.当给算法一个输入时,这条曲线可以计算出相应可能的输出.回归算 ...

  6. 【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计

    基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计 摘要 蒙特卡洛树搜索算法 五子棋博弈的状态价值函数 附1:详细论文说明下载: 附2:实现代码下载(2022.10更新后代码): 摘要 随着人工智能 ...

  7. 利用机器学习识别细碎图斑实战(2):技术路线

    本节主要讲利用机器学习做细碎图斑识别的技术路线,我们以后将按照这个技术路线完成整个过程. 首先看看整个技术路线图: 整个流程总共分成七个步骤,这七个步骤也是项目分析类任务的标准流程,下面我们简单来解释 ...

  8. 基于强化学习的五子棋算法设计-python代码完整实现

    目录 1  课程设计目的 2  设计任务与要求 3  设计原理 3.1  强化学习 3.2  蒙特卡洛树搜索 4  模型介绍 4.1  模拟 4.2  走子 4.3  神经网络 5  仿真过程与结果 ...

  9. python数据挖掘课程设计,利用Python进行机器学习和数据挖掘概述

    利用Python数据挖掘和机器学习的概述 前言: 本文主要描述了使用Python进行数据挖掘业务的优势并介绍了相关的数据处理工具包pandas和机器学习算法库scikit-learn. 为什么使用py ...

最新文章

  1. 在人工智能时代,我们更需要理解自己的智能 | 艾伦脑科学研究所所长克里斯托夫·科赫STEP峰会演讲实录
  2. python实现ks算法_Python实现Dijkstra算法
  3. TiDB 在知乎万亿量级业务数据下的实践和挑战
  4. InstantClient安装使用
  5. 【Linux系统编程】POSIX有名信号量
  6. 与计算机病毒相关的小故事,我和计算机病毒的故事2000字论文
  7. 计算机板报设计简单,计算机板报制作
  8. 软件开发工程师证书有用吗_bim工程师证书有用吗
  9. bzoj 4401: 块的计数(结论)
  10. 基于增量更新的协同过滤
  11. c++ primer 19th 特殊工具与技术
  12. Docker安装ELK详细步骤(生产试验,适用所有版本)
  13. python计算等额本金_等额本金还款计算公式
  14. iDo网站在线设计系统的原理
  15. js实现-别踩白块儿-类
  16. 大神论坛 利用活跃变量分析来去掉vmp的大部分垃圾指令
  17. 深入浅出人脸识别原理
  18. jQuery 验证码输入错误后自动刷新验证码 点击验证码图片刷新验证码
  19. Pt100转RS-485,热电阻温度Modbus数据采集模块 WJ125
  20. 海外服务器延迟,国内用户访问海外服务器延迟高,线路不稳定怎么办

热门文章

  1. SMSLib实现Java短信收发的功能
  2. ghost和WINHEX磁盘备份功能的区别
  3. 完美解决ubuntu 64位安装qq
  4. 复合充血模式和领域服务调度-阿里互联网法院项目
  5. 3 Drools语法介绍(contains和not contains,memberOf和not memberOf,matches和not matches,update,insert,retract)
  6. 轻松保存扣扣闪照!是的,闪照保存!很简单!学不会扣眼珠子!
  7. Macbook翻转鼠标滑轮
  8. Java项目:SSM汽车保险车险理赔管理系统
  9. js修改对象数组中其中某一项属性值
  10. 常用的ECMAScript 6以后的新特性