BetaMeow----利用机器学习作五子棋AI

BetaMeow的起源

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

选取五子棋做为试手项目主要是如下几点缘由:前端

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

  • 受众多。由于五子棋的规则相对简单,使得其受众远比围棋多,换句话来讲,我把BetaMeow作出来了,那么能够测试的人也多。git

机器学习的简单介绍

近年机器学习数据挖掘,人工智能很火,但其实很多人对这些名词实际上是一头雾水,我尝试用我本身的语言解释,若是有什么须要完善的地方,欢迎提出。github

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

机器学习就是负责考虑如何创建模型,而数据挖掘则是负责其余地方,不过通常来讲,数据挖掘部分的工做可能会分开几个部门来作。bootstrap

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

五子棋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哦,亲)

感谢关注和支持。

相关文章
相关标签/搜索