alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝

剪枝是必须的

上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义。

可以做一个简单的计算,平均一步考虑 50

种可能性的话,思考到第四层,那么搜索的节点数就是 50^4

= 6250000,在我的酷睿I7的电脑上一秒钟能计算的节点不超过 5W 个,那么 625W 个节点需要的时间在 100

秒以上。电脑一步思考 100秒肯定是不能接受的,实际上最好一步能控制在 5 秒 以内。

顺便说一下层数的问题,首先思考层数必须是偶数。因为奇数节点是AI,偶数节点是玩家,如果AI下一个子不考虑玩家防守一下,那么这个估分明显是有问题的。 然后,至少需要进行4层思考,如果连4四层都考虑不到,那就是只看眼前利益,那么棋力会非常非常弱。

如果能进行6层思考基本可以达到随便赢普通玩家的水平了(普通玩家是指没有专门研究过五子棋的玩家,棋力大约是4层的水平)。

Alpha Beta 剪枝原理

Alpha Beta

剪枝算法的基本依据是:棋手不会做出对自己不利的选择。依据这个前提,如果一个节点明显是不利于自己的节点,那么就可以直接剪掉这个节点。

前面讲到过,AI会在MAX层选择最大节点,而玩家会在MIN层选择最小节点。那么如下两种情况就是分别对双方不利的选择:

在MAX层,假设当前层已经搜索到一个最大值 X,

如果发现下一个节点的下一层(也就是MIN层)会产生一个比X还小的值,那么就直接剪掉此节点。

解释一下,也就是在MAX层的时候会把当前层已经搜索到的最大值X存起来,如果下一个节点

你可能感兴趣的:(alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝)