五子棋AI算法
文章平均质量分 79
lihongxun945
膜拜大牛
展开
-
五子棋AI算法第三篇-Alpha Beta剪枝
剪枝是必须的上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义。可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250000,在我的酷睿I7的电脑上一秒钟能计算的节点不超过 5W 个,那么 625W 个节点需要的时间在 100 秒以上。电脑一步思考 100秒肯定是不能接受的,实际上最好一步能控制在 5 秒 以内。顺便说一下原创 2016-02-15 14:36:27 · 47883 阅读 · 13 评论 -
五子棋AI算法第四篇-启发式搜索函数
什么是启发式搜索之前我们讲到需要优化一个重要的函数,就是 gen 函数 顾名思义就是生成待搜索的位置的函数。这个函数目前做了一个很简单的处理,就是只要一个空位的周围有邻居即可。而其实这么做是非常不合理的,它的不合理性体现在两方便:没有对结果进行排序,完全是按照数组的遍历顺序的。而Alpha Beta 剪枝的效率是非常依赖节点顺序的,这个我们马上就会讲一下。没有排除不需要节点。如果能减少一些不必要原创 2016-02-15 15:25:38 · 18616 阅读 · 2 评论 -
五子棋AI算法第一篇-我对谷歌Alphago的看法
最近Google宣布他们的围棋AI以5:0的战绩打败欧洲围棋三冠王。我一直对人工智能比较感兴趣,正好趁年前空闲的几天用JS写了一个五子棋的AI。其实很久以前就用自创的算法写过一个JAVA版的五子棋AI,不过棋力很不理想。这次用的是JS写的,所以无论任何平台上只要能打开网页的都可以玩。google爆出这个新闻之后,很多人觉得这是不是意味着电脑智商已经在人类之上了,围棋已经没有意义了之类的。甚至觉得这是原创 2016-02-02 11:17:18 · 28438 阅读 · 14 评论 -
五子棋AI算法第二篇-极大极小值搜索算法
AI实现的基本思路-极大极小值搜索算法五子棋看起来有各种各样的走法,而实际上把每一步的走法展开,就是一颗巨大的博弈树。在这个树中,从根节点为0开始,奇数层表示电脑可能的走法,偶数层表示玩家可能的走法。假设电脑先手,那么第一层就是电脑的所有可能的走法,第二层就是玩家的所有可能走法,以此类推。我们假设平均每一步有50种可能的走法,那么从根节点开始,往下面每一层的节点数量是上一层的 50被,假设我们进行4原创 2016-02-02 18:17:02 · 69269 阅读 · 16 评论 -
五子棋AI算法第七篇-Zobrist
关于本博客这个博客不是把五子棋算法研究透彻之后再写的,而是一边研究算法一边写代码,同时一边写博客,所以有些博文的顺序不太对,比如 Zobrist 其实应该放在算杀之前就讲的。不过这并没有大的影响,总体上的顺序是OK的。另外,这一系列博客讲的五子棋代码其实是一个开源的项目,源码地址: https://github.com/lihongxun945/gobang由于是边写代码边写博客,所以博客中的代码不原创 2016-03-07 17:28:39 · 16394 阅读 · 3 评论 -
五子棋AI算法第五篇-算杀
关于剪枝问题前面讲到的通过Alpha-Beta剪枝和启发式搜索可以将4层搜索的平均时间降低到1秒以下。只有这两个优化方式其实目前最多可以做到6层搜索,就是把AI和玩家各向后推算三步。6层搜索的棋力其实相当弱,碰到经常玩五子棋的人基本都会输,更不要说对五子棋有研究的玩家。以目前的平均一个节点有50个子节点的搜索方式,把搜索效率提高50倍则可以增加一层搜索深度。而除了前面讲到的AlphaBeta剪枝和启原创 2016-02-24 13:43:02 · 18758 阅读 · 4 评论 -
五子棋AI算法第六篇-迭代加深
前面讲到了算杀,其实在算杀之前应该讲一下迭代加深。因为这些文章是我边做边写的一些笔记,所以顺序上可能不是那么严谨。AI没有找到最优解按照前面的所有算法实现之后(当然不包括算杀),会发现一个比较严重的问题,就是电脑在自己已经胜券在握的情况下(有双三之类的棋可以走),竟然会走一些冲四之类的棋来调戏玩家。这种走法出现的本质就是因为现在的AI只比较最终结果,并没有考虑到路径长短。所以很容易出现在6层搜索到一原创 2016-02-29 11:16:54 · 7924 阅读 · 1 评论 -
五子棋AI算法第八篇-重构代码
为什么需要重构之前的代码有很多松散的模块组合在一起。在把 Zobrist 集成进去时,会发现全部需要走棋的操作其实都需要进行一次 Zobrist 异或操作。另外在逻辑上,其实很多模块都是可以合并到同一个类的,所以这次把代码进行了一次大的重构。所以如果发现博客说的一些模块找不到了也是很正常的,因为大部分模块都被移到了 Board 类中。这次重构主要的工作就是 把AI相关的代码分成了四个模块:Boar原创 2016-03-27 16:25:44 · 6833 阅读 · 2 评论