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

时间:2024-04-11 13:34:31

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

效果演示:
利用python实现,基于“博弈树”的AI五子棋

基本原理

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

部分代码

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

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