利用python实现,基于“博弈树”的AI五子棋

python讨论qq群:996113038
代码及相关资源获取:关注微信公众号:python趣味爱好者,
后台回复:五子棋
获取源代码开发工具:python3.6.4。
需要安装的库:graphics,time。
可以联系群主安装

效果演示:
在这里插入图片描述

基本原理

我们用到了博弈论的算法,下面我简单介绍一下博弈树:
博弈树类似于状态图和问题求解搜索中使用的搜索树。在AI五子棋中,博弈树的节点对应于某一个器具,其分支表示走一步棋。根部对应于开始位置。其叶节点表示对弈到此处结束。竞赛的结果可以是赢,输,平。下面就是一棵典型的博弈树:
在这里插入图片描述
如果按照暴力算法,将一局五子棋的所有可能性全部列举出来,理论上讲肯定是可以赢的。但是这样会耗费巨量的计算力。所以枚举法是不可行的。剪枝就是减去一些完全没有意义的走法。大大降低计算量。

部分代码

我们需要设定一个目标函数,计算未来几步怎么走能够使这个目标函数最大化。这样我们就需要对每一种走法的“分”做一个评估,这里的“分”代表的是这个走法产生的棋局优势。
首先我们要写函数评估局势,下面是一个例子:这是判断四个方向里,活四局势的个数。
在这里插入图片描述
我们还要写出:冲四局势个数,四个方向里活三,以及八个方向里断三的个数,该点在四个方向里,是否有六子或以上连线,统计在u方向上,和key值相同的点的个数,即和key同色的连子个数。估价函数基本规则如下:
在这里插入图片描述
我们不断让机器的分数越来越高就行了。
参考资料:论文:《基于博弈树的五子棋算法研究》—罗景,叶俊民,赵良等参考来源:https://github.com/hfq0219/wuziqi

在这里插入图片描述

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值