应用对抗搜索实现五子棋AI

目标

1.使用对抗搜索方法(MINMAX和Alpha-beta)实现五子棋AI。

2. 比较采用不同实现方法的五子棋AI的性能差异。

搜索方法

AI根据对棋盘局势的判断,采用对抗搜索的方法得到最佳下棋位置,下棋位置的优劣可以通过效用函数评估。

MINMAX:极小极大方法。搜索从MAX节点开始,MAX节点返回直接后继MIN节点中效用值最大作为对该MAX节点效用评估;而MIN节点返回直接后继MAX节点中效用值最小的作为对该MIN节点的效用评估。当搜索条件达到时,返回对棋盘(针对MAX节点)效用值(通过效用函数计算得到)。

Alpha-beta: MINMAX的改进方法。算法在搜索时维持当前MAX节点最优值alpha和当前MIN节点最优值beta。当节点的效用值比MAX节点的alpha或MIN节点的beta更差时,剪枝掉该节点的分支。最好的情况下,Alpha-beta比MINMAX搜索深度要多一倍。

决策方法

注意到上述的搜索方法是效用评估是针对MAX节点的,换句话说就是搜索MAX选手(这里是AI)的最大效用位置。但在五子棋实现时,由于效用函数设计只对优势特征计分,没有对劣势特征进行扣分,所以搜索得到的位置没有考虑到对手的对自身效用的评估,换句话说没有考虑到棋盘局势。当棋盘局势对AI不利时,AI不考虑局势,只下对自己优势有帮助的位置,而不去下能减少对手优势(对手效用高)的位置,很可能导致失败。另外,考虑到采用固定策略的AI变化性不大,可以引入一些随机因素增加AI的变化性。因此,这里设计了A、B两种策略进行决策。

策略A:AI计算自身棋盘效用值U1和对手棋盘效用值U2。当U1不小于U2时,选择对自己效用贡献最大的位置;否则,选择对对手效用贡献最大的位置。

策略B:AI计算自身棋盘效用值U1和对手棋盘效用值U2。当U1高出U2一定值时(棋盘局势对AI有利),选择对自己效用贡献最大的位置;否则,在对自己效用贡献最大的位置和对对手效用贡献最大的位置进行随机选择。

效用函数

设效用函数为Ultility(C),,C为棋子颜色,为的权重,为第i个特征。这里,特征选择分别是棋盘中棋子能够二连、三连、四连和五连的个数。

AI设计

由于五子棋搜索分支过大(超过100),效用函数复杂度比较高(达到 ),而搜索复杂度是指数级的( ),搜索深度达到3时算法效率不高,所以搜索深度最大设置为2。

结果分析

对不同方法实现AI一共进行了6组对比实验,如下表所示。

AI对弈AI对比实验

由实验可见,黑棋要比白棋优势,主要是因为黑棋先下,比白棋多占据一个位置,这也是五子棋里普遍认同的(由于黑棋优势,通常比赛对黑棋进行禁手限制,更何况这里没有禁手限制)。

由组1和组2比较可知,策略A要略优于策略B。组1中,MM-A执黑完胜MM-B;组2中,MM-B执黑和MM-A没能有较大优势,即使有黑棋优势的MM-B也只比MM-A只多胜一局。分析原因可能是策略B在进行局势判断时可能准确度可能不够;另外,策略A是一个确定策略,而策略B是一个部分随机策略,在局势不具有优势随机选择进攻或防守可能为AI带来不好的影响。

理论上,搜索深度更深的AI要优于搜索深度较浅的AI。由组5和组6可知,AB-A要优于MM-B。组4中,AB-B优于MM-B;而在组3中,MM-B却优于AB-B,这里可能是黑棋优势的原因和实验次数少导致的结果没能反映出AB-B的优势。

总结

1.实验使用了对抗搜索方法和不同的决策策略实现了五子棋AI。

2. MINMAX和Alpha-beta本质上并没有什么区别,只是Alpha-beta对无搜索意义节点进行了剪枝,大大提高了性能,最好情况下使搜索深度翻倍。

3.使用MINMAX和Alpha-beta方法的AI算法复杂度主要在于MINMAX和Alpha-beta方法本身的复杂度与效用函数的计算复杂度关系不大。因为MINMAX和Alpha-beta方法是指数级复杂度,而效用计算复杂度不高。

4.效用函数对MINMAX和Alpha-beta方法有效性影响很大。效用函数越准确,MINMAX和Alpha-beta方法得到最佳节点有效性越高。但设计一个完全准确的效用函数几乎是不可能的,找到一个有效的效用函数是困难的。为了方便实现和降低效用函数计算量,实验设计的效用函数较简单,未来可以考虑多个更准确和计算复杂度低的效用函数进行对比。

5. MINMAX和Alpha-beta方法搜索得到一个效用值最大的节点,但效用值最大的节点可能有多个,在其中随机选择一个可以为AI增加更多的变化性,可以考虑修改算法得到这些节点。

Github代码

你可能感兴趣的:(应用对抗搜索实现五子棋AI)