当前位置 : 主页 > 编程语言 > python >

我用千行代码做了python版AI五子棋?还真玩不过AI了!!

来源:互联网 收集:自由互联 发布时间:2022-06-15
b站视频演示 python版AI五子棋 ​​b站主页​​ 项目背景 机器博弈是人工智能领域的重要分支,它的研究对象多以复杂的棋牌类智力游戏为主,已经得到解决的棋类游戏,几乎全部都应

b站视频演示


python版AI五子棋

​​b站主页​​

项目背景

机器博弈是人工智能领域的重要分支,它的研究对象多以复杂的棋牌类智力游戏为主,已经得到解决的棋类游戏,几乎全部都应归功于机器博弈近半个世纪的发展。计算机解决问题的优势在于能把不易解析的问题,借助于现代计算机的运算速度优势枚举出所有的合理情形而得解;然而,博弈问题的复杂程度决定了它不能过度依赖机器的计算能力。许多待解决的或已经解决的棋类,其状态空间复杂度或博弈树复杂度量级都太过庞大,所以我们需要添加约束,并且采用合理的算法进行优化。

原理

对于五子棋这样的博弈类AI,很自然的想法就是让计算机把当前所有可能的情况都尝试一遍,找到最优的落子点。这里有两个问题:

  • 如何把所有可能的情况都尝试一遍;
  • 如何定量判断某落子点的优劣。
    对于第一个问题,其实就是所谓的博弈树搜索,对于第二个问题,其实就是所谓的选择评估函数。评估函数的选取直接决定了AI算法的优劣,其形式也千变万化。可以说,每个评估函数就是一个选手,对不同的棋型每个选手自然有不同的看法和应对措施,当然他们的棋力也就因此各不相同了。但博弈树搜索就比较固定了,其核心思想无非是让计算机考虑当前局势下之后N步所有可能的情况,其中奇数步(因为现在轮到AI下)要让AI方的得分最大,偶数步要让AI方的得分最小(因为对手也就是人类,也可以选择最优策略)。
    剪枝来减少计算量:
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_博弈树搜索
  • 棋型知识库

    活四:有两个连五点(即有两个点可以形成五),图中白点即为连五点。当活四出现的时候,整个局势已经无法阻止连五了,活四的归属方一定能取得胜利
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_python_02

    冲四:有一个连五点,如下面三图,均为冲四棋型。图中白点为连五点。 相对比活四来说,冲四的威胁性就小了很多,因为这个时候,只要跟着防守在那个唯一的连五点上,冲四就没法形成连五。
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_python_03

    活三:可以形成活四的三,如下图,代表两种最基本的活三棋型。图中白点为活四点。活三棋型是进攻中最常见的一种,因为活三之后,如果对方不以理会,将可以下一手将活三变成活四,而活四是无法防守的。所以,面对活三的时候,需要非常谨慎对待。在没有更好的进攻手段的情况下,必须对其进行防守,以防止其形成可怕的活四棋型。
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_博弈树搜索_04

    眠三:只能够形成冲四的三,如下各图,分别代表最基础的六种眠三形状。图中白点代表冲四点。眠三的棋型与活三的棋型相比,危险系数下降不少,因为眠三棋型即使不去防守,下一手它也只能形成冲四,而对于单纯的冲四棋型,是可以很简单的防守住的。
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_博弈树搜索_05

    活二:能够形成活三的二,如下图,是三种基本的活二棋型。图中白点为活三点。
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_人工智能_06

    眠二:能够形成眠三的二。图中四个为最基本的眠二棋型,图中白点为眠三点。
    我用千行代码做了python版AI五子棋?还真玩不过AI了!!_机器学习_07

    项目介绍

    本项目使用python语言,主要使用博弈论算法,然后再窗口化界面,最终形成该AI项目。源代码实在太多了,还有图片文件,所以我就不直接贴在这里了。主页左侧联系我,我再单独发给你好了。希望本项目对你有所启发,你的三连是对我莫大的支持!


    上一篇:机器学习生命周期
    下一篇:没有了
    网友评论