基于博弈树的开源五子棋AI教程及源码分享[开篇]

本文介绍了如何使用博弈树理论和经典算法创建一个开源五子棋AI,包括一维棋盘表示、Zobrist散列、Alpha-Beta剪枝、启发式搜索策略等技术。AI能在短时间内完成搜索,且探讨了多线程并行搜索和迭代加深等优化手段。
摘要由CSDN通过智能技术生成

基于博弈树的开源五子棋AI教程

五子棋是一个老少咸宜,复杂度相对较低游戏,本篇教程便是使用传统的博弈树的知识和一些棋类AI的经典算法来实现一个有一定算力AI。AI使用QT编写,在6核的家用笔记本在分支因子(搜索窗口的宽度)为10的情况下,6层深度可以在1s内搜索完成,8层深度可以在4s内完成。这里优先给出一个其中使用到的关键技术
喜欢的或者感觉有帮助请订阅专栏,并多评论 多点赞 多收藏

姊妹篇传送门合集

基于博弈树的开源五子棋AI教程[1 位棋盘]
基于博弈树的开源五子棋AI教程 [2 Zobrist散列]
基于博弈树的开源五子棋AI教程[3 极大极小搜索]
基于博弈树的开源五子棋AI教程 [4 静态棋盘评估]
基于博弈树的开源五子棋AI教程[5 启发式搜索]
基于博弈树的开源五子棋AI教程[6 置换表]
基于博弈树的开源五子棋AI教程[7 多线程搜索]

主选单
对战

1 位棋盘

搜索的速度取决于基础数据结构和搜索算法,本文在尝试了多种基础的数据结构,最终选择了数组+棋盘位表示方式。尝试了方式中包括vector+无位棋盘,vector+位棋盘以及现在的数组+位棋盘的形式。对于这三种方式,每一个改变对于搜索速度来说都是质的提升[有10倍左右]。

2 Zobrist散列

搜索算法需要对搜索状态进行唯一标识。zobrist Hash不仅可以使用最小的代价(一次uint64数的位运算)得到下一次搜索状态的散列值,还可以有效的减少hash冲突。zobrist散列技术广泛应用于各种棋类算法,不限于象棋,五子棋,黑白棋。

3 基于Alpha-Beta剪枝的负极大搜索

极大极小搜索是博弈树搜索最基础的算法,本文会简单介绍。这里使用是负极大搜索算法,可以避免在最大层/最小层决策出现不一致的情况。

4 静态棋盘评估

静态棋盘评估算法同样是AI算力的核心,但是本文疏于这部分的讨论,常见的有五元组评估和匹配算法。本文使用的匹配算法,通过扫描棋盘匹配到每个棋子的基础棋型(例如眠三,活四等),利用预先给定基础棋型分数表计算整个棋盘的得分。这种方案缺陷也是显而易见的,无法对子势精准衡量。相同棋盘得分,白子可能抱团,很好组织起攻势,黑子可能只有较散的眠三。

5 启发式搜索

极大极小算法搜索效率跟节点排序直接相关。节点排序越优,越容易产生剪枝,搜索效率也就越高。

5.1 最大化攻击者/最小化防守者排序

这里就是最简单对于当前节点棋盘分数/分数的增长量进行排序。得分越高,出现越靠前。

5.2 置换表启发

置换表保存了搜索过程中最优价值的节点信息,如果发现当前搜索状态在置换表,那么这一状态应该率先被搜索。

5.3 杀手表启发

杀手表保存了搜索过程中某一指定搜索深度下各个节点的剪枝信息。搜索过程中,在因为某节点产生的剪枝次数越多,这个值也就越大。

5.4 历史表启发

类似于杀手表,但是历史表忽略了搜索深度信息。只要在搜索过程中因为某一节点产生了剪枝,这个节点的价值就会变大,

6 VCF/VCT算杀

在棋局的中期有这大量的构成活三或者冲四点,这一块就是使用简化的极小极大搜索实现算杀模块。在搜索过程中博弈双方只考虑活三或者冲四/活四进攻,如果一方防守失败,即代表搜索到了一条VCX(VCT/VCF)路径。

7 多线程并行搜索

并行化搜索极大加快搜索[2倍左右,取决于本地性能]。这一部分只需要通过线程间的通讯,告诉搜索分支何时剪枝,何时退出。

8 开局库

开局库不在本文讨论的重点中,本文使用经典26种开局,但是只是使用了前三手。后面利用爬虫爬取一些公开的开局库目前502了,然后通过旋转的方式进行增广。

9 迭代加深

理论上,没加深一层,时间会呈分支因子倍增加。因此对于浅层搜索信息获取成本相对较低,但是却可以丰富杀手表,置换表,历史表,叶子表等等,这些信息可以很好的为深层搜索加速。

9 其他

强烈推荐一下几篇关于基于博弈树搜索的五子棋AI的博文。
第一篇是最经典的使用C++象棋AI的博文,内容涵盖面广。象棋百科全书
第二篇是比较火使用纯JS编写的五子棋AI。lihongxun945/gobang
第三篇是比较经典使用VB编写的五子棋AI。清月连珠
第四篇是发现写的详实的象棋AI博文FireMonkey3D之中国象棋程序设计

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值